我在JavaScript文件中使用了var values = {};
。但是,当我在Firefox typeof(values)
上测试我的应用程序时,返回的是函数而不是对象。可以在Firefox控制台窗口中轻松测试。由于此变量已在我的应用程序中多次使用;更改其名称可能不是可行的解决方案。我的问题是:
答案 0 :(得分:3)
问题是您的分配试图更改只读属性window.values
,该属性是一个函数,一个控制台实用程序。
如果在内部范围内进行操作,则不会出现此类问题:
(function(){ var values = {}; console.log(typeof values) })()
Chrome与Firefox之间的区别在于Chrome并未将此属性定义为只读。
答案 1 :(得分:1)
那只是Firefox控制台的产物,它不会影响您的实际代码。如果您在实际的脚本代码中使用typeof values
,则会看到它是undefined
(如果您按照问题所示创建它,则将看到object
)。
Firefox的控制台提供values
作为查看对象值的一种方式:
>> values({foo: "bar"}) -> Array [ "bar" ]
Firefox控制台中还有其他可用功能;他们是documented here。
Chrome / Chromium也有很多(包括values
,documented here)。
有没有办法将此变量名强制为对象?
在真实的脚本代码中,而不是控制台中,使用values
没问题。但是,我建议避免创建全局变量,因为全局命名空间非常拥挤。
为了避免这个问题,我还应该考虑其他哪些变量名?
name
和title
是人们常去的地方。这是不使用全局变量的另一个原因。而是将您的代码放在作用域函数中:
(function() {
// Your code here
})();
答案 2 :(得分:-1)
由于在firefox中这样做,您试图覆盖/重新分配类型为 function
的全局只读窗口对象 valueswindow.values // its a function
Chrome不会将values
视为只读对象
为了使其在Firefox中如您所愿,您需要将其放置在函数中
function test() {
var values = {};
console.log(typeof values); // typeof: object
}