gpt4 book ai didi

javascript - 旧版 IE 中 JSON 对象的问题

转载 作者:行者123 更新时间:2023-11-30 13:28:26 25 4
gpt4 key购买 nike

作为确保在 IE 中调用 JSON 对象不会失败的测试,我最近将其添加到我的 js 库中:

//Works
//if(!JSON) var JSON={};
//JSON.stringify = JSON.stringify || function(){};
//Works
//if(!window.JSON) JSON={};
//JSON.stringify = JSON.stringify || function(){};
//Does not work
//if(!JSON) JSON={};
//JSON.stringify = JSON.stringify || function(){};
//Best of both!
if(!window.JSON) var JSON={};
JSON.stringify = JSON.stringify || function(){};

当我说“不起作用”时,我的意思是它在 IE7 中不起作用并抛出“JSON blah blah blah”错误。为什么指定 window.JSON 不会引发错误?为什么不指定 window.JSON 但使用 var JSON 不会引发错误?这只是我不应该担心的愚蠢的 IE 东西,还是这种危险的结果会成为其他浏览器的问题?

请注意“控制台”也是如此。

最佳答案

访问一个未定义的全局变量总是会抛出异常。访问对象的未定义属性将始终返回 undefined。 window 是 global 的别名这一事实并没有改变这里的规则,访问 window 的未定义成员将返回 undefined

至于为什么第二个例子没有抛出是因为所有 var 都被提升到封闭范围,无论它们出现在哪里以及在该范围内执行任何代码之前。这意味着即使未执行 var 也定义了 JSON 变量,它只会包含 undefinedvar 做两件事,在范围内创建一个变量,并且可以选择初始化该变量。创建变量被提升到范围的顶部,分配它在它出现的地方执行。所有变量都包含 undefined 直到它们被赋值。如果未执行赋值,它们将保持 undefined。相同范围内的重复 var 将被忽略。这意味着如果 JSON 已经在范围内,则忽略 var

这不是愚蠢的 IE 东西,所有符合 ES5 的 JavaScript 实现都需要遵循我上面概述的规则。

关于javascript - 旧版 IE 中 JSON 对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7668917/

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