gpt4 book ai didi

javascript - 使用 JavaScript 的 with(){} 语句时,无效变量会去哪里?

转载 作者:行者123 更新时间:2023-12-02 21:50:23 24 4
gpt4 key购买 nike

使用 JavaScript 的 with 语句时,名称无效的变量会去哪里?

var o = {"@#$%":1,"test":2}

with(o){
console.log(test)
// Can't do this:
//console.log(@#$%)
// Was it not imported, or is it just inaccessible?
}

您也可以引用 JavaScript 引擎中的代码吗?

最佳答案

如果属性不是有效的标识符,则不能像 with 中的标识符一样引用它。它并非无法访问,但您唯一的选择是像平常一样手动查找原始对象上的属性:

var o = {"@#$%":1,"test":2}

with(o){
console.log(o['@#$%']);
}

此类问题并不是已弃用的 with 语句所独有的。它也发生在全局对象上。就像 with 语句 creates an object Environment Record 一样,脚本中的所有代码在某种意义上都隐式包装在全局对象的 with 中(导致全局环境记录)。

因此,出于完全相同的原因,当一个不能是标识符的属性位于 window 上时,例如:

window['###'] = 'foo';

如果不首先显式引用 window(或使用其他方法获取全局对象),则无法使用独立标识符来获取 foo

(当然,就像 with 一样,在 window 上作为标识符有效的属性可以独立引用 - 这就是为什么我们可以,例如,引用 undefinedArray 而不是 window.undefinedwindow.Array。这可以是 cause bugs... )

关于javascript - 使用 JavaScript 的 with(){} 语句时,无效变量会去哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60143305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com