Object.is()
åºçº¿
广æ³å¯ç¨
èª 2015å¹´9æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
Object.is() éææ¹æ³ç¡®å®ä¸¤ä¸ªå¼æ¯å¦ä¸ºç¸åå¼ã
å°è¯ä¸ä¸
console.log(Object.is("1", 1));
// ææè¾åºï¼false
console.log(Object.is(NaN, NaN));
// ææè¾åºï¼true
console.log(Object.is(-0, 0));
// ææè¾åºï¼false
const obj = {};
console.log(Object.is(obj, {}));
// ææè¾åºï¼false
è¯æ³
Object.is(value1, value2)
åæ°
è¿åå¼
ä¸ä¸ªå¸å°å¼ï¼æç¤ºä¸¤ä¸ªåæ°æ¯å¦ä¸ºç¸åçå¼ã
æè¿°
Object.is() ç¡®å®ä¸¤ä¸ªå¼æ¯å¦ä¸ºç¸åå¼ã妿以ä¸å
¶ä¸ä¸é¡¹æç«ï¼å两个å¼ç¸åï¼
- 齿¯
undefined - 齿¯
null - 齿¯
trueæè 齿¯false - 齿¯é¿åº¦ç¸åãå符ç¸åã顺åºç¸åçå符串
- 齿¯ç¸åçå¯¹è±¡ï¼æå³ç两个å¼é½å¼ç¨äºå åä¸çåä¸å¯¹è±¡ï¼
- 齿¯ BigInt ä¸å ·æç¸åçæ°å¼
- 齿¯ symbol ä¸å¼ç¨ç¸åç symbol å¼
- 齿¯æ°åä¸
Object.is() ä¸ == è¿ç®ç¬¦å¹¶ä¸çä»·ã== è¿ç®ç¬¦å¨æµè¯ç¸çæ§ä¹åï¼ä¼å¯¹ä¸¤ä¸ªæä½æ°è¿è¡ç±»å转æ¢ï¼å¦æå®ä»¬ä¸æ¯ç¸åçç±»åï¼ï¼è¿å¯è½ä¼å¯¼è´ä¸äºé颿çè¡ä¸ºï¼ä¾å¦ "" == false çç»ææ¯ trueï¼ä½æ¯ Object.is() ä¸ä¼å¯¹å
¶æä½æ°è¿è¡ç±»å转æ¢ã
Object.is() ä¹ä¸çä»·äº === è¿ç®ç¬¦ãObject.is() å === ä¹é´çå¯ä¸åºå«å¨äºå®ä»¬å¤ç带符å·ç 0 å NaN å¼çæ¶åã=== è¿ç®ç¬¦ï¼å == è¿ç®ç¬¦ï¼å°æ°å¼ -0 å +0 è§ä¸ºç¸çï¼ä½æ¯ä¼å° NaN è§ä¸ºå½¼æ¤ä¸ç¸çã
示ä¾
>ä½¿ç¨ Object.is()
// æ¡ä¾ 1ï¼è¯ä¼°ç»æåä½¿ç¨ === ç¸å
Object.is(25, 25); // true
Object.is("foo", "foo"); // true
Object.is("foo", "bar"); // false
Object.is(null, null); // true
Object.is(undefined, undefined); // true
Object.is(window, window); // true
Object.is([], []); // false
const foo = { a: 1 };
const bar = { a: 1 };
const sameFoo = foo;
Object.is(foo, foo); // true
Object.is(foo, bar); // false
Object.is(foo, sameFoo); // true
// æ¡ä¾ 2: 带符å·ç 0
Object.is(0, -0); // false
Object.is(+0, -0); // false
Object.is(-0, -0); // true
// æ¡ä¾ 3: NaN
Object.is(NaN, 0 / 0); // true
Object.is(NaN, Number.NaN); // true
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.is> |
æµè§å¨å ¼å®¹æ§
åè§
core-jsä¸Object.isç PolyfillObject.isç es-shims polyfill- JavaScript ä¸çç¸çæ§å¤æââä¸ç§å ç½®ç¸çæ§å·¥å ·çæ¯è¾