请解释一下这个Javascript怪癖
我认识的一个人正在学习编程,他偶然发现了这一点,让我感到困惑: 请打开一个控制台(Chrome/Firefox)并键入:请解释一下这个Javascript怪癖,javascript,arrays,string,variables,Javascript,Arrays,String,Variables,我认识的一个人正在学习编程,他偶然发现了这一点,让我感到困惑: 请打开一个控制台(Chrome/Firefox)并键入:var name=['what','the','…?'] 我希望name是一个字符串数组,但是: typeof name显示string而不是Array 列出name变量将打印字符串而不是数组 name.length是13而不是3 写入name=name.split(',')按预期返回一个数组[“what”,“the”,“…?”],但name仍然是一个字符串,而不是数组 n
var name=['what','the','…?']代码>
我希望name
是一个字符串数组,但是:
typeof name
显示string
而不是Array
- 列出
name
变量将打印字符串而不是数组
name.length
是13
而不是3
- 写入
name=name.split(',')
按预期返回一个数组[“what”,“the”,“…?”]
,但name
仍然是一个字符串,而不是数组
name
是唯一一个这样的变量名,或者至少我找不到另一个变量名
这只是一个控制台怪癖,一个JavaScript引擎错误,还是什么
注意:上述情况发生在Chrome和Firefox上。IE Edge出人意料地按预期工作(typeof name
isArray
等等)。未在其他浏览器上测试。是一个全局值,是DOM中的字符串
请注意,您可以通过在函数作用域中声明变量来绕过它:
(函数(){
变量名=['foo','bar'];
console.log(名称类型);
})();代码>尝试使用名称
以外的变量名称。那么,为什么在边缘这不会发生?!!实际上,默认的窗口.name
似乎是一个带有setter的属性,该setter可以将分配给它的任何值转换为字符串。如果您删除window.name
,然后重试,您将获得预期的数组@DanielA.White请更新您的答案以包含此内容。谢谢:)