etc./StackOverFlow

JavaScript 비교에서 어떤 등호 연산자(== vs ===)를 사용해야 합니까?

청렴결백한 만능 재주꾼 2021. 9. 25. 02:24
반응형

질문자 :bcasp


JavaScript를 사용 하기 위해 JSLint 를 사용하고 있으며 if 내부에서 idSele_UNVEHtype.value.length == 0 비교하는 것과 같은 작업을 수행할 때 == (2개의 등호)를 === (3개의 등호)로 대체하라는 많은 제안을 반환 if 성명.

===== 로 바꾸면 성능상의 이점이 있습니까?

비교 연산자가 많기 때문에 성능 향상은 환영합니다.

유형 변환이 발생하지 않으면 == 비해 성능이 향상됩니까?



답변자 : Bill the Lizard


완전 항등 연산자( === )는 형식 변환이 수행되지 않는다는 점을 제외하고는 추상 항등 연산자( ==

참조: Javascript 자습서: 비교 연산자

== 연산자는 필요한 유형 변환을 수행한 후 동일한지 비교합니다. === 연산자는 두 값이 동일한 유형되지 않도록 경우, 변환을하지 않을 === 단순히 반환합니다 false . 둘 다 똑같이 빠릅니다.

Douglas Crockford의 뛰어난 JavaScript: Good Parts 를 인용하자면,

===!== , 그리고 사악한 쌍둥이 ==!= 두 가지 등호 연산자 세트가 있습니다. 좋은 사람들은 당신이 기대하는 방식으로 작동합니다. 두 피연산자가 같은 유형이고 값이 같은 경우 ===true 생성하고 !== false 생성합니다. 사악한 쌍둥이는 피연산자의 유형이 같을 때 올바른 일을 하지만 유형이 다른 경우 값을 강제하려고 시도합니다. 그들이 하는 규칙은 복잡하고 기억하기 어렵습니다. 다음은 흥미로운 사례 중 일부입니다.

 '' == '0' // false 0 == '' // true 0 == '0' // true false == 'false' // false false == '0' // true false == undefined // false false == null // false null == undefined // true ' \t\r\n ' == 0 // true

평등 비교표

전이의 부족은 놀라운 것입니다. 내 충고는 사악한 쌍둥이를 절대 사용하지 말라는 것입니다. 대신 항상 ===!== . 방금 표시된 모든 비교 === 연산자를 사용하여 false


업데이트:

@Casebash 는 주석과 @Phillipe Laybaert의 객체 관련 답변 에서 좋은 점을 지적했습니다. 객체의 경우 ===== 서로 일관되게 작동합니다(특별한 경우 제외).

 var a = [1,2,3]; var b = [1,2,3]; var c = { x: 1, y: 2 }; var d = { x: 1, y: 2 }; var e = "text"; var f = "te" + "xt"; a == b // false a === b // false c == d // false c === d // false e == f // true e === f // true

toString 또는 valueOf 메소드로 인해 동일한 프리미티브로 평가되는 객체와 프리미티브를 비교할 때입니다. String 생성자를 사용하여 생성된 string 객체와 string primitive의 비교를 고려하십시오.

 "abc" == new String("abc") // true "abc" === new String("abc") // false

여기서 == 연산자는 두 객체의 값을 확인하고 true 반환하지만 === 는 두 객체가 동일한 유형이 아닌 것을 확인하고 false 반환합니다. 어느 것이 맞습니까? 그것은 당신이 비교하려는 것에 달려 있습니다. 내 조언은 질문을 완전히 무시하고 String 생성자를 사용하여 문자열 리터럴에서 문자열 개체를 만들지 않는 것입니다.

참조
http://www.ema-international.org/ema-262/5.1/#sec-11.9.3



답변자 : Community Wiki


== 연산자 사용( Equality )

 true == 1; //true, because 'true' is converted to 1 and then compared "2" == 2; //true, because "2" is converted to 2 and then compared

=== 연산자 사용( Identity )

 true === 1; //false "2" === 2; //false

이는 등호 연산자 == 가 type coercion 을 수행 하기 때문입니다. 즉, 인터프리터는 비교하기 전에 값을 암시적으로 변환하려고 합니다.

반면에, 동일성 연산자 === 는 type coercion을 수행 하지 않으므로 비교할 때 값을 변환하지 않으므로 한 단계를 건너뛸 때 더 빠릅니다(This JS 벤치마크 테스트에 따르면).



답변자 : SNag


===== 사이의 평등 비교에 대한 흥미로운 그림 표현.

출처: http://dorey.github.io/JavaScript-Equality-Table/


var1 === var2

=== 를 사용할 때 모든 것이 있는 그대로입니다. 평가되기 전에 아무 것도 변환되지 않습니다.

JS에서 ===의 평등 평가


var1 == var2

== 를 사용할 때 일부 펑키 변환이 발생합니다.

JS에서 ==의 평등 평가


결론:

=== 사용하십시오.

== 발생하는 변환을 완전히 이해하지 못하는 경우)



