왜 null> = 0 && null <= 0`이지만 null == 0이 아닌 이유는 무엇입니까?
내가 루틴을 작성했다고 단위의 유형 인 경우 (1)에 의한 변수의 값 number
변수가 처음이 아닌 경우 변수, 및 양수인 0 null
또는 undefined
.
첫 번째 구현은 v >= 0 ? v += 1 : v = 0
숫자가 아닌 것이 산술 표현식을 거짓으로 만들 것이라고 생각했기 때문에 이루어졌지만 null >= 0
true로 평가 된 이후로 잘못되었습니다 . 그런 다음 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
. false로 평가됩니다. 이것은 겉보기에 타우 톨릭적인 표현을 (v >= 0 && v <= 0) === (v == 0)
거짓으로 만듭니다.
null
실제로 0이 아니지만 왜 0과 같은가?
당신의 실제 질문은 다음과 같습니다.
왜:
null >= 0; // true
그러나:
null == 0; // false
실제로 일어나는 것은 같거나 큰 연산자 ( >=
) ToPrimitive
가 힌트 유형으로 유형 강제 변환 ( )을 수행 한다는 것 입니다 Number
. 실제로 모든 관계 연산자에는이 동작이 있습니다.
null
등호 연산자 ( ==
) 가 특별한 방식으로 처리 합니다. 간단히 말해 다음과 같이 강제 됩니다 undefined
.
null == null; // true
null == undefined; // true
값은 같은 false
, ''
, '0'
,과 []
, 그들 모두 0으로 숫자 형식의 강제 적용을 강요하고 있습니다.
이 프로세스의 내부 세부 사항은 추상 동등 비교 알고리즘 및 추상 관계 비교 알고리즘에서 볼 수 있습니다.
요약해서 말하자면:
관계 비교 : 두 값이 모두 문자열 유형이 아닌 경우 두 값
ToNumber
모두에서 호출됩니다. 이것은+
앞에 null 을 추가하는 것과 동일 합니다0
.평등 비교 :
ToNumber
문자열, 숫자 및 부울 만 호출 합니다.
문제의 가시성을 더욱 향상시키기 위해 질문을 확장하고 싶습니다.
null >= 0; //true
null <= 0; //true
null == 0; //false
null > 0; //false
null < 0; //false
말이되지 않습니다. 인간 언어와 마찬가지로 이러한 것들도 마음으로 배워야합니다.
JavaScript에는 엄격한 변환과 형식 변환 비교가 있습니다.
null >= 0;
사실이지만 (null==0)||(null>0)
거짓
null <= 0;
사실이지만 (null==0)||(null<0)
거짓
"" >= 0
또한 사실이다
관계형 추상 비교 (<=,> =)의 경우, 피연산자는 먼저 비교 전에 프리미티브로 변환 된 다음 동일한 유형으로 변환됩니다.
typeof null returns "object"
type이 객체 javascript 인 경우 객체를 문자열 화하려고하면 (예 : null) 다음 단계가 수행됩니다 ( ECMAScript 2015 ).
PreferredType
통과되지 않은 경우hint
"기본값"으로 설정하십시오.- 경우 다른
PreferredType
인hint
문자열,하자hint
"문자열"합니다. - 그밖에
PreferredType
입니다hint
번호는하자hint
"번호"합니다. - 하자
exoticToPrim
수GetMethod(input, @@toPrimitive)
. ReturnIfAbrupt(exoticToPrim)
.exoticToPrim
정의되지 않은 경우
a) 결과를이라고합시다Call(exoticToPrim, input, «hint»)
.
b)ReturnIfAbrupt(result)
.
c)Type(result)
Object가 아닌 경우 결과를 반환합니다.
d) TypeError 예외를 던집니다.- 경우
hint
"기본"입니다하자hint
"수"를합니다. - 을 반환
OrdinaryToPrimitive(input,hint)
합니다.
The allowed values for hint are "default", "number", and "string". Date objects, are unique among built-in ECMAScript object in that they treat "default" as being equivalent to "string". All other built-in ECMAScript objects treat "default" as being equivalent to "number". (ECMAScript 20.3.4.45)
So I think null
converts to 0.
I had the same problem !!. Currently my only solution is to separate.
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 !
참고URL : https://stackoverflow.com/questions/2910495/why-null-0-null-0-but-not-null-0
'development' 카테고리의 다른 글
자식 버전을 원격 버전으로 대체 (0) | 2020.06.27 |
---|---|
비공개 대 보호됨-가시성 실용성 문제 (0) | 2020.06.27 |
일종의 구분 기호 ';'로 구분 된 gdb의 여러 명령? (0) | 2020.06.27 |
버튼 클릭으로 PHP 함수를 호출하는 방법 (0) | 2020.06.27 |
CTE와 SubQuery의 차이점은 무엇입니까? (0) | 2020.06.27 |