// `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