Symbol.unscopables
ì ì ë°ì´í° ìì±ì ì ìë ¤ì§ ì¬ë³¼ @@unscopables
를 ëíë
ëë¤. with
문ì ë²ì ê°ì²´ìì ì´ ì¬ë³¼ì ì¡°ííì¬ with
íê²½ ë´ìì ë°ì¸ë©ëì§ ììì¼ íë ìì±ë¤ì ì§í©ì í¬í¨íë ìì±ì ì°¾ìµëë¤.
const object1 = {
property1: 42,
};
object1[Symbol.unscopables] = {
property1: true,
};
with (object1) {
console.log(property1);
// Expected output: Error: property1 is not defined
}
ê°
ì ìë ¤ì§ ì¬ë³¼ @@unscopables
.
@@unscopables
ì¬ë³¼(Symbol.unscopables
를 íµí´ ì ê·¼)ì with
íê²½ ë°ì¸ë©ìì í¹ì ìì± ì´ë¦ì´ ë ì컬 ë³ìë¡ ë
¸ì¶ëì§ ìëë¡ í기 ìí´ ì´ë¤ ê°ì²´ìë ì ìë ì ììµëë¤. ì격 모ë를 ì¬ì©í ëë with
문ì ì¬ì©í ì ì기 ë문ì ì´ ì¬ë³¼ì´ íìíì§ ìì ê°ë¥ì±ì´ í½ëë¤.
@@unscopables
ê°ì²´ì ìì±ì true
(ëë ì°¸ ê°ì ê°)ë¡ ì¤ì íë©´ í´ë¹ ìì±ì´ with
ë²ì ê°ì²´ìì 'ë²ì ì§ì ë¶ê°ë¥'ì´ ëì´ì with
본문ì ë²ìì ëì
ëì§ ììµëë¤. ìì±ì false
(ëë ê±°ì§ ê°ì ê°)ë¡ ì¤ì íë©´ í´ë¹ ìì±ì´ 'ë²ì ì§ì ê°ë¥'ì´ ëì´ ë ì컬 ë²ì ë³ìë¡ ëíëê² ë©ëë¤.
x
ê° ë²ì ì§ì ë¶ê°ë¥ì¸ì§ ì¬ë¶ë¥¼ ê²°ì í ëë @@unscopables
ìì±ì ì ì²´ íë¡í íì
ì²´ì¸ìì x
ë¼ë ìì±ì ê²ìí©ëë¤. ì´ë @@unscopables
를 ë¨ìí ê°ì²´ë¡ ì ì¸íì ê²½ì° Object.prototype
ì toString
ë±ì ìì±ë¤ ëí ë²ì ì§ì ë¶ê°ë¥íê² ëì´ì ì´ë¬í ìì±ë¤ì´ ì¼ë°ì ì¼ë¡ ë²ì ë´ì ìë¤ê³ ê°ì íë ë ê±°ì ì½ëì ëí íì í¸íì± ë¬¸ì ê° ë°ìí ì ììì ì미í©ëë¤(ìëì ìì 를 ë³´ì¸ì). ë°ë¼ì ì¬ì©ì ì ì @@unscopables
ìì±ì íë¡í íì
ì null
ë¡ ì¤ì íë ê²ì´ ì¢ìµëë¤. Array.prototype[@@unscopables]
ì²ë¼ ë§ì
ëë¤.
ì´ íë¡í ì½ì Element.prototype.append()
ì ê°ì DOM APIììë íì©ë©ëë¤.
ë¤ì ì½ëë ES5 ë° ê·¸ ì´ì ë²ì ììë ì ìëí©ëë¤. íì§ë§ ECMAScript 2015 ì´íë¶í° Array.prototype.keys()
ë©ìëê° ëì
ëììµëë¤. ì´ë with
íê²½ ë´ìì "keys"ê° ë³ìê° ìëë¼ ë©ìëê° ëë¤ë ê²ì ì미í©ëë¤. ì´ê² ë°ë¡ @@unscopables
ì¬ë³¼ì´ ëì
ë ì´ì ì
ëë¤. ë´ì¥ @@unscopables
ì¤ì ì with
문ì ë²ìì ì¼ë¶ ë°°ì´ ë©ìëê° ë¤ì´ê°ë ê²ì ë°©ì§í기 ìí´ Array.prototype[@@unscopables]
ë¡ êµ¬íëììµëë¤.
var keys = [];
with (Array.prototype) {
keys.push("something");
}
ê°ì²´ììì ë²ì ì§ì ë¶ê°ë¥
@@unscopables
를 ì¬ì©ì ì ì ê°ì²´ì ì¤ì í ìë ììµëë¤.
const obj = {
foo: 1,
bar: 2,
baz: 3,
};
obj[Symbol.unscopables] = {
// `Object.prototype`ì ë©ìëê° ë²ì ì§ì ë¶ê°ë¥íê² ëë ê²ì
// ë°©ì§í기 ìí´ ê°ì²´ì íë¡í íì
ì `null`ë¡ ì¤ì í©ëë¤.
__proto__: null,
// `foo` ë ë²ì ì§ì ê°ë¥í´ì§ëë¤.
foo: false,
// `bar` ë ë²ì ì§ì ë¶ê°ë¥í´ì§ëë¤.
bar: true,
// `baz` ë ìëµëììµëë¤. `undefined`ë ê±°ì§ ê°ì ê°ì´ë¯ë¡ bazë ë²ì ì§ì ê°ë¥í©ëë¤ (기본ê°).
};
with (obj) {
console.log(foo); // 1
console.log(bar); // ReferenceError: bar is not defined
console.log(baz); // 3
}
íë¡í íì
ì´ nullì´ ìë ê°ì²´ë¥¼ @@unscopablesë¡ ì¬ì©íì§ ì기
íë¡í íì
ì ì ê±°íì§ ìì ë¨ìí ê°ì²´ë¥¼ @@unscopables
ë¡ ì ì¸íë©´ 미ë¬í ë²ê·¸ê° ë°ìí ì ììµëë¤. @@unscopables
ê° ëì¤ê¸° ì´ì ì ìëíê³ ìë ë¤ìê³¼ ê°ì ì½ë를 ê³ ë ¤í´ ë³¼ ì ììµëë¤.
const character = {
name: "Yoda",
toString: function () {
return "Use with statements, you must not";
},
};
with (character) {
console.log(name + ' says: "' + toString() + '"'); // Yoda says: "Use with statements, you must not"
}
íì í¸íì±ì ì ì§í기 ìí´, character
ì ë ë§ì ìì±ì ì¶ê°í ë @@unscopables
ìì±ì ì¶ê°íê¸°ë¡ ê²°ì íë¤ê³ ê°ì í©ëë¤. ê·¸ë¬ë©´ ë¨ìíê² ìê°í´ì ë¤ìê³¼ ê°ì´ í ì ìì ê²ì
ëë¤.
const character = {
name: "Yoda",
toString: function () {
return "Use with statements, you must not";
},
student: "Luke",
[Symbol.unscopables]: {
// `student`를 ë²ì ì§ì ë¶ê°ë¥íê² ë§ëëë¤.
student: true,
},
};
ê·¸ë¬ë, ìì ì½ëë ì´ì ìëíì§ ììµëë¤.
with (character) {
console.log(name + ' says: "' + toString() + '"'); // Yoda says: "[object Undefined]"
}
ì´ë character[Symbol.unscopables].toString
ì ì¡°ííë©´ Object.prototype.toString()
ì ë°íí기 ë문ì
ëë¤. ê·¸ë¦¬ê³ ì´ë ì°¸ ê°ì ê°ì
ëë¤. ë°ë¼ì with()
문ìì toString()
ì í¸ì¶íë©´ globalThis.toString()
ì í¸ì¶íê² ë©ëë¤. ê·¸ë¦¬ê³ ì´ë this
ìì´ í¸ì¶ë기 ë문ì this
ë undefined
ê° ëê³ ê·¸ëì [object Undefined]
를 ë°ííê² ë©ëë¤.
ë©ìëê° character
ì ìí´ ì¬ì ìëì§ ìëë¼ë, ë©ìë를 ë²ì ì§ì ë¶ê°ë¥íê² ì¤ì íë©´ this
ì ê°ì´ ë³ê²½ë©ëë¤.
const proto = {};
const obj = { __proto__: proto };
with (proto) {
console.log(isPrototypeOf(obj)); // true; `isPrototypeOf` ì ë²ì ì§ì ëì´ ìê³ `this`ë `proto`ì
ëë¤.
}
proto[Symbol.unscopables] = {};
with (proto) {
console.log(isPrototypeOf(obj)); // TypeError: Cannot convert undefined or null to object
// `isPrototypeOf`ì ë²ì ì§ì ëì´ ìì§ ìê³ `this`ë undefinedì
ëë¤.
}
ì´ë¥¼ í´ê²°í기 ìí´ìë @@unscopables
ì Object.prototype
ìì± ìì´, ë²ì ì§ì ë¶ê°ë¥íê² ë§ë¤ê³ ì íë ìì±ë¤ë§ í¬í¨íë¤ë ê²ì íì¤íê² í´ì¼ í©ëë¤.
const character = {
name: "Yoda",
toString: function () {
return "Use with statements, you must not";
},
student: "Luke",
[Symbol.unscopables]: {
// `Object.prototype`ì ë©ìëê° ë²ì ì§ì ë¶ê°ë¥íê² ëë ê²ì
// ë°©ì§í기 ìí´ ê°ì²´ì íë¡í íì
ì `null`ë¡ ì¤ì í©ëë¤.
__proto__: null,
// `student` ë ë²ì ì§ì ë¶ê°ë¥í´ì§ëë¤.
student: true,
},
};
ëª
ì¸ì ë¸ë¼ì°ì í¸íì± ê°ì´ 보기
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