답변자 : Philippe Leybaert


여기 답변에서 나는 평등의 의미에 대해 아무것도 읽지 않았습니다. 어떤 사람들은 === 동등하고 같은 유형을 의미한다고 말하지만 실제로는 그렇지 않습니다. 이는 실제로 두 피연산자가 동일한 객체를 참조 하거나 값 유형의 경우 동일한 값을 가짐을 의미 합니다.

따라서 다음 코드를 사용합시다.

 var a = [1,2,3]; var b = [1,2,3]; var c = a; var ab_eq = (a === b); // false (even though a and b are the same type) var ac_eq = (a === c); // true

여기도 마찬가지입니다.

 var a = { x: 1, y: 2 }; var b = { x: 1, y: 2 }; var c = a; var ab_eq = (a === b); // false (even though a and b are the same type) var ac_eq = (a === c); // true

또는:

 var a = { }; var b = { }; var c = a; var ab_eq = (a === b); // false (even though a and b are the same type) var ac_eq = (a === c); // true

이 동작이 항상 명확한 것은 아닙니다. 이야기에는 평등하고 같은 유형이 되는 것보다 더 많은 것이 있습니다.

규칙은 다음과 같습니다.

값 유형(숫자):
a === b true를 돌려줍니다 와 a b 같은 값을 가지고 같은 유형입니다

참조 유형의 경우:
a === b true를 돌려줍니다 및 a b 참조 동일한 객체

문자열의 경우:
a === b true를 돌려줍니다 와 a b 모두 문자열이며 동일한 문자를 포함


문자열: 특별한 경우...

문자열은 값 유형이 아니지만 Javascript에서는 값 유형처럼 작동하므로 문자열의 문자가 동일하고 길이가 같을 때 "동일"합니다(세 번째 규칙에서 설명됨)

이제 흥미로워집니다.

 var a = "12" + "3"; var b = "123"; alert(a === b); // returns true, because strings behave like value types

그러나 이것은 어떻습니까?:

 var a = new String("123"); var b = "123"; alert(a === b); // returns false !! (but they are equal and of the same type)

문자열이 값 유형처럼 작동한다고 생각했습니까? 글쎄, 그것은 당신이 묻는 사람에 달려 있습니다 ...이 경우와 b는 같은 유형이 아닙니다. aObject 유형이고 bstring 유형입니다. String 생성자를 사용하여 문자열 객체를 생성하면 대부분의 경우 문자열처럼 작동하는 Object 유형이 생성된다는 점을 기억하십시오.



답변자 : nalply


이 권고를 덧붙이겠습니다.

의심스러운 경우 사양을 읽으십시오!

ECMA-262는 JavaScript가 방언인 스크립팅 언어에 대한 사양입니다. 물론 실제로는 가장 중요한 브라우저가 어떻게 작동하는지가 어떻게 처리되어야 하는지에 대한 난해한 정의보다 더 중요합니다. 그러나 왜 new String("a") !== "a" 인지 이해하는 것이 도움이 됩니다.

이 질문을 명확히 하기 위해 사양을 읽는 방법을 설명하겠습니다. 나는 이 아주 오래된 주제에서 아무도 매우 이상한 효과에 대한 답을 가지고 있지 않다는 것을 알았습니다. 따라서 사양을 읽을 수 있다면 이것은 당신의 직업에 엄청난 도움이 될 것입니다. 습득한 스킬입니다. 계속하겠습니다.

===에 대한 PDF 파일을 검색하면 사양의 56페이지인 11.9.4로 이동합니다. Strict Equals Operator ( === ) , 그리고 사양을 훑어본 후 다음을 찾았습니다.

