ëë± ë¹êµ ë° ëì¼ì±
JavaScriptë ë¤ì ì¸ ê°ì§ì ê° ë¹êµ ì°ì°ì ì ê³µí©ëë¤.
===- ì격í ëë± (ì¼ì¤ ë±í¸)==- ëì¨í ëë± (ì´ì¤ ë±í¸)Object.is()
ì´ë ì°ì°ì ì¬ì©í ì§ ì ííë ê²ì ì¬ë¬ë¶ì´ ì´ë¤ ì¢ ë¥ì ë¹êµë¥¼ ìííë ¤ê³ íëì§ì ë¬ë ¤ììµëë¤. ê°ë¨í ë§íìë©´ ë¤ìê³¼ ê°ìµëë¤.
- ì´ì¤ ë±í¸(
==)ë ë ëìì ë¹êµí ë ì í ë³íì ìíí ë¤, IEEE 754를 ì¤ìíëë¡NaN,-0,+0ì í¹ë³í ì²ë¦¬í©ëë¤(ë°ë¼ìNaN != NaNì´ê³-0 == +0). - ì¼ì¤ ë±í¸(
===)ë ì´ì¤ ë±í¸ì ëì¼í ë¹êµ(NaN,-0,+0ì ëí í¹ì ì²ë¦¬ í¬í¨)를 ìííì§ë§ ì í ë³íì ìííì§ ììµëë¤. ì íì´ ë¤ë¥´ë©´falseê° ë°íë©ëë¤. Object.is()ëNaN,-0,+0ì ëí íì ë³íê³¼ í¹ì ì²ë¦¬ë¥¼ ìííì§ ììµëë¤(í¹ì ì«ì ê°ì ì ì¸íê³===ì ëì¼í ëì ì ê³µ).
ì´ë¤ì JavaScriptì 4ê°ì§ ëë± ìê³ ë¦¬ì¦ ì¤ 3ê°ì§ì í´ë¹í©ëë¤.
- IsLooselyEqual:
== - IsStrictlyEqual:
=== - SameValue:
Object.is() - SameValueZero: ë§ì ë´ì¥ ì°ì°ì ì¬ì©ë¨.
ì´ë¤ ì¬ì´ì 구ë³ì 모ë ìì ê° ì²ë¦¬ì ê´ë ¨ ììµëë¤. ì´ë¤ ì¤ ì´ë ê²ë 매ê°ë³ìê° êµ¬ì¡°ìì ê°ë
ì ì¼ë¡ ì ì¬íì§ ë¹êµíì§ ììµëë¤. ëì¼í 구조를 ê°ì§ê³ ìì§ë§, ê³ ì í ê°ì²´ì¸ ë¹ ìì ê° ê°ì²´ xì yì ê²½ì°, ìì 모ë íìì falseë¡ íê°ë©ëë¤.
===를 ì¬ì©íë ì격í ëë±
ì격í ëë±ì ë ê°ì´ ê°ìì§ ë¹êµí©ëë¤. ë¹êµë기 ì ì´ë í ê°ë ììì ì¼ë¡ ë¤ë¥¸ ê°ì¼ë¡ ë³íëì§ ììµëë¤. ê°ì íìì´ ë¤ë¥¸ ê²½ì°, ë ê°ì ëë±íì§ ìë¤ê³ ê°ì£¼ë©ëë¤. ê°ì íìì´ ê°ê³ ì«ìê° ìëê³ ê°ì´ ê°ë¤ë©´ ë ê°ì ëë±íë¤ê³ ê°ì£¼ë©ëë¤. ë§ì§ë§ì¼ë¡ ë ê°ì´ 모ë ì«ìì¸ ê²½ì°, ë ë¤ 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를 ë°íí©ëë¤. - BigInt: ë í¼ì°ì°ìê° ëì¼í ê°ì¸ ê²½ì°ìë§
true를 ë°íí©ëë¤. - Symbol: ë í¼ì°ì°ìê° ëì¼í symbolì 참조íë ê²½ì°ìë§
true를 ë°íí©ëë¤.
- ê°ì²´: ë í¼ì°ì°ìê° ëì¼í ê°ì²´ë¥¼ 참조íë ê²½ì°ìë§
- í¼ì°ì°ì ì¤ íëê°
nullì´ê±°ëundefinedì¸ ê²½ì°true를 ë°ííë ¤ë©´ ë¤ë¥¸ í¼ì°ì°ìënullì´ê±°ëundefinedì¬ì¼ í©ëë¤. ê·¸ë ì§ ìì¼ë©´false를 ë°íí©ëë¤. - í¼ì°ì°ì ì¤ íëê° ê°ì²´ì´ê³ ë¤ë¥¸ íëê° ìì ê°ì¸ ê²½ì° ê°ì²´ë¥¼ ìì ê°ì¼ë¡ ë³íí©ëë¤.
- ì´ ë¨ê³ìì ë í¼ì°ì°ìë ìì ê°(문ìì´, ì«ì, ë¶ë¦¬ì¸, Symbol, BigInt ì¤ íë)ë¡ ë³íë©ëë¤. ëë¨¸ì§ ë³íì ì¬íë³ë¡ ìíë©ëë¤.
- ëì¼í íìì¸ ê²½ì°, 1ë¨ê³ë¥¼ ì¬ì©íì¬ ë¹êµí©ëë¤.
- í¼ì°ì°ì ì¤ íëê° Symbolì´ê³ ë¤ë¥¸ í¼ì°ì°ìë ìë ê²½ì°,
false를 ë°íí©ëë¤. - í¼ì°ì°ì ì¤ íëê° ë¶ë¦¬ì¸ì´ê³ ë¤ë¥¸ í¼ì°ì°ìë ìë ê²½ì°, ë¶ë¦¬ì¸ì ì«ìë¡ ë³íí©ëë¤.
trueë 1ë¡ ë³íëê³falseë 0ì¼ë¡ ë³íë©ëë¤. ê·¸ë° ë¤ì ë í¼ì°ì°ì를 ë¤ì ëì¨íê² ë¹êµí©ëë¤. - ì«ì를 문ìì´ë¡: 문ìì´ì ì«ìë¡ ë³íí©ëë¤. ë³í ì¤í¨ë¡ ì¸í´
NaNì´ ë°ìíë©´ ëë±ì±ì´falseìì ë³´ì¥í©ëë¤. - ì«ì를 BigIntë¡: ì«ì ê°ì¼ë¡ ë¹êµí©ëë¤. ì«ìê° Â±Infinityì´ê±°ë
NaNì´ë©´false를 ë°íí©ëë¤. - 문ìì´ì BigIntë¡:
BigInt()ìì±ìì ëì¼í ìê³ ë¦¬ì¦ì ì¬ì©íì¬ ë¬¸ìì´ì BigIntë¡ ë³íí©ëë¤. ë³íì ì¤í¨íë©´false를 ë°íí©ëë¤.
ì íµì ì¼ë¡, ê·¸ë¦¬ê³ ECMAScriptì ë°ë¥´ë©´ 모ë ìì ê°ê³¼ ê°ì²´ë undefinedì nullê³¼ ëì¨íê² ëë±íì§ ììµëë¤. ê·¸ë¬ë ëë¶ë¶ì ë¸ë¼ì°ì ë í¹ì í í´ëì¤ì ê°ì²´(í¹í 모ë íì´ì§ì document.all ê°ì²´)ê° ì¼ë¶ ìí©ìì ë§ì¹ ê° undefinedì 모방íë ê²ì²ë¼ ëìíë ê²ì íì©í©ëë¤. ëì¨í ëë±ì±ì ë¤ì ë§¥ë½ ì¤ íëì
ëë¤. null == Aì undefined == Aë Aê° undefinedë¡ ì뮬ë ì´í¸ íë ê°ì²´ì¸ ê²½ì°ìë§ trueë¡ íê°ë©ëë¤. ë¤ë¥¸ 모ë ê²½ì°ìë ê°ì²´ê° undefined ëë nullê³¼ ëì¨íê² ëë±íì§ ììµëë¤.
ëë¶ë¶ì ê²½ì°ìì ëì¨í ëë±ì ì¬ì©íë ê²ì´ ê¶ì¥ëì§ ììµëë¤. ì격í ëë±ì ì¬ì©í ë¹êµ ê²°ê³¼ë ì측í기 ì½ê³ , ê°ì íë³íì´ ì기 ë문ì ë 빨리 íê°ë ì ììµëë¤.
ë¤ì ìì ë ì«ì ìì ê° 0, bigint ìì ê° 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
ëì¨í ëë±ìë == ì°ì°ìë§ ì¬ì©í©ëë¤.
Object.is()를 ì¬ì©í ëì¼ ê° ëë±
ëì¼ ê° ëë±ì ë ê°ì´ 모ë ë§¥ë½ìì 기ë¥ì ì¼ë¡ ëì¼íì§ ì¬ë¶ë¥¼ ê²°ì í©ëë¤. (ì´ ì¬ì© ì¬ë¡ëLiskov ëì²´ ìì¹ ì¬ë¡ë¥¼ ë³´ì¬ì¤ëë¤.) ë³ê²½í ì ìë ìì±ì ë³ê²½íë ¤ íë ê²½ì° í ì¬ë¡ê° ë°ìí©ëë¤.
// ë³ê²½í ì ìë NEGATIVE_ZERO ìì±ì Number ìì±ìì ì¶ê°í©ëë¤.
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 ë©ìëì ìí´ ì ê³µë©ëë¤. ì´ë ëë±í ID ê°ì´ ììëë ì¸ì´ì ê±°ì 모ë ê³³ìì ì¬ì©ë©ëë¤.
ëì¼ ê° ì ë¡ ëë±
ëì¼ ê° ê° ëë±ê³¼ ì ì¬íì§ë§, +0ê³¼ -0ì ê°ì ê²ì¼ë¡ ê°ì£¼ë©ëë¤.
ëì¼ ê° ì ë¡ ëë±ì 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"). ëë ì´ì¤ ë±í¸ê° 기ì¤ì ì´ê³ ì¼ì¤ ë±í¸ê° í¥ìë ë²ì ì´ë¼ê³ 주ì¥í ì ììµëë¤. ë í¼ì°ì°ìê° ëì¼í ì íì´ì´ì¼ íë¯ë¡ ì¶ê° ì ì½ ì¡°ê±´ì´ ì¶ê°ë기 ë문ì
ëë¤.
ê·¸ë¬ë ì´ë¬í ìê°ì ë°©ìì ëë± ë¹êµê° í쪽 ëìë "ìì í ì격í¨"ì´ ìê³ , ë¤ë¥¸ìª½ìë "ìì í ëì¨í¨"ì´ ìë 1ì°¨ì "ì¤íí¸ë¼"ì íì±í©ëë¤. ì´ ì¤íí¸ë¼ì Object.isìì ë¶ì¡±í ì ì´ ëë¬ëëë°, ì´ë ì´ì¤ ë±í¸ë³´ë¤ "ëì¨íì§"ë ìê³ , ì¼ì¤ ë±í¸ë³´ë¤ "ì격"íì§ë ìì ì¤ê° ì´ëê°ì ë§ì§ë ì기 ë문ì
ëë¤(ì¦, ì´ì¤ ë±í¸ë³´ë¨ ì격íì§ë§ ì¼ì¤ ë±í¸ë³´ë¤ ëì¨íë¤). ìëì ëì¼ì± ë¹êµ íìì ì´ê²ì´ Object.isê° NaNì ì²ë¦¬íë ë°©ì ë문ìì ì ì ììµëë¤. ë§ì½ Object.is(NaN, NaN)ì´ falseë¡ íê°ëë©´ Object.isë -0ê³¼ +0ì 구ë³íë ë ì격í ì¼ì¤ ë±í¸ì íìì¼ë¡ ëì¨/ì격 ì¤íí¸ë¼ì ì í©íë¤ê³ ë§í ì ììµëë¤. ê·¸ë¬ë NaN ì²ë¦¬ë ì´ê²ì´ ì¬ì¤ì´ ìëì ì미í©ëë¤. ë¶ííê²ë Object.isë ë±í¸ ì°ì°ìì ëí ëì¨í¨ì´ë ì격í¨ì´ ìëë¼ ê³ ì í í¹ì±ì ê´ì ìì ìê°í´ì¼ í©ëë¤.
| x | y | == |
=== |
Object.is |
SameValueZero |
|---|---|---|---|---|---|
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()ì ì¼ì¤ ë±í¸ë¥¼ ì¬ì©í´ì¼ í ê¹?
ì¼ë°ì ì¼ë¡ 0ì ëí Object.isì í¹ë³í ëìì ê´ì¬ì ê°ì§ ì ìë ì ì¼í ìê°ì í¹ì ë©í íë¡ê·¸ëë° ì²´ê³ë¥¼ ì¶êµ¬í ë, í¹í ìì± ì¤ëª
ìì ê´ë ¨íì¬ ìì
ì´ Object.definePropertyì ì¼ë¶ í¹ì±ì ë°ìíë ê²ì´ ë°ëì§í ë ì
ëë¤. ì¬ë¬ë¶ì ì¬ì© ì¬ë¡ì ì´ê²ì´ íìíì§ ìì ê²½ì°, Object.is를 í¼íê³ ëì ===를 ì¬ì©íë ê²ì´ ì¢ìµëë¤. ì구 ì¬íì ë NaN ê° ê°ì ë¹êµê° trueë¡ íê°ëë ê²ì´ í¬í¨ëëë¼ë, ì¼ë°ì ì¼ë¡ NaN ê²ì¬(ì´ì ë²ì ì ECMAScriptìì ì¬ì©í ì ìë isNaN ë©ìë ì¬ì©)를 í¹ìí ê²½ì°ë¡ ì§ì íë ê²ì´ ë¹êµìì ë°ìíë 0ì ë¶í¸ê° ì£¼ë³ ê³ì°ì ì´ë»ê² ìí¥ì ë¯¸ì¹ ì ìëì§ ììë´ë ê²ë³´ë¤ ì½ìµëë¤.
ë¤ìì ì½ëìì -0ê³¼ +0ì 구ë¶í ì ìë ë´ì¥ ë©ìëì ì°ì°ìì ì¼ë¶ 목ë¡ì
ëë¤.
-(ë¨í ë¶ì )-
ë¤ì ìì 를 참조íì¸ì.
jsconst stoppingForce = obj.mass * -obj.velocity;obj.velocityê°0(ëë0ì¼ë¡ ê³ì°)ì´ë©´ í´ë¹ ìì¹ì-0ì´ ëì ëê³stopsingForceë¡ ì íë©ëë¤. Math.atan2,Math.ceil,Math.pow,Math.round-
ê²½ì°ì ë°ë¼
-0ì´ ë§¤ê°ë³ì ì¤ íëë¡ ì¡´ì¬íì§ ìë ê²½ì°ìë-0ì´ ì´ ë©ìëì ë°í ê°ì¼ë¡ ìì ëì ë ì ììµëë¤. ì를 ë¤ì´Math.pow를 ì¬ì©íì¬-Infinity를 ìì ê±°ëì ê³±ì¼ë¡ ì¬ë¦¬ë©´ íì ì§ìë-0ì¼ë¡ íê°ë©ëë¤. ê°ë³ ë©ìëì ëí 문ì를 참조íì¸ì. Math.floor,Math.max,Math.min,Math.sin,Math.sqrt,Math.tan-
-0ì´ ë§¤ê°ë³ì ì¤ íëë¡ ì¡´ì¬íë ê²½ì°ì ì´ ë©ìëìì-0ë°í ê°ì ê°ì ¸ì¬ ì ììµëë¤. ì를 ë¤ì´Math.min(-0, +0)ì-0ì¼ë¡ íê°ë©ëë¤. ê°ë³ ë©ìë,ì ëí 문ì를 참조íì¸ì. ~,<<,>>-
ì´ë¬í ì°ì°ìë ë´ë¶ì ì¼ë¡ ToInt32 ìê³ ë¦¬ì¦ì ì¬ì©í©ëë¤. ë´ë¶ 32ë¹í¸ ì ì ì íìë 0ì ëí ííì´ íëë§ ì기 ë문ì
-0ì ì ì°ì° í ìë³µ ì¬íìì ì´ìë¨ì§ 못í©ëë¤. ì를 ë¤ì´,Object.is(~~(-0), -0)ê³¼Object.is(-0 << 2 >> 2, -0)ì 모ëfalseë¡ íê°ë©ëë¤.
0ì ë¶í¸ê° ê³ ë ¤ëì§ ìì ê²½ì° Object.isì ìì¡´íë ê²ì ìíí ì ììµëë¤. ë¬¼ë¡ ìëê° -0ê³¼ +0ì 구ë¶íë ê²ì´ë¼ë©´ ì íí ìíëëë¡ ìíë©ëë¤.
주ì: Object.is()ì NaN
Object.is ì¬ìì NaNì 모ë ì¸ì¤í´ì¤ë¥¼ ëì¼í ê°ì²´ë¡ ì·¨ê¸í©ëë¤. ê·¸ë¬ë íìí ë°°ì´ì ì¬ì©í ì ìì¼ë¯ë¡ 모ë ë§¥ë½ìì ëì¼íê² ìëíì§ ìë 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]