Javascript에서 NaN 값이 같은지 비교
Javascript에서 동일한 지 두 개의 숫자 값을 비교해야합니다. 값도있을 수 있습니다 NaN
. 이 코드를 생각해 냈습니다.
if (val1 == val2 || isNaN(val1) && isNaN(val2)) ...
잘 작동하지만 부풀어 보입니다. 좀 더 간결하게 만들고 싶습니다. 어떤 아이디어?
을 사용해보십시오.Object.is()
두 값이 동일한 값인지 확인합니다. 다음 중 하나가 유지되면 두 값이 동일합니다.
- 양자 모두
undefined
- 양자 모두
null
- 둘 다
true
또는 둘 다false
- 동일한 순서로 동일한 문자를 가진 동일한 길이의 두 문자열
- 둘 다 같은 개체
- 숫자와
- 양자 모두
+0
- 양자 모두
-0
- 양자 모두
NaN
- 또는 둘 다 0이 아니고
NaN
둘 다 동일한 값을 가짐
- 양자 모두
예 Object.is(NaN, NaN)
=>true
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is 를 참조하십시오.
if(val1 == val2 || (isNaN(val1) && isNaN(val2)))
개선 할 사항이 없습니다. 괄호를 추가하여 모든 사람에게 명확하게 알립니다.
피하십시오 isNaN
. 그 동작은 오해의 소지가 있습니다.
isNaN(undefined) // true
_.isNaN
( Underscore.js에서 ) 예상대로 작동하는 우아한 함수입니다.
// Is the given value `NaN`?
//
// `NaN` is the only value for which `===` is not reflexive.
_.isNaN = function(obj) {
return obj !== obj;
};
_.isNaN(undefined) // false
_.isNaN(0/0) // true
if ( val1 === val2 )
둘 중 하나 또는 둘 다 있으면 NaN
거짓으로 평가됩니다.
또한, NaN !== NaN
이 두 변수가 숫자라는 것을 알고있는 한 다음을 시도 할 수 있습니다.
if (val1 + '' == val2 + '')
두 값을 문자열로 바꿉니다. 재미있는 대답이지만 작동합니다. :)
NaN은 비교 방법에 관계없이 결코 그 자체와 동일하지 않으므로 내가 생각할 수있는 문제에 대한 더 간결한 해결책은이 다소 특별한 비교를 수행하기위한 설명적인 이름으로 함수 호출을 만들고 해당 비교 함수를 사용하는 것입니다. 대신 코드.
또한 undefined가 undefined와 같아야한다고 결정한 날 알고리즘에 대한 변경 사항을 지역화하는 이점이 있습니다.
숫자의 경우 솔루션은 좋지만 다른 데이터 유형에서도 작동하도록 확장하려면 다음과 같이 제안합니다.
if(val1 === val2 || (val1 !== val1 && val2 !== val2))
글로벌 한 이유 isNaN
는 잘못된 것입니다. 다음과 같은 시나리오에서 잘못된 결과를 제공합니다.
isNaN(undefined); // true
isNaN({}); // true
isNaN("lorem ipsum"); // true
동등성에 대한 NaN 비교를 다루는 포괄적 인 답변을 여기에 게시했습니다.
그리고 Number.isNaN () 함수는 무엇 입니까? 나는 이것이 가능할 때마다 사용되어야한다고 믿는다.
> NaN === NaN
false
> Number.isNaN
ƒ isNaN() { [native code] }
> Number.isNaN() === Number.isNaN()
true
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN
I created this answer after reviewing the suggestions of ThiefMaster, Esailija, Joachim Isaksson and davidchambers. Can this be further improved?
// Determines if two numeric values are equal.
// Also returns true when both parameters are NaN.
function areEqualNumeric(val1, val2) {
return val1 === val2 || (val1 !== val1 && val2 !== val2);
}
Why not an if statement like this?
if (isNaN(x) == true){
alert("This is not a number.");
}
Equality comparison with NaN always results in False
.
We can go for the javascript function isNaN()
for checking equality with NaN. Example:
1. isNaN(123) //false
2. var array = [3, NaN];
for(var i = 0 ; i< array.length; i++){
if(isNaN(array[i])){
console.log("True ---- Values of " + i);
} else {
console.log("false ---- Values of " + i);
}
}
Results:
false ---- Values of 0
True ---- Values of 1
Found another way using Array.prototype.includes MDN link. Apparently, [NaN].includes(NaN) returns true for NaN.
function IsActuallyNaN(obj) {
return [obj].includes(NaN);
}
Or we can go with davidchambers' solution which is much simpler.
function IsActuallyNaN2(obj) {
return obj !== obj;
}
참고URL : https://stackoverflow.com/questions/8965364/comparing-nan-values-for-equality-in-javascript
'Program Tip' 카테고리의 다른 글
Symfony2-Assetic-CSS에서 이미지로드 (0) | 2020.12.08 |
---|---|
Python 3으로 URL 디코딩 (0) | 2020.12.08 |
MurmurHash-무엇입니까? (0) | 2020.12.08 |
UICollectionView 어설 션 실패 (0) | 2020.12.08 |
INSERT 문을 사용하여 MySQL Workbench로 테이블 내보내기 (0) | 2020.12.08 |