11.9.6 엄격한 평등 비교 알고리즘
비교 x === y(여기서 x와 y는 값)는 true 또는 false를 생성합니다. 이러한 비교는 다음과 같이 수행됩니다.
1. Type(x)가 Type(y)와 다른 경우 false를 반환합니다.
2. Type(x)가 정의되지 않은 경우 true를 반환합니다.
3. Type(x)가 Null 이면 true를 반환합니다.
4. Type(x)가 Number가 아니면 11단계로 이동합니다.
5. x가 NaN 이면 false를 반환합니다.
6. y가 NaN 이면 false를 반환합니다.
7. x가 y와 같은 숫자 값 이면 true를 반환합니다.
8. x가 +0이고 y가 -0 이면 true를 반환합니다.
9. x가 −0이고 y가 +0 이면 true를 반환합니다.
10. false를 반환합니다.
11. Type(x)가 문자열이면 x와 y가 정확히 동일한 문자 시퀀스(동일한 길이 및 해당 위치의 동일한 문자) 이면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
12. Type(x)가 부울이면 x와 y가 모두 true이거나 모두 false 이면 true를 반환하고 , 그렇지 않으면 false를 반환합니다. 그렇지 않으면 false를 반환합니다.
13. x와 y가 동일한 객체를 참조하거나 서로 결합된 객체를 참조하는 경우 true를 반환합니다(13.1.2 참조). 그렇지 않으면 false 를 반환합니다.

흥미로운 것은 11단계입니다. 예, 문자열은 값 유형으로 처리됩니다. 그러나 이것은 new String("a") !== "a" 인 이유를 설명하지 않습니다. ECMA-262를 준수하지 않는 브라우저가 있습니까?

그렇게 빠르지 않다!

피연산자의 유형을 확인합시다. typeof() 에 래핑하여 직접 사용해 보세요. 나는 new String("a") 이 객체이고 1단계가 사용된다는 것을 발견했습니다. 유형이 다르면 false를 반환합니다.

new String("a") 이 문자열을 반환하지 않는 이유가 궁금하다면 사양을 읽는 연습을 해보는 것은 어떨까요? 즐거운 시간 보내세요!


Aidiakapi는 아래 댓글에 이렇게 썼습니다.

사양에서

11.2.2 새로운 연산자 :

Type(생성자)가 Object가 아니면 TypeError 예외를 던집니다.

즉, String이 Object 유형이 아니면 new 연산자와 함께 사용할 수 없습니다.

new 는 String 생성자에 대해서도 항상 Object를 반환합니다. 그리고 아아! 문자열에 대한 값 의미 체계(11단계 참조)가 손실됩니다.

그리고 이것은 마지막으로 new String("a") !== "a" 를 의미 합니다.



답변자 : Simon Scarfe


다음과 같은 코드를 사용하여 Firebug 와 함께 Firefox에서 이것을 테스트했습니다.

 console.time("testEquality"); var n = 0; while (true) { n++; if (n == 100000) break; } console.timeEnd("testEquality");

그리고

 console.time("testTypeEquality"); var n = 0; while (true) { n++; if (n === 100000) break; } console.timeEnd("testTypeEquality");

내 결과(각각 5회 테스트 및 평균):

 ==: 115.2 ===: 114.4

그래서 나는 아주 작은 차이(이것은 100000번 이상 반복된다는 것을 기억하십시오)는 무시할 수 있을 정도라고 말하고 싶습니다. 성능 === 하는 이유 가 아닙니다 . 유형 안전(자바스크립트에서 얻을 수 있는 것만큼 안전함) 및 코드 품질이 보장됩니다.



답변자 : Shiki


PHP와 JavaScript에서는 엄격한 항등 연산자입니다. 즉, 유형과 값을 모두 비교합니다.



답변자 : Dimitar


JavaScript에서는 동일한 값과 유형을 의미합니다.

예를 들어,

 4 == "4" // will return true

하지만

 4 === "4" // will return false


답변자 : Doctor Jones


=== 연산자 이것은 연산자 == 다른가 엄격한 비교 연산자 불린다.

2개의 var와 b를 사용하겠습니다.

"a == b" 가 true로 평가되려면 a와 b가 같은 값 이어야 합니다.

