火狐和谷歌浏览器中JavaScript对象字面量行为不同?

3
我已经将我的错误缩小到以下代码段,该代码在谷歌浏览器中生成了不同的行为:
示例代码:http://jnvxxx.appspot.com/rpc/static_server?key_=testjs.html 火狐输出:Hi 1 [object Object]192 Hi 2
谷歌输出:Hi 1 [object Object]undefined Hi 2
有任何想法如何在谷歌浏览器中使属性也能正常工作吗?
谢谢。

你没有使用JSON,只是JavaScript对象字面量。 - Matthew Flaschen
@Matthew,抱歉。事实上,我是从json.dumps(python对象)中获得这个javascript字面量的...这就是我在第一次提问时放置JSON解析错误的原因。 - Ram Shanker
1个回答

5
您正在访问 window.status 属性,该属性用于控制状态栏中的文本。请参见:http://www.w3schools.com/jsref/prop_win_status.asp
显然,在所有主要浏览器中都必须先打开此功能,因此当其关闭时,不同的浏览器会执行不同的操作。Chrome 将 status 属性的值更改为一个字符串,因此它变成了神秘但熟悉的字符串 "[object Object]",其中没有 entry_count 属性。Firefox 则在 status 属性中保留对象不变。
底线:window.status 已经被用于其他目的;请使用其他名称作为您的变量名。
编辑:
如下所述,更好的方法是将其封装在函数范围内,只要您不会在其他地方使用它即可:
(function() {
   var myStatus = {...};
   // Do something with myStatus, preferably not document.write ;)
}());

var a = typeof myStatus; // a === 'undefined'.

这样,变量只在函数范围内可见。


谢谢Speny...我很惊讶 :)正在工作中: 示例:http://jnvxxx.appspot.com/rpc/static_server?key_=testjs2.html - Ram Shanker
1
+1 知识渊博,先生!另外需要注意的是,当您使用全局变量时会发生什么。与其仅使用不同的变量名称,最好的解决方案是添加一个新的作用域,即使只是一个自执行匿名函数。 - lonesomeday
@lonesomeday 你说得对!我把它作为一个额外的奖励添加了进去。 - Spiny Norman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接