请解释这个Javascript怪癖

时间:2017-02-17 16:56:47

标签: javascript arrays string variables

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

请打开控制台(Chrome / Firefox)并输入:NOT DEFERRABLE

我希望var name = ['what', 'the', '...?'];是一个字符串数组,但是:

  • name显示typeof name而不是string
  • 列出Array变量打印字符串而不是数组
  • namename.length而不是13
  • 3按预期返回数组name = name.split(','),但["what", "the", "...?"]仍为name,而不是数组

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

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

注意:以上内容适用于Chrome和Firefox。 IE Edge令人惊讶地按预期工作(nametypeof name以及所有这些)。未在其他浏览器上测试过。

1 个答案:

答案 0 :(得分:6)

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

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



(function() {
   var name = ['foo', 'bar'];
   console.log(typeof name);
})();




至于IE / Edge为何与众不同 - 它对规范的解释很可能已经存在多年了。现在更改它将是一个重大变化。