+
: 문자열을 우선시한다.-
/ *
/ /
등 ) : 숫자를 우선시한다.console.log(3 + '2' + 3); // '323'
console.log(3 * '2' * 3); // 18
산술연산시 boolean은 숫자로 바뀌려는 노력을 한다.
console.log(true + true); // 2
console.log(true + 2); // 3
console.log(false - 3); // -3
산술 연산시 객체는 toString화 된다.
따라서 '오버라이딩' 해준다.
console.log('3' + {foo: 'foo'});
console.log('3' + {foo: 'foo', toString() { return this.foo }});
// '3[object Object]'
// '3foo'
toString과 valueOf 중 valueOf가 우선시된다.
console.log("I'm " + {name1: 'hymein', name2: 'miniddo'
, toString() { return this.name1 }, valueOf() { return this.name2 }});
// I'm miniddo
산술 연산 시 배열은 ,
를 기준으로 JOIN 된다.
console.log('5' + ['foo', 'bar']); // 5foo,bar
// ['foo', 'bar'].join(',')
Truthy
한 값: '0', 'false', [], {}, function() {}
Falsy
인 값: 0, NaN, false, null, undefined, ''
console.log(0 == "0"); - (1) true
console.log(0 == []); - (2) true
console.log("0" == []) - (3) false
(1) 모든 숫자는 문자로 바꿀 수 있다. 따라서 숫자를 문자로 변환하여 비교한다.
(2) 배열은 ','를 기준으로 join된다. 빈 배열은 ""가 되므로 falsy == falsy로 같다.
(3) "0" == ""