"a === b"의 경우 a와 b는 동일한 값 이어야 하고 또한 동일한 유형 이어야 true로 평가됩니다.

다음 예를 들어

 var a = 1; var b = "1"; if (a == b) //evaluates to true as a and b are both 1 { alert("a == b"); } if (a === b) //evaluates to false as a is not the same type as b { alert("a === b"); }

요약하자면 ; == 연산자를 사용하면 원하지 않는 상황에서 true로 평가될 수 있으므로 === 연산자를 사용하는 것이 더 안전합니다.

90% 사용 시나리오에서는 어느 것을 사용하든 상관없지만 어느 날 예기치 않은 동작이 발생할 때 차이점을 아는 것이 편리합니다.



답변자 : Luis Perez


== 이 예측할 수 없는 이유는 무엇입니까?

"" 을 숫자 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"( ===

== 다른 많은 일을 합니다.

함수에 대한 특수 처리, null, 정의되지 않은 문자열에 대한 특수 처리, 이름을 지정합니다.

꽤 이상해집니다.

== 가 하는 일을 하는 함수를 작성하려고 하면 다음과 같이 보일 것입니다.

 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(); }

그래서 이것은 무엇을 의미합니까?

== 가 복잡하다는 뜻입니다.

복잡하기 때문에 그것을 사용할 때 무슨 일이 일어날지 알기 어렵습니다.

즉, 버그로 끝날 수 있습니다.

그래서 이야기의 교훈은...

당신의 삶을 덜 복잡하게 만드십시오.

== 대신 === 를 사용하십시오.

끝.



답변자 : vsync


=== 같은 면이 typevalue 가 동일한지 확인합니다.


예시:

 '1' === 1 // will return "false" because `string` is not a `number`

일반적인 예:

 0 == '' // will be "true", but it's very common to want this check to be "false"

또 다른 일반적인 예:

 null == undefined // returns "true", but in most cases a distinction is necessary

undefined , null , 0 또는 "" 인지 신경쓰지 않기 때문에 형식이 지정되지 않은 검사가 편리할 때가 많습니다.



답변자 : Samar Panda


엄격한 동등성에 대한 Javascript 실행 흐름도 / 비교 '==='

자바스크립트 완전 평등

비엄격 같음/비교 '=='에 대한 Javascript 실행 흐름도

자바스크립트 비 평등



답변자 : user2496033


자바스크립트 === == .

 0==false // true 0===false // false, because they are of a different type 1=="1" // true, auto type coercion 1==="1" // false, because they are of a different type


답변자 : Pop Catalin


유형 강제 변환이 없는 평등을 의미합니다. 유형 강제 변환은 JavaScript가 다른 데이터 유형을 문자열 데이터 유형으로 자동 변환하지 않는다는 것을 의미합니다.

 0==false // true,although they are different types 0===false // false,as they are different types 2=='2' //true,different types,one is string and another is integer but javaScript convert 2 to string by using == operator 2==='2' //false because by using === operator ,javaScript do not convert integer to string 2===2 //true because both have same value and same types


답변자 : Constantin


일반적인 스크립트에서는 성능 차이가 없습니다. 더 중요한 사실은 천 "==="이 천 "=="보다 1KB 더 무겁다는 사실일 수 있습니다. JavaScript 프로파일러 는 귀하의 경우에 성능 차이가 있는지 알려줄 수 있습니다.

그러나 개인적으로 나는 JSLint가 제안하는 것을 할 것입니다. 이 권장 사항은 성능 문제 때문이 아니라 형식 강제 변환이 ('\t\r\n' == 0) 이 true임을 의미하기 때문입니다.



답변자 : Community Wiki


등호 비교 연산자 ==는 혼란스럽기 때문에 피해야 합니다.



답변자 : Sean


사용량에서 두 작업 사이에 성능 차이가 없을 것 같습니다. 두 매개변수가 이미 동일한 유형이기 때문에 수행할 유형 변환이 없습니다. 두 작업 모두 유형 비교와 값 비교가 뒤따릅니다.



답변자 : Aniket Thakur


예! 상관 있지.

자바스크립트의 === 연산자는 값과 유형을 검사합니다. 여기서 == 연산자 는 값만 검사합니다(필요한 경우 유형 변환 수행) .

