请解释这个Javascript怪癖

Teo*_*ndu 3 javascript arrays string variables

我认识的人只是学习编程而且偶然发现了这一点让我感到困惑:

请打开控制台(Chrome/Firefox)并输入: var name = ['what', 'the', '...?'];

我希望name是一个字符串数组,但是:

  • typeof name显示string而不是Array
  • 列出name变量会打印字符串而不是数组
  • name.length13不是3
  • 写入按预期name = name.split(',')返回一个数组["what", "the", "...?"],但name仍然是string一个数组,而不是一个数组

name 是唯一似乎以这种方式行事的变量名,或者至少我找不到另一个变量名.

这只是一个控制台怪癖,一个JavaScript引擎错误,还是什么?

注意:上述操作发生在Chrome和Firefox上.IE Edge令人惊讶地按预期工作(typeof name就是Array这样).未在其他浏览器上测试过.

Dan*_*ite 6

window.name 是一个全局,它是DOM中的一个字符串.

请注意,您可以通过在函数范围内声明变量来解决它:

(function() {
   var name = ['foo', 'bar'];
   console.log(typeof name);
})();
Run Code Online (Sandbox Code Playgroud)

至于为什么IE/Edge不同 - 它们对规范的解释可能多年来一直如此.现在改变它将是一个突破性的变化.