【问题标题】:Please explain this Javascript quirk请解释这个 Javascript 怪癖
【发布时间】:2017-02-17 16:56:46
【问题描述】:

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

请打开控制台 (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 nameArray 等等)。未在其他浏览器上测试。

【问题讨论】:

标签: javascript arrays string variables


【解决方案1】:

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

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

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

至于为什么 IE/Edge 不同 - 这是他们对规范的解释,并且可能多年来一直如此。现在改变它将是一个重大的改变。

【讨论】:

  • 那么为什么在 Edge 中不会发生这种情况?!!
  • 实际上默认的window.name 似乎是一个带有setter 的属性,它可以将它分配的任何值转换为字符串。如果你 delete window.name 再试一次,你会得到一个预期的数组。 @DanielA.White 请更新您的答案以包含此内容。谢谢:)
猜你喜欢
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多