여기에 이미지 설명 입력

쉽게 테스트할 수 있습니다. HTML 파일에 다음 코드를 붙여넣고 브라우저에서 엽니다.

 <script> function onPageLoad() { var x = "5"; var y = 5; alert(x === 5); }; </script> </head> <body onload='onPageLoad();'>

경고에 ' 거짓 '이 표시됩니다. onPageLoad() 메서드를 alert(x == 5); 수정합니다. 당신은 사실 을 얻을 것이다.



답변자 : Daniel


엄격한 검사입니다.

특히 0과 false 및 null 사이를 확인하는 경우에 좋습니다.

예를 들어 다음이 있는 경우:

 $a = 0;

그 다음에:

 $a==0; $a==NULL; $a==false;

모두 true를 반환하며 이를 원하지 않을 수 있습니다. 배열의 0번째 인덱스를 반환하거나 실패 시 false를 반환할 수 있는 함수가 있다고 가정해 보겠습니다. "==" false로 확인하면 혼란스러운 결과를 얻을 수 있습니다.

따라서 위와 동일하지만 엄격한 테스트:

 $a = 0; $a===0; // returns true $a===NULL; // returns false $a===false; // returns false


답변자 : Niraj CHoubey


=== 연산자는 값과 변수 유형이 같은지 확인합니다.

== 연산자는 변수의 값이 같은지 확인합니다.



답변자 : Amit


간단히

==강압 피연산자의 비교 수단

그리고

=== 는 유형 강제 변환 없이 피연산자 간의 비교를 의미합니다.

JavaScript의 유형 강제 변환은 데이터 유형을 다른 데이터 유형으로 자동 변환하는 것을 의미합니다.

예를 들어:

 123 == "123" // Returns true, because JS coerces string "123" to number 123 // and then goes on to compare `123 == 123`. 123 === "123" // Returns false, because JS does not coerce values of different types here.


답변자 : ashes


JSLint는 때때로 물건을 수정해야 하는 비현실적인 이유를 제공합니다. === 는 유형이 이미 동일한 경우 == 와 정확히 동일한 성능을 갖습니다.

유형이 동일하지 않을 때만 더 빠르며, 이 경우 유형 변환을 시도하지 않고 직접 false를 반환합니다.

따라서 IMHO, JSLint는 새 코드를 작성하는 데 사용될 수 있지만 불필요한 과도한 최적화는 어떤 대가를 치르더라도 피해야 합니다.

if (a == 'test') 와 같은 검사에서 a가 문자열만 될 수 있다는 사실을 알 때 ===== 로 변경할 이유가 없습니다.

그런 식으로 많은 코드를 수정하면 개발자와 검토자의 시간이 낭비되고 아무 것도 얻지 못합니다.



답변자 : Vikas


간단한 예는

 2 == '2' -> true, values are SAME because of type conversion. 2 === '2' -> false, values are NOT SAME because of no type conversion.


답변자 : mar10


엄지 손가락의 규칙으로서, 나는 일반적으로 사용하는 것이 === 대신 == (와 !== 대신 != ).

이유는 위의 답변에 설명되어 있으며 Douglas Crockford는 이에 대해 매우 명확합니다( JavaScript: Good Parts ).

