Symbol.unscopables
ã¯éçãã¼ã¿ããããã£ã§ãã¦ã§ã«ãã¦ã³ã·ã³ãã«ã§ãã Symbol.unscopables
ã表ãã¾ããwith
æã¯ã¹ã³ã¼ããªãã¸ã§ã¯ãä¸ã§ããã® with
ç°å¢å
ã§ãã¤ã³ãããé¤å¤ãããããããã£ã®éåãæã¤ããããã£ãããã®ã·ã³ãã«ã§æ¤ç´¢ãã¾ãã
const object1 = {
property1: 42,
};
object1[Symbol.unscopables] = {
property1: true,
};
with (object1) {
console.log(property1);
// Expected output: Error: property1 is not defined
}
å¤
ã¦ã§ã«ãã¦ã³ã·ã³ãã« Symbol.unscopables
ã§ãã
[Symbol.unscopables]
ã·ã³ãã«ï¼Symbol.unscopables
ã§ã¢ã¯ã»ã¹ï¼ã¯ãwith
ç°å¢ãã¤ã³ãã§ããããã£åãåå¥å¤æ°ã¨ãã¦å
¬éãããã®ãé¤å¤ããããã«ãä»»æã®ãªãã¸ã§ã¯ãã«å®ç¾©ãããã¨ãã§ãã¾ãããªãã峿 ¼ã¢ã¼ãã§ã¯ãwith
æã¯ä½¿ç¨ã§ããããã®ã·ã³ãã«ã¯å¿
è¦ããã¾ããã
[Symbol.unscopables]
ãªãã¸ã§ã¯ãã®ããããã£ã true
ï¼ã¾ãã¯ä»»æã®çå¤ï¼ã«è¨å®ããã¨ãwith
ã¹ã³ã¼ããªãã¸ã§ã¯ãã®å¯¾å¿ããããããã£ãã¹ã³ã¼ã対象å¤ãããããwith
æ¬ä½ã¹ã³ã¼ãã«å°å
¥ããã¾ãããããããã£ã false
ï¼ã¾ãã¯å½å¤ï¼ã«è¨å®ããã¨ãã¹ã³ã¼ã対象ã¨ãªããåå¥ã¹ã³ã¼ã夿°ã¨ãã¦ç¾ãã¾ãã
x
ãã¹ã³ã¼ã対象å¤ãã©ããã夿ããã¨ãã[Symbol.unscopables]
ããããã£ã®ãããã¿ã¤ããã§ã¼ã³å
¨ä½ã«å¯¾ã㦠x
ã¨ããããããã£ãå¼ã³åºãã¾ããã¤ã¾ãã[Symbol.unscopables]
ããã¬ã¼ã³ãªãã¸ã§ã¯ãã¨ãã¦å®£è¨ããå ´åãObject.prototype
ã®ããããã£ï¼ä¾ãã° toString
ãªã©ï¼ãã¹ã³ã¼ã対象å¤ã«ãªãããããã®ããããã£ãé常ã¹ã³ã¼ãããã¦ããã¨æ³å®ãã¦ããå¤ãã³ã¼ãã§ã¯å¾æ¹äºææ§ãçºçããå¯è½æ§ãããã¨ãããã¨ã§ãï¼ä¸è¨ã®ä¾ãåç
§ãã¦ãã ããï¼ãç¬èªã® [Symbol.unscopables]
ããããã£ã§ã¯ããã®ãããã¿ã¤ãã¨ã㦠null
ãæã¤ããã«ãããã¨ããå§ããã¾ãï¼ä¾ãã° Array.prototype[Symbol.unscopables]
ããããªã£ã¦ãã¾ãï¼ã
ãã®ãããã³ã«ã¯ãDOM API ï¼Element.prototype.append()
ãªã©ï¼ã§ãå©ç¨ããã¦ãã¾ãã
次ã®ã³ã¼ãã¯ãES5 以ä¸ã§ããã°æ£ããåä½ãã¾ãããããã ECMAScript 2015 以éã§ã¯ãArray.prototype.values()
ã¡ã½ãããå°å
¥ããã¾ãããããã¯ãwith
ç°å¢å
ã§ "values" ã¯ã¡ã½ããã«ãªããwith
æã®å¤ã®å¤æ°ã§ã¯ãªããªã£ãã¨ãããã¨ã§ãã
var values = [];
with (values) {
// [Symbol.unscopables] ãåå¨ããªãå ´åãECMAScript 2015 ãã
// å¤ã¯ Array.prototype.values ã«ãªãã¾ãã
// ãã®ãããã¨ã©ã¼ãçºçãã¾ãã
values.push("something");
}
ãã® with (values)
ãå«ãã³ã¼ãã¯ãArray.prototype.values()
ã追å ãããã¨ããFirefox ã«ããã¦ä¸é¨ã®ã¦ã§ããµã¤ãã§ä¸å
·åãçºçãã¾ããï¼Firefox Bug 883914ï¼ãããã«ãå°æ¥é
åã¡ã½ããã追å ãããå ´åããããæé»çã« with
ã¹ã³ã¼ãã夿´ããã¨å£ããå¯è½æ§ããããã¨ã«ãªãã¾ãããã®ãããArray.prototype[Symbol.unscopables]
ã¨ããã·ã³ãã«ãå°å
¥ãããArray
ã« Array.prototype[Symbol.unscopables]
ã¨ãã¦å®è£
ãããããã¤ãã® Array ã¡ã½ããã with æã«ã¹ã³ã¼ããããã®ãé²ãã¾ãã
èªåã®ãªãã¸ã§ã¯ãã« [Symbol.unscopables]
ãè¨å®ãããã¨ãã§ãã¾ãã
const obj = {
foo: 1,
bar: 2,
baz: 3,
};
obj[Symbol.unscopables] = {
// ãªãã¸ã§ã¯ãã« `null` ãããã¿ã¤ããæããã¦ã
// `Object.prototype` ã¡ã½ãããã¹ã³ã¼ãããå¤ããªãããã«ãã
__proto__: null,
// `foo` ã¯ã¹ã³ã¼ã対象
foo: false,
// `bar` ã¯ã¹ã³ã¼ã対象å¤
bar: true,
// `baz` ã¯çç¥ã`undefined` ã¯å½å¤ãªã®ã§ããããã¹ã³ã¼ãå¯¾è±¡ï¼æ¢å®å¤ï¼
};
with (obj) {
console.log(foo); // 1
console.log(bar); // ReferenceError: bar is not defined
console.log(baz); // 3
}
ãããã¿ã¤ãã null ã§ã¯ãªããªãã¸ã§ã¯ãã [Symbol.unscopables]
ã¨ãã¦ä½¿ãã®ã¯é¿ãã
[Symbol.unscopables]
ã®ãããã¿ã¤ããåé¤ããã«ããã¬ã¼ã³ãªãã¸ã§ã¯ãã¨ãã¦å®£è¨ããã¨ãå¾®å¦ãªãã°ãçºçãããå¯è½æ§ãããã¾ãã[Symbol.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
ã«ããããã£ã追å ããã¨ãã« [Symbol.unscopables]
ããããã£ã追å ãããã¨ã«ãã¾ããããã¤ã¼ãã«ããããããããã¾ããã
const character = {
name: "Yoda",
toString: function () {
return "Use with statements, you must not";
},
student: "Luke",
[Symbol.unscopables]: {
// Make `student` unscopable
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 ã«ãªã
}
ãããä¿®æ£ããã«ã¯ã常㫠[Symbol.unscopables]
ããObject.prototype
ããããã£ãå«ã¾ãªããã¹ã³ã¼ã対象å¤ã«ãããããããã£ã®ã¿ãæã¤ããããã«ãã¦ãã ããã
const character = {
name: "Yoda",
toString: function () {
return "Use with statements, you must not";
},
student: "Luke",
[Symbol.unscopables]: {
// ãªãã¸ã§ã¯ãã« `null` ãããã¿ã¤ããæããã¦ã
// `Object.prototype` ã¡ã½ãããã¹ã³ã¼ãããå¤ããªãããã«ãã
__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