Symbol.unscopables
æç¨äºæå®å¯¹è±¡å¼ï¼å
¶å¯¹è±¡èªèº«åç»§æ¿çä»å
³è对象ç 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
ï¼ï¼ç¨äºæé¤å±æ§åç§°å¹¶ä¸ with
ç¯å¢ç»å®å¨ä¸èµ·ä½ä¸ºè¯æ³åéå
¬å¼ã请注æï¼å¦æä½¿ç¨ä¸¥æ ¼æ¨¡å¼ï¼è¯å¥å°ä¸å¯ç¨ï¼å¹¶ä¸å¯è½ä¹ä¸éè¦ç¬¦å·ã
å¨ unscopables
对象ä¸è®¾ç½®å±æ§ä¸º trueï¼å°ä½¿å
¶ unscopable å¹¶ä¸å æ¤è¯¥å±æ§ä¹å°ä¸ä¼å¨è¯æ³ç¯å¢åéä¸åºç°ãå¦æè®¾ç½®å±æ§ä¸º false
ï¼åå°ä½¿å
¶å¯ scopable
å¹¶ä¸è¯¥å±æ§ä¼åºç°å¨è¯æ³ç¯å¢åéä¸ã
ä¸åç代ç å¯å
¼å®¹ ES5 å以ä¸çæ¬ãç¶èï¼å¨ ECMAScript 2015 (ES6) æå
¶åç»çæ¬ä¸ï¼Array.prototype.keys()
æ¹æ³æä¼åºç°ãæå³çå
é¨ with
ç¯å¢âå
³é®åâåå¨è¯¥æ¹æ³ï¼ä½åéä¸ä¸ä¼åå¨ãä¹å°±æ¯è¯´ï¼å½ unscopable
s symbol 被å±ç¤ºæ¶ï¼å
ç½®çunscopables
设置æ¯ç± Array.prototype[Symbol.unscopables]
å±ç¤ºå¹¶å®ç°çï¼ä¸äº Array çæ¹æ³ å°ä½ä¸º scoped æ¾å
¥ with
è¯å¥ä¸ã
var keys = [];
with (Array.prototype) {
keys.push("something");
}
Object.keys(Array.prototype[Symbol.unscopables]);
// ["copyWithin", "entries", "fill", "find", "findIndex",
// "includes", "keys", "values"]
ä½ ä¹å¯ä»¥ä¸ºä½ èªå·±ç对象设置 unscopables
ã
var obj = {
foo: 1,
bar: 2,
};
obj[Symbol.unscopables] = {
foo: false,
bar: true,
};
with (obj) {
console.log(foo); // 1
console.log(bar); // ReferenceError: bar is not defined
}
è§è æµè§å¨å
¼å®¹æ§ åè§
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