왜 ==
그렇게 예측할 수 없습니까?
빈 문자열 ""
을 숫자 0과 비교하면 무엇을 얻 0
습니까?
true
그렇습니다 ==
. 빈 문자열 에 따라 맞으며 숫자 0은 같은 시간입니다.
그리고 거기서 끝나지 않습니다. 여기 또 다른 것이 있습니다.
'0' == false // true
배열은 정말 이상합니다.
[1] == true // true
[] == false // true
[[]] == false // true
[0] == false // true
그런 다음 줄이 이상해
[1,2,3] == '1,2,3' // true - REALLY?!
'\r\n\t' == 0 // true - Come on!
더 나 빠진다 :
언제 같지 않습니까?
let A = '' // empty string
let B = 0 // zero
let C = '0' // zero string
A == B // true - ok...
B == C // true - so far so good...
A == C // **FALSE** - Plot twist!
다시 말해 보겠습니다.
(A == B) && (B == C) // true
(A == C) // **FALSE**
그리고 이것은 당신이 프리미티브로 얻는 미친 것들입니다.
==
객체와 함께 사용할 때 완전히 새로운 수준의 미친 것 입니다.
이 시점에서 아마도 궁금 할 것입니다 ...
왜 이런 일이 발생합니까?
"triple equals"( ===
) 와 달리 두 값이 같은지 확인하기 때문입니다.
==
다른 것들 의 전체 무리를 수행합니다 .
함수에 대한 특수 처리, 널에 대한 특수 처리, 정의되지 않은 문자열이 있으며 이름을 지정합니다.
꽤 별나다.
실제로, 어떤 기능을 수행하는 함수를 작성하려고하면 ==
다음과 같이 보일 것입니다.
function isEqual(x, y) { // if `==` were a function
if(typeof y === typeof x) return y === x;
// treat null and undefined the same
var xIsNothing = (y === undefined) || (y === null);
var yIsNothing = (x === undefined) || (x === null);
if(xIsNothing || yIsNothing) return (xIsNothing && yIsNothing);
if(typeof y === "function" || typeof x === "function") {
// if either value is a string
// convert the function into a string and compare
if(typeof x === "string") {
return x === y.toString();
} else if(typeof y === "string") {
return x.toString() === y;
}
return false;
}
if(typeof x === "object") x = toPrimitive(x);
if(typeof y === "object") y = toPrimitive(y);
if(typeof y === typeof x) return y === x;
// convert x and y into numbers if they are not already use the "+" trick
if(typeof x !== "number") x = +x;
if(typeof y !== "number") y = +y;
// actually the real `==` is even more complicated than this, especially in ES6
return x === y;
}
function toPrimitive(obj) {
var value = obj.valueOf();
if(obj !== value) return value;
return obj.toString();
}
이것이 무엇을 의미합니까?
==
복잡하다는 의미 입니다.
복잡하기 때문에 사용할 때 어떤 일이 일어날 지 알기가 어렵습니다.
이는 버그로 끝날 수 있음을 의미합니다.
이야기의 교훈은 ...
인생을 덜 복잡하게 만드십시오.
===
대신에 사용하십시오 ==
.
끝.
=== vs ==
있지만, PHP에서, 여기 읽을 수 있습니다 : stackoverflow.com/questions/2401478/why-is-faster-than-in-php/...