let username = ''; // data type: string but recognized as false?
let defaultname; // data type: undefined
if (username) { // if false
defaultName = username;
} else { // if true
defaultName = 'Stranger';
}
console.log(defaultName); // prints: Stranger
console.log(typeof username); // prints: string
위 코드를 보다가 혼란이 왔는데, username(empty string)이 false 처리 되는데도 typeof 결과값은 string으로 나와서 살짝 혼란,,, 그래서 그냥 empty string은 string이지만, 조건문에서는 false로 받아들이는 것 같다는 납득을 시전했다. 그런데 또 username === false로 조건문 짜서 보면 username === false 자체가 false(username === true)여서 2차 멘붕,,, 이 때 도움을 청해야겠다는 생각이 들었다...
그런데 생각해 보니 null 등도 false는 아니지만 false 값을 갖는다는 점에서 그냥 false는 아니지만 false 로 '간주'한다고 이해해 버렸다. 초심자의 문제는 이해를 제대로 했는지 아닌지 숙련자에게 물어보기 전까지는 알 수 없다는 점이다^^... 그래서 이렇게 이해한 게 맞는지 개발자 분께 여쭤보아야 하는 숙제가 남아 있다.
https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/
Truth, Equality and JavaScript
You don’t have to be a JavaScript novice to get confused by this… or this… The good news is that there is a standard and all browsers follow it. Some authors …
javascriptweblog.wordpress.com
그런데 다행히도 개발자 분께 여쭤보기 전에 이 멋진 블로그를 찾았다!!!!!!!!!!! 내가 궁금해 했던 부분이 정확히 적혀 있는,,,(감동) 내가 작성한 코드에서 boolean 값이 true로 나왔던 이유는 ===(strict equals operator)를 사용했기 때문이었다ㅋㅋㅋㅋㅋ ==를 사용하니 정상적으로 해결됨 >.< 위 블로그에 해당하는 사례가 정확히 나와 있어서 의문이 해결되었다. 뿌듯뿌듯