그러나 한 가지 예외가 있습니다 . == null 은 'is null 또는 undefined'를 확인하는 효율적인 방법입니다.

 if( value == null ){ // value is either null or undefined }

예를 들어 jQuery 1.9.1은 이 패턴을 43번 사용하고 JSHint 구문 검사기 는 이러한 이유로 eqnull 완화 옵션도 제공합니다.

jQuery 스타일 가이드에서 :

== 대신 엄격한 평등 검사(===)를 사용해야 합니다. 유일한 예외는 undefined 및 null을 null로 확인할 때입니다.

 // Check for both undefined and null values, for some important reason. undefOrNull == null;

편집 2021-03:

요즘 대부분의 브라우저Nullish 병합 연산자( ?? )Logical nullish 할당 (??=) 을 지원하므로 변수가 null이거나 정의되지 않은 경우 더 간결한 방법으로 기본값을 할당할 수 있습니다. 예를 들면 다음과 같습니다.

 if (a.speed == null) { // Set default if null or undefined a.speed = 42; }

다음 형식 중 하나로 작성할 수 있습니다.

 a.speed ??= 42; a.speed ?? a.speed = 42; a.speed = a.speed ?? 42;


답변자 : Harry He


언급 된 상위 2 개 답변 ==는 평등을 의미하고 ===는 동일성을 의미합니다. 불행히도 이 진술은 정확하지 않습니다.

==의 두 피연산자가 객체인 경우 동일한 객체인지 확인하기 위해 비교됩니다. 두 피연산자가 동일한 객체를 가리키는 경우 등호 연산자는 true를 반환합니다. 그렇지 않으면 둘은 같지 않습니다.

 var a = [1, 2, 3]; var b = [1, 2, 3]; console.log(a == b) // false console.log(a === b) // false

위의 코드에서 ==와 ===는 모두 false가 됩니다. 왜냐하면 와 b는 같은 객체가 아니기 때문입니다.

즉, ==의 두 피연산자가 모두 객체인 경우 ==는 ===와 동일하게 동작하며 이는 동일성을 의미하기도 합니다. 이 두 연산자의 근본적인 차이점은 유형 변환에 관한 것입니다. ==는 같음을 확인하기 전에 변환을 수행하지만 ===는 변환하지 않습니다.



답변자 : Thomas Hansen


문제는 JavaScript가 암시적 변환을 의미하는 경우가 많기 때문에 쉽게 문제가 발생할 수 있다는 것입니다.

 var x = 0; var isTrue = x == null; var isFalse = x === null;

곧 문제가 됩니다. 암시적 변환이 "악"인 이유에 대한 가장 좋은 샘플은 MFC /C++의 이 코드에서 가져올 수 있습니다. 이 코드는 CString에서 포인터 typedef 유형인 HANDLE로 암시적 변환으로 인해 실제로 컴파일됩니다...

 CString x; delete x;

분명히 런타임 중에 매우 정의되지 않은 작업을 수행합니다 ...

C++ 및 STL의 암시적 변환에 대한 Google은 이에 대한 일부 인수를 가져옵니다...



답변자 : Paul Butcher


핵심 자바 스크립트 참조에서

=== 피연산자가 유형 변환 없이 완전히 같으면(위 참조) true 반환합니다.



답변자 : user2601995


평등 비교:

연산자 ==

두 피연산자가 같으면 true를 반환합니다. 피연산자는 비교되기 전에 동일한 유형으로 변환됩니다.

 >>> 1 == 1 true >>> 1 == 2 false >>> 1 == '1' true

평등 및 유형 비교:

연산자 ===

두 피연산자가 동일하고 유형이 같으면 true를 반환합니다. 일반적으로 이런 방식으로 비교하는 것이 더 좋고 더 안전합니다. 배후에서 유형 변환이 없기 때문입니다.

 >>> 1 === '1' false >>> 1 === 1 true


답변자 : Christian Hagelid


===== 간의 차이점을 보여주는 편리한 비교 표입니다.

결론은 다음과 같이 말합니다.

"2등호에 대해 발생하는 변환을 완전히 이해하지 못한 경우 3등호를 사용하십시오."

http://dorey.github.io/JavaScript-Equality-Table/



답변자 : Community Wiki


null과 undefined는 무입니다.

 var a; var b = null;

여기 와 a b 값이 없습니다. 반면 0, false 및 ''는 모두 값입니다. 이 모든 것들 사이에 공통적인 한 가지는 그것들이 모두 거짓 값이라는 것입니다. 즉, 모두 거짓 조건을 충족한다는 의미입니다.

따라서 0, false 및 ''는 함께 하위 그룹을 형성합니다. 반면에 null & undefined는 두 번째 하위 그룹을 형성합니다. 아래 이미지에서 비교를 확인하십시오. null과 undefined는 같습니다. 나머지 세 개는 서로 같을 것입니다. 그러나 JavaScript에서는 모두 거짓 조건으로 취급됩니다.

여기에 이미지 설명 입력

이는 모든 객체({}, 배열 등)와 동일하며 비어 있지 않은 문자열 및 부울 true는 모두 참 조건입니다. 그러나, 그들은 모두 평등하지 않습니다.



출처 : Here


출처 : http:www.stackoverflow.com/questions/359494/which-equals-operator-vs-should-be-used-in-javascript-comparisons">

반응형