null >= 0 & & null <= 0>인데 null == 0이 아닌 이유는 무엇입니까?
의 종류가 을 1 그 .number그리고 않은 을 할당합니다.에 0합니다입니다. 여기서 변수는 처음에null아니면undefined.
번째 은 였습니다.v >= 0 ? v += 1 : v = 0가 아닌 으로 만들 이라고 생각했기 입니다 로 틀렸습니다. 하지만 그것은 그 이후로 틀렸습니다.null >= 0참으로 평가됩니다.그 후에 나는 배웁니다.null0처럼 동작하며 다음 식을 모두 true로 평가합니다.
null >= 0 && null <= 0!(null < 0 || null > 0)null + 1 === 11 / null === InfinityMath.pow(42, null) === 1
요, 이야.null0이 아닙니다.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).
그래서 저는.null0으로 변환합니다.
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 |