JavaScript ã«ã¯ãç°ãªãå¤ã®æ¯è¼æ¼ç®ã 3 ã¤ããã¾ãã
===
â å³å¯ãªç価æ§ï¼ä¸éçå·ï¼==
â ç·©ãç価æ§ï¼äºéçå·ï¼Object.is()
ã©ã®æ¼ç®åã使ç¨ãããã¯ãã©ã®ãããªæ¯è¼ãè¡ããããã«ä¾åãã¾ããç°¡åã«è¨ãã°ã
==
) 㯠2 ã¤ã®ãã®ãæ¯è¼ããåã«å夿ãå®è¡ããNaN
, -0
, +0
ã IEEE 754 ã«æºæ ãã¦ç¹å¥æ±ããã¾ãï¼ãã£ã¦ NaN != NaN
, -0 == +0
ã«ãªãã¾ãï¼ã===
) ã¯äºéçå·ã¨åãæ¯è¼ãï¼NaN
, -0
, +0
ã®ç¹å¥æ±ããå«ãã¦ï¼ãã¾ãããå夿ãè¡ãã¾ãããããåãç°ãªãã°ãfalse
ãè¿ããã¾ããObject.is()
ã¯å夿ãè¡ãããNaN
, -0
, +0
ã®ç¹å¥æ±ãããã¾ããï¼ãããã®ç¹æ®ãªæ°å¤ãé¤ã㦠===
ã¨åãåä½ããã¾ãï¼ããããã¯ãJavaScript ã«ããã 4 ã¤ã®ç価æ§ã¢ã«ã´ãªãºã ã®ãã¡ã3 ã¤ã«å¯¾å¿ãã¾ãã
==
===
Object.is()
ãªãããããã®åºå¥ã¯ããªããã£ãå¤ã®æ±ãã«ã¤ãã¦ã®ãã¨ã§ãããããã®å ´åã弿°ãæ¦å¿µçã«ä¼¼ãæ§é ãæã¤ãã©ãããæ¯è¼ãã訳ã§ã¯ããã¾ãããããªããã£ãå¤ã§ã¯ãªã x
ããã³ y
ãªãã¸ã§ã¯ããåä¸ã®æ§é ãæã£ã¦ãã¦ããªãã¸ã§ã¯ããç°ãªãã°ãä¸è¨ã®ãããã®å½¢ã§ã false
ã¨è©ä¾¡ããã¾ãã
å³å¯ãªç価æ§ã¯ã2 ã¤ã®å¤ãçãããæ¯è¼ãã¾ããæ¯è¼å¯¾è±¡ã®å¤ã¯ã©ã¡ãããæ¯è¼ããåã«å¥ã®å¤ã¸æé»ã®ãã¡ã«å¤æããããã¨ã¯ããã¾ãããå¤ãç°ãªãåã®å ´åããããã®å¤ã¯çãããªãã¨ã¿ãªãã¾ããå¤ãåãåã§æ°å¤ã§ã¯ãªãå ´åãåãå¤ã§ããã°çããã¨ã¿ãªãã¾ããæå¾ã«ãã©ã¡ãã®å¤ãæ°å¤ã§ããå ´åãã©ã¡ãã NaN
ã§ã¯ãªãåãå¤ã§ããããããã¯ä¸æ¹ã +0
ãã¤ãã䏿¹ã -0
ã§ããã¨ãã«çããã¨ã¿ãªãã¾ãã
const num = 0;
const obj = new String("0");
const str = "0";
console.log(num === num); // true
console.log(obj === obj); // true
console.log(str === str); // true
console.log(num === obj); // false
console.log(num === str); // false
console.log(obj === str); // false
console.log(null === undefined); // false
console.log(obj === null); // false
console.log(obj === undefined); // false
å³å¯ãªç価æ§ã¯ãããã¦ãã®ä½¿ãæ¹ã§æ£ããæ¯è¼ã«ãªãã¾ããæ°å¤ä»¥å¤ã®ããããå¤ã«ããã¦ãããã¯ãå¤ãèªåèªèº«ã¨çãããã¨ããæå¿«ãªè§£éãç¨ãã¾ããæ°å¤ã«ããã¦ã¯ãï¼ã¤ã®æ¥µãã¦ç¹æ®ãªã±ã¼ã¹ãæ±ããããã«ãããã«ç°ãªãè§£éãç¨ãã¾ããï¼ã¤ç®ã¯æµ®åå°æ°ç¹æ°ã® 0 ã«ã¯æ£ã¨è² ã®ç¬¦å·ä»ããåå¨ãããã¨ã§ããããã¯ãããç¨®ã®æ°å¦çãªè§£ã表ãããã«å½¹ç«ã¡ã¾ãããã»ã¨ãã©ã®å ´å㯠+0
㨠-0
ã®éããæèãããå³å¯ãªç価æ§ã§ã¯ããããåãå¤ã¨ãã¦æ±ãã¾ããï¼ã¤ç®ã¯æµ®åå°æ°ç¹æ°ã«ã¯éæ° NaN
ã®æ¦å¿µããããã¨ã§ããããã¯ä¾ãã°æ£ã®ç¡é大ã«è² ã®ç¡é大ãå ç®ããã¨ãã£ãä¸å®ã®æ°å¦çã«æç¢ºã§ã¯ãªãåé¡éã®è§£ã表ãã¾ããå³å¯ãªç価æ§ã§ã¯ NaN
ãä»ã®ã©ã®å¤ (èªåèªèº«ãå«ã) ã¨ãçãããªããã®ã¨ãã¦æ±ãã¾ããï¼(x !== x)
ã true
ã«ãªãå¯ä¸ã®å ´å㯠x
ã NaN
ã§ããå ´åã§ããï¼
ã¾ãã===
以å¤ã«ãå³å¯ãªç価æ§ã¯é
åã®ã¤ã³ããã¯ã¹ãæ¢ãã¡ã½ããã§ä½¿ç¨ããã¾ããArray.prototype.indexOf()
ãArray.prototype.lastIndexOf()
ãTypedArray.prototype.indexOf()
ãTypedArray.prototype.lastIndexOf()
ãcase
ã§ã®æ¯è¼ã§ããã¤ã¾ããindexOf(NaN)
ã使ç¨ãã¦é
åã® NaN
å¤ã®ã¤ã³ããã¯ã¹ãæ¢ããããNaN
ã switch
æã® case
å¤ã¨ãã¦ä½¿ç¨ãã¦ä½ãã¨ä¸è´ããããã¨ã¯ã§ãã¾ããã
console.log([NaN].indexOf(NaN)); // -1
switch (NaN) {
case NaN:
console.log("Surprise"); // ä½ãåºåãããªã
}
== ã«ããç·©ãç価æ§
ç·©ãç価æ§ã¯å¯¾ç§°çã§ããï¼å¤æã®é åºãé¤ãã¦ï¼ A
㨠B
ã®å¤ãä½ã§ãã£ã¦ããA == B
ã¯å¸¸ã« B == A
ã¨åãæå³ã¥ãã«ãªãã¾ãã==
ã使ç¨ãã¦ç·©ãç価æ§ãå®è¡ããå ´åã®åä½ã¯ä»¥ä¸ã®éãã§ãã
true
ãè¿ãã¾ããtrue
ãè¿ãã¾ããtrue
ãè¿ãã¾ãã+0
㨠-0
ã¯åãå¤ã¨ãã¦æ±ããã¾ããã©ã¡ããã®ãªãã©ã³ãã NaN
ã§ããå ´å㯠false
ãè¿ãã¾ããå¾ã£ã¦ãNaN
㯠NaN
ã¨ã¯çãããªãã¾ãããtrue
ã¾ãã¯ä¸¡æ¹ã false
ã®å ´åã®ã¿ true
ãè¿ãã¾ããtrue
ãè¿ãã¾ããtrue
ãè¿ãã¾ããnull
ã¾ã㯠undefined
ã§ããå ´åããã䏿¹ã null
ã¾ã㯠undefined
ã§ããã° true
ãè¿ãã¾ãããã以å¤ã®å ´å㯠false
ãè¿ããfalse
ãè¿ãã¾ããtrue
㯠1 ã«å¤æãããfalse
㯠0 ã«å¤æããã¾ãããããã 2 ã¤ã®ãªãã©ã³ããç·©ãç価æ§ã§æ¯è¼ãã¾ããNaN
ã¨ãªããç価æ§ã false
ã¨ãªããã¨ãä¿è¨¼ããã¦ãã¾ããNaN
ã§ããã°ãfalse
ãè¿ãã¾ããBigInt()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã¨åãã¢ã«ã´ãªãºã ã使ç¨ãã¦é·æ´æ°ã¸ã¨å¤æãã¾ãã夿ã«å¤±æããå ´åã¯ã false
ãè¿ãã¾ããä¼çµ±çã«ããã㦠ECMAScript ã«ããã°ããã¹ã¦ã®ããªããã£ãã¨ãªãã¸ã§ã¯ã㯠undefined
ããã³ null
ã¨ç·©ãä¸ç価ã§ããã¨ããã¦ãã¾ããããããã»ã¨ãã©ã®ãã©ã¦ã¶ã¼ã¯ãããã³ã³ããã¹ãã«ããã¦ãé常ã«çãã¯ã©ã¹ã®ãªãã¸ã§ã¯ãï¼å
·ä½çã«ã¯ããããããã¼ã¸ã® document.all
ãªãã¸ã§ã¯ãï¼ãããããã undefined
ã¨ããå¤ãæã¤ãã®ããã«æ¯ãèããã¨ã許å¯ãã¦ãã¾ããç·©ãç価æ§ã¯ãã®ãããªã³ã³ããã¹ãã® 1 ã¤ã§ããnull == A
㨠undefined == A
ã¯ãA ã undefined
ãã¨ãã¥ã¬ã¼ããããªãã¸ã§ã¯ãã§ããå ´åã«ã®ã¿çã¨è©ä¾¡ããã¾ããä»ã«ããªãã¸ã§ã¯ãã undefined
ã null
ã¨ç·©ãããªç価æ§ãæã¤ãã¨ã¯ããã¾ããã
ã»ã¨ãã©ã®å ´åãç·©ãç価æ§ã使ç¨ãããã¨ã¯æ¨å¥¨ããã¾ãããå³å¯ãªç価æ§ãç¨ããæ¯è¼ã®çµæã¯äºæ¸¬ãããããå夿ããªãããããããã°ããè©ä¾¡ã§ããå¯è½æ§ãããã¾ãã
次ã®ä¾ã¯ãæ°å¤ããªããã£ã 0
ãé·æ´æ°ããªããã£ã 0n
ãæååããªããã£ã '0'
ãtoString()
ã®å¤ã '0'
ã§ãããªãã¸ã§ã¯ããå«ãç·©ãç価æ§ã®æ¯è¼ã示ãã¦ãã¾ãã
const num = 0;
const big = 0n;
const str = "0";
const obj = new String("0");
console.log(num == str); // true
console.log(big == num); // true
console.log(str == big); // true
console.log(num == obj); // true
console.log(big == obj); // true
console.log(str == obj); // true
ç·©ãç価æ§ã¯ã ==
æ¼ç®åã§ã®ã¿ä½¿ç¨ããã¾ãã
åå¤ç価æ§ã¯ããã¹ã¦ã®ç¶æ³ã§ 2 ã¤ã®å¤ãæ©è½çã«åä¸ãã夿ãã¾ãï¼ãã®ç¨æ³ã¯ãªã¹ã³ãã®ç½®æååã®å®è·µä¾ã¨è¨ãã¾ãï¼ãä¾ã¨ãã¦ã夿´ä¸å¯ã®ããããã£ãå¤åããããã¨ããå ´åãè¦ã¦ã¿ã¾ãããã
// Number ã³ã³ã¹ãã©ã¯ã¿ã¼ã«å¤æ´ä¸å¯ã® NEGATIVE_ZERO ããããã£ã追å
Object.defineProperty(Number, "NEGATIVE_ZERO", {
value: -0,
writable: false,
configurable: false,
enumerable: false,
});
function attemptMutation(v) {
Object.defineProperty(Number, "NEGATIVE_ZERO", { value: v });
}
夿´ä¸å¯ã®ããããã£ã夿´ãããã¨ããã¨ããObject.defineProperty
ã¯ä¾å¤ãçºçããã¾ãããå®éã®å¤æ´ãè¦æ±ãããªãã£ãå ´åã¯ä½ããã¾ãããv
ã -0
ã§ããã°ã夿´ãè¦æ±ããã¦ããªãã®ã§ãã¨ã©ã¼ã¯çºçãã¾ãããå
é¨çã«ã¯ã夿´ä¸å¯ã®ããããã£ãåå®ç¾©ãããå ´åãæ°ãã«æå®ãããå¤ã¨ç¾å¨ã®å¤ãåå¤ç価æ§ã«ãã£ã¦æ¯è¼ããã¾ãã
åå¤ç価æ§ã¯ Object.is
ã¡ã½ããã«ãã£ã¦æä¾ããã¾ããç価ãªå䏿§ãæã¤å¤ãæå¾
ãããå ´åãè¨èªä¸ã®ã»ã¨ãã©ã®å ´æã§ä½¿ç¨ããã¾ãã
åå¤ç価æ§ã«ä¼¼ã¦ãã¾ããã+0 㨠-0 ã¯çããã¨ã¿ãªãã¾ãã
åå¤ã¼ãçä¾¡æ§ (Same-value-zero equality) 㯠JavaScript API ã¨ãã¦å ¬éããã¦ãã¾ããããç¬èªã®ã³ã¼ãã§å®è£ ãããã¨ãã§ãã¾ãã
function sameValueZero(x, y) {
if (typeof x === "number" && typeof y === "number") {
// x 㨠y ã¯çããï¼-0 㨠0 ã®å ´åãå«ã)ãã両æ¹ã NaN ã§ãã
return x === y || (x !== x && y !== y);
}
return x === y;
}
åå¤ã¼ã㯠NaN
ãçä¾¡ã«æ±ãã¨ããç¹ã§å³å¯ãªç価æ§ã¨ç°ãªãã-0
ã 0
ã¨çä¾¡ã«æ±ããã¨ã®ã¿ãåå¤ç価æ§ã¨ç°ãªãã¾ããããã¯ç¹ã« NaN
ãæ±ãå ´åãæ¤ç´¢æã«æãè³¢æãªåä½ãããããã«ãªãã¾ããArray.prototype.includes()
ãTypedArray.prototype.includes()
ãã¾ããã¼ã®ç価æ§ãæ¯è¼ããããã« Map
ã Set
ã®ã¡ã½ããã§ä½¿ç¨ããã¾ãã
äºéçå·ã¨ä¸éçå·ãæ¯è¼ããã¨ãã䏿¹ã¯ä»æ¹ããæ¡å¼µããããã®ã§ããè¨ãããã¡ã§ããä¾ãã°ãäºéçå·ã¯ä¸éçå·ã¨åããã¨ããã¹ã¦è¡ãã ãã§ãªããªãã©ã³ãã®å夿ãè¡ããã¨ãããä¸éçå·ãæ¡å¼µãããã®ã§ããã¨èãããã¨ãããããããã¾ãããä¾ãã°ã6 == "6"
ã¨ãªãã¾ãããããã¯äºéçå·ãåºæ¬å½¢ã§ãããä¸éçå·ã¯ 2 ã¤ã®ãªãã©ã³ããåä¸ã®åã§ãããã¨ãè¦æ±ããã¨ããå¶ç´ãå ãã¦ãããã¨ãããä¸éçå·ãæ¡å¼µå½¢ã§ããã¨è¨ãããããããã¾ããã
ãããããã®èãæ¹ã¯ãç価æ§ã®æ¯è¼ã䏿¬¡å
ã®ãã¹ãã¯ãã«ããå½¢æãããå®å
¨ã«å³å¯ãªããã®ãä¸ç«¯ã«ããããå®å
¨ã«ç·©ãããã®ãä»ã«ããããã¨ãæå³ãã¾ãããã®ã¢ãã«ã¯Object.is
ã§ã¯ä¸ååã§ãäºéçå·ããããç·©ãããä¸éçå·ããããå³ããããã®ã§ã¯ãªãããã®ä¸éï¼ã¤ã¾ããäºéçå·ãããå³ãããä¸éçå·ãããç·©ãï¼ã«ãå½ã¦ã¯ã¾ããªãããã§ããå䏿§ãæ¯è¼ãã以ä¸ã®è¡¨ãããObject.is
ã NaN
ãæ±ãæ¹æ³ãåå ã§ãããã¨ããããã¾ããObject.is(NaN, NaN)
ã false
ã«è©ä¾¡ãããã®ã§ããã°ã-0
㨠+0
ãåºå¥ãããã¨ã«ãããä¸éçå·ããå³å¯ã§ãããã¨ããç·©ã/å³å¯ã®ã¹ãã¯ãã«ã«å«ãããã¨ãã§ãããã¨ã«æ³¨ç®ãã¦ãã ãããããã NaN
ã®æ±ãã¯ããããæ£ãããªããã¨ã表ãã¾ããæ®å¿µãªãããObject.is
ã¯ç価æ¼ç®åã«é¢ããç·©ããå³å¯ãã§ã¯ãªããåç´ã«åºæã®ç¹æ§ã®è¦³ç¹ããèããªããã°ãªãã¾ããã
==
===
Object.is
åå¤ã¼ã undefined
undefined
â
true
â
true
â
true
â
true
null
null
â
true
â
true
â
true
â
true
true
true
â
true
â
true
â
true
â
true
false
false
â
true
â
true
â
true
â
true
'foo'
'foo'
â
true
â
true
â
true
â
true
0
0
â
true
â
true
â
true
â
true
+0
-0
â
true
â
true
â false
â
true
+0
0
â
true
â
true
â
true
â
true
-0
0
â
true
â
true
â false
â
true
0n
-0n
â
true
â
true
â
true
â
true
0
false
â
true
â false
â false
â false
""
false
â
true
â false
â false
â false
""
0
â
true
â false
â false
â false
'0'
0
â
true
â false
â false
â false
'17'
17
â
true
â false
â false
â false
[1, 2]
'1,2'
â
true
â false
â false
â false
new String('foo')
'foo'
â
true
â false
â false
â false
null
undefined
â
true
â false
â false
â false
null
false
â false
â false
â false
â false
undefined
false
â false
â false
â false
â false
{ foo: 'bar' }
{ foo: 'bar' }
â false
â false
â false
â false
new String('foo')
new String('foo')
â false
â false
â false
â false
0
null
â false
â false
â false
â false
0
NaN
â false
â false
â false
â false
'foo'
NaN
â false
â false
â false
â false
NaN
NaN
â false
â false
â
true
â
true
Object.is() ã¨ä¸éçå·ã®ä½¿ãã©ãã
ä¸è¬çã«ãObject.is
ã®ã¼ãã«å¯¾ããç¹å¥ãªåä½ãé¢å¿ã®å¯¾è±¡ã«ãªãããã¨æãããã®ã¯ããã種ã®ã¡ã¿ããã°ã©ãã³ã°æ¹å¼ã«åãæãç¹ã«ããããã£è¨è¿°åã«é¢ã㦠Object.defineProperty
ã®ç¹å¾´ã®ä¸é¨ãåç¾ãããæã«éããã¾ãããã®ãããªè¦ä»¶ãå¿
è¦ãªãã®ã§ããã°ãObject.is
ã§ã¯ãªã ===
ã使ç¨ãã¦ãã ããã2 ã¤ã® NaN
å¤ãæ¯è¼ããçµæã true
ã«ãªããã¨ãå¿
è¦ãªå ´åã§ãã£ã¦ããé常ã¯ãNaN
ããã§ãã¯ãã¦ç¹å¥æ±ãããæ¹ã (åãã¼ã¸ã§ã³ã® ECMAScript ãã㯠isNaN
ã¡ã½ããã使ãã¾ã) ãæ¯è¼å¦çä¸ã«ç¾ããå
¨ã¦ã®ã¼ãã«ã¤ãã¦ãã®ç¬¦å·ãå¨å²ã®å¦çããã©ãå½±é¿ãããã®ãæ©ããããç°¡åã§ãã
ãã¹ã¦ãç¶²ç¾
ãã¦ã¯ãã¾ãããã-0
㨠+0
ã®åºå¥ãçºçããå¯è½æ§ãããå
èµã¡ã½ãããæ¼ç®åã以ä¸ã«ç¤ºãã¾ããã³ã¼ãä¸ã§ã¯ããããèæ
®ãã¦ä¸ãã:
- (åé
å¦å®æ¼ç®å)
以ä¸ä¾ãèãã¦ã¿ã¦ãã ããã
const stoppingForce = obj.mass * -obj.velocity;
obj.velocity
ã 0
ã§ãã (ãããã¯è¨ç®çµæã 0
ã«ãªã) ã¨ããããã§ -0
ãçæãã㦠stoppingForce
ã«ä¼æãã¾ãã
Math.atan2
, Math.ceil
, Math.pow
, Math.round
弿°ã« -0
ãåå¨ããªãã¦ããå ´åã«ãã£ã¦ã¯ãããã®ã¡ã½ããã®è¿å¤ã¨ã㦠-0
ãå¼ã«åãè¾¼ã¾ããå¯è½æ§ãããã¾ããä¾ãã°ãè² ã®å¤ã®ç´¯ä¹ã§ -Infinity
ãçºçããããã« Math.pow
ã使ç¨ããã¨ãã奿°ã®ææ°ã¯ -0
ã«è©ä¾¡ããã¾ããããããã®ã¡ã½ããã®ããã¥ã¡ã³ãã確èªãã¦ãã ããã
Math.floor
, Math.max
, Math.min
, Math.sin
, Math.sqrt
, Math.tan
弿°ã®ã²ã¨ã¤ã -0
ã§ããå ´åã«ããããã®ã¡ã½ãããã -0
ãè¿å¤ã¨ãã¦å¾ãå¯è½æ§ãããã¾ããä¾ãã°ãMath.min(-0, +0)
㯠-0
ã«ãªãã¾ããããããã®ã¡ã½ããã®ããã¥ã¡ã³ãã確èªãã¦ãã ããã
~
, <<
, >>
ãããã®æ¼ç®åã¯ãå
é¨ã§ ToInt32 ã¢ã«ã´ãªãºã ã使ç¨ãã¾ããå
é¨ã® 32 ãããæ´æ°å㯠0 ã®è¡¨ç¾ã 1 種é¡ãããªããããéã®æ¼ç®ãè¡ã£ãå¾ã« -0
ã¯æ»ããªãã§ããããä¾ãã° Object.is(~~(-0), -0)
ã Object.is(-0 << 2 >> 2, -0)
ã¯ãfalse
ã«ãªãã¾ãã
ã¼ãã®ç¬¦å·ãèæ
®ãã¦ããªãå ´åã«ãObject.is
ã«é ¼ããã¨ã¯å±éºã§ãããããã¡ãã -0
㨠+0
ãåºå¥ããæå³ãããã°ãããã¯ã¾ãã«æããã¨ã§ãã
Object.is
ã®ä»æ§æ¸ã§ã¯ããã¹ã¦ã® NaN
ã®ã¤ã³ã¹ã¿ã³ã¹ãåããªãã¸ã§ã¯ãã¨ãã¦æ±ã£ã¦ãã¾ããããããåä»ãé
åãå©ç¨ã§ããã¤ã³ã¹ã¿ã³ã¹ãåºå¥ãããã¨ãã§ããã®ã§ã次ã®ä¾ã®ããã«ãã¹ã¦ã®ã³ã³ããã¹ãã§åãåä½ãããã¨ã¯éãã¾ããã
const f2b = (x) => new Uint8Array(new Float64Array([x]).buffer);
const b2f = (x) => new Float64Array(x.buffer)[0];
// NaN ã®ãã¤ã表ç¾ãåå¾
const n = f2b(NaN);
// æåã®ãããã夿´ãããããã¯ç¬¦å·ãããã§ãããNaN ã«ã¯é¢ä¿ãªã
n[0] = 1;
const nan2 = b2f(n);
console.log(nan2); // NaN
console.log(Object.is(nan2, NaN)); // true
console.log(f2b(NaN)); // Uint8Array(8) [0, 0, 0, 0, 0, 0, 248, 127]
console.log(f2b(nan2)); // Uint8Array(8) [1, 0, 0, 0, 0, 0, 248, 127]
é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4