Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请解释一下这个Javascript怪癖_Javascript_Arrays_String_Variables - Fatal编程技术网

请解释一下这个Javascript怪癖

请解释一下这个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

我认识的一个人正在学习编程,他偶然发现了这一点,让我感到困惑:

请打开一个控制台(Chrome/Firefox)并键入:
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
is
Array
等等)。未在其他浏览器上测试。

是一个全局值,是DOM中的字符串

请注意,您可以通过在函数作用域中声明变量来绕过它:

(函数(){
变量名=['foo','bar'];
console.log(名称类型);

})();尝试使用
名称
以外的变量名称。那么,为什么在边缘这不会发生?!!实际上,默认的
窗口.name
似乎是一个带有setter的属性,该setter可以将分配给它的任何值转换为字符串。如果您
删除window.name
,然后重试,您将获得预期的数组@DanielA.White请更新您的答案以包含此内容。谢谢:)