null >= 0 & & null <= 0>인데 null == 0이 아닌 이유는 무엇입니까?
의 종류가 을 1 그 .number
그리고 않은 을 할당합니다.에 0합니다입니다. 여기서 변수는 처음에null
아니면undefined
.
번째 은 였습니다.v >= 0 ? v += 1 : v = 0
가 아닌 으로 만들 이라고 생각했기 입니다 로 틀렸습니다. 하지만 그것은 그 이후로 틀렸습니다.null >= 0
참으로 평가됩니다.그 후에 나는 배웁니다.null
0처럼 동작하며 다음 식을 모두 true로 평가합니다.
null >= 0 && null <= 0
!(null < 0 || null > 0)
null + 1 === 1
1 / null === Infinity
Math.pow(42, null) === 1
요, 이야.null
0이 아닙니다.null == 0
거짓으로 평가됩니다. 보이는 다로 .(v >= 0 && v <= 0) === (v == 0)
의
요?null
실제로는 0이 아니지만 0처럼?
당신의 진짜 질문은 다음과 같습니다.
이유:
null >= 0; // true
그러나:
null == 0; // false
실제로 일어나는 것은 Greater-than-equal Operator (>=
), 형식 강제()ToPrimitive
를 수행합니다.Number
을 합니다 . .
null
이퀄스 오퍼레이터에 의해 특별한 방식으로 처리됩니다(==
). 간단히 말해서, 그것은 단지 다음과 같이 강요할 뿐입니다.undefined
:
null == null; // true
null == undefined; // true
과 같은 값false
,''
,'0'
,그리고.[]
숫자 형태의 강제가 적용되며, 모두 0으로 강제됩니다.
이 프로세스의 내부 세부 정보는 추상적 평등 비교 알고리즘과 추상적 관계 비교 알고리즘에서 확인할 수 있습니다.
요약 내용:
두 값 유형이 : String
ToNumber
둘 다 호출됩니다.다에.+
에서,입니다에 대한 를 위해0
.만 합니다.
ToNumber
문자열, 숫자 및 부울런에 대한 정보를 제공합니다.
문제를 좀 더 잘 파악할 수 있도록 질문을 확장하고자 합니다.
null >= 0; //true
null <= 0; //true
null == 0; //false
null > 0; //false
null < 0; //false
말이 안 돼요.인간의 언어처럼, 이런 것들은 암기해야 합니다.
자바스크립트는 엄격한 비교와 유형 변환 비교를 모두 가지고 있습니다.
null >= 0;
이지만 ㅇ(null==0)||(null>0)
null <= 0;
이지만 ㅇ(null==0)||(null<0)
"" >= 0
또한 사실입니다.
관계형 추상 비교(<=, >=)의 경우 피연산자를 비교 전에 먼저 프리미티브로 변환한 다음 동일한 유형으로 변환합니다.
typeof null returns "object"
type is object javascript가 개체를 문자열화하려고 하면(즉 null) 다음 단계가 수행됩니다(ECMAscript 2015).
- 한다면
PreferredType
..hint
"default" 입니다. - 그 외의 경우
PreferredType
이다.hint
,렛열, 렛hint
끈이 나다 - 또 다른
PreferredType
이다.hint
렛호, 렛hint
수가 많다, 수가 많다, 수가 많다, 수가 많다, 수가? - 허락하다
exoticToPrim
있다GetMethod(input, @@toPrimitive)
. ReturnIfAbrupt(exoticToPrim)
.- 한다면
exoticToPrim
정의되지 않은 것은 아닙니다.
a) 결과를 다음과 같이 하시오.Call(exoticToPrim, input, «hint»)
.
b)ReturnIfAbrupt(result)
.
c) 만약에Type(result)
개체가 아닙니다. 반환 결과입니다.
d) TypeError 예외를 던집니다. - 한다면
hint
는 "default", lethint
수가 많다, 수가 많다, 수가 많다, 수가 많다, 수가? - 돌아가다
OrdinaryToPrimitive(input,hint)
.
힌트에 허용되는 값은 "default", "number" 및 "string"입니다.날짜 개체는 "default"를 "string"과 동일한 것으로 취급한다는 점에서 내장된 ECMAscript 개체 중에서 고유합니다.기본 제공되는 다른 모든 ECMA스크립트 개체는 "default"를 "number"와 동일한 것으로 취급합니다. (ECMA스크립트 20.3.4.45).
그래서 저는.null
0으로 변환합니다.
console.log( null > 0 ); // (1) false
console.log( null == 0 ); // (2) false
console.log( null >= 0 ); // (3) true
수학적으로 이상하네요.마지막 결과는 "null은 0보다 크거나 같다"는 것이므로 위의 비교 중 하나에서는 이 값이 참이어야 하지만 둘 다 거짓입니다.
그 이유는 평등성 검사가==
비교.> < >= <=
일을 달리하다비교는 null을 숫자로 변환하여 다음과 같이 취급합니다.0
. 그래서 (3)null >= 0
가true
(1)null > 0
가false
.
다른 한편으로는 평등성 확인==
위해서undefined
그리고.null
변환 없이 서로 동등하고 다른 것과 동일하지 않도록 정의됩니다.그래서 (2)null == 0
가false
.
저도 똑같은 문제가 있었어요!!현재 저의 유일한 해결책은 분리하는 것입니다.
var a = null;
var b = undefined;
if (a===0||a>0){ } //return false !work!
if (b===0||b>0){ } //return false !work!
//but
if (a>=0){ } //return true !
확인하는 방법인 것 같습니다.x >= 0
가!(x < 0)
그런 식으로 반응을 이해할 수 있습니다.
언급URL : https://stackoverflow.com/questions/2910495/why-null-0-null-0-but-not-null-0
'IT' 카테고리의 다른 글
HTTP 요청에서 각도 상대 경로 (0) | 2023.10.10 |
---|---|
Spring Boot + Springbox swagger error (0) | 2023.10.10 |
대소문자를 구분하지 않는 PowerShell 교체 (0) | 2023.10.10 |
MySQL에서 LIMIT 1 사용 (0) | 2023.10.10 |
__ne__을 __eq__의 부정으로 구현해야 합니까? (0) | 2023.10.10 |