Sorry. for koreans only. I'll add english short description. or just visit http://wtfjs.com
아오 썅.
정정사항입니다.
객체 동일비교는 항상 valueOf 결과물로 나온 비교로 하는 데다가,
객체와 배열은 valueOf 해봐야 객체로 나오기 때문에
객체와 배열은 == 하나 === 하나 같은 비용으로 비교합니다.
[1,2,3]==[1,2,3] 은 false가 되므로
[1,,,2]==[1,undefined,undefuned,2] 는 무조건 false로 나옵니다.
16. console.log([2,,,3] == [2, undefined, undefined, 3]);
깜짝 문제.
정답 : false
해설 : 배열의 불능 자리와 undefined 자리는 틀리다.
배열 자리에 undefined 를 부여하면 자리가 부여되며 undefined 가 채워진다. 배열 요소가 되는 것.
하지만 자리를 주지 않으면 값 자체가 없기 때문에 undefined가 나오지만 요소 불능과 undefined 는 틀림.
20. [1,2,3] < [1,2,4] // true
배열도 비교 연산이 가능하다?
JS는 String 사전적 정렬을 이용해 비교 연산을 수행한다.
근거 : ECMAScript 5th 11.8.5 The Abstract Relational Comparison Algorithm (NOTE 2)
23. [,,,].join() // “,,”
[[], null, undefined, null] == “,,,” //true
Join 메소드의 위엄??
배열의 문자열 표현은 빈 객체 계열에는 빈 문자로 변한다.
(단, NaN은 제외)
근거 : ECMAScript 5th (final draft) 11.9.3 추상 동일 비교 알고리즘
Function strCheck(a){
if(![a].join()) return a;
else return a+’ is good string.’;
}
24. function fnEval(a){
var Z = ‘constructor’;
return Z[Z][Z](a)();
}
jQuery.globalEval = 고생 사서 왜 해 간단하게 끝내면 되는데..
27. ~~3.2393895638945 == 3
Math.floor 보다 더 짧은 소수점 버리기 함수
비트 부정 연산자(~)는 자바스크립트에서 2개가 먹히다니…
숫자 연산 시 –(n+1) 되는건 아실테고…
indexOf 로 참 거짓 판별하는 쉬운 방법
if(~“I’m a banana”.indexOf(‘apple’)){
alert(‘바나나’);
}else{
alert(‘사과’);
}
33. isNaN 응용하기 = ID 입력 유효성 검사
If(!isNaN(parseInt(value))){
alert(‘첫글자는 영문부터 해주삼.’);
}
If(!isNaN(+value)){
alert(‘영문자는 포함해주삼.’);
}
// => value 가 영문과 숫자만 입력 가능하다고 가정할 때,
If(isNaN(+value) || isNaN(parseInt(value))){
alert(‘ID 형식에 맞춰 영문자부터 시작한 ID로 넣어주삼.’);
}
34. Eval 이 위험한 이유 이것만 알면 끝.
var a = ‘x-=2’;
function b(s){
var x = 4;
eval(s);
return x;
}
b(a) == 2