// `squares` 에 들어가는 값은 `null`, `"O"`, `"X"` 셋 중 하나이다.
if (squares[a] && squares[a] === squares[b] && squares[a] === squares[c]) {
return squares[a];
}
처음에 위와 같은 코드를 접했을 때 이해가 되질 않았다.
'맨 왼쪽 squares[a]
는 문자열 혹은 null 값이라서 에러가 날텐데 왜 정상적으로 작동하지?' 라는 생각이 들었다.
자바스크립트에서는 다음과 같은 규칙에 따라 어떤 임의의 값을
Bool
값으로 변환할 수 있다.
1.false
,0
, 빈문자열(""
), 수가 아님을 뜻하는NaN
,null
,undefined
모두false
가 된다.
2. 다른 모든 값은 true가 된다.Boolean(''); // false Boolean(234); // true
이와 같은 규칙 때문에, squares[a]
가 null
이면 false
를 반환, 문자열 값이 존재하면 true
를 반환하게 된다.
참고
https://developer.mozilla.org/ko/docs/Web/JavaScript/A_re-introduction_to_JavaScript