【问题标题】:Can't assign an array to the global variable "name"无法将数组分配给全局变量“名称”
【发布时间】:2011-10-23 07:54:50
【问题描述】:

这非常令人沮丧,尤其是考虑到它的简单性。简单的javascript:

<script type="text/javascript">

var name = new Array("cat","dog");

document.write(name[1]);

</script>

此脚本打印:“a”(如“cat”中的“a”...aka name[0][1]...)。

然而,当我将其更改为 document.write(name) 时,它会打印整个数组(即“cat,dog”)。看在上帝的份上,为什么这个简单的数组无法打印整个字符串(应该是“狗”)?!

【问题讨论】:

  • jsfiddle.net/nPMYm你用的是什么浏览器?
  • 之前使用的是 Chrome,但 Rob 将其钉在了下面。被诅咒的预命名变量!

标签: javascript arrays


【解决方案1】:

全局变量name引用现有的window.name属性,用于设置浏览器窗口的名称。它将分配给它的任何值转换为字符串:

window.name = [1, 2, 3];
console.log(typeof window.name, window.name);

如果您将变量名称更改为例如names 会按预期进行。

在函数范围内使用name 当然可以正常工作。

【讨论】:

  • 这仅在某些浏览器中吗?它在 Firefox 中运行良好:jsfiddle.net/nPMYm/1 edit: 在 Chrome 中似乎失败了。
  • 天哪。他完全正确。干得好,罗伯!您已经为自己赢得了一些美味的布朗尼积分。不要在一个地方使用它们!谢谢!
  • @the_red_baron:另一种解决方案是将代码包装在即时函数(function(){ /* your code here */}()); 中。然后变量是该函数的本地变量。
  • @Felix Kling,我正在 Chrome 中尝试。在 Firefox 中,除非您将其实际分配给 window.name,否则它不会这样做。
  • 这是正确的答案,但是故事的寓意不应该是“使用闭包”而不是“尽量记住不要调用您的变量中的任何一组关键字”?
【解决方案2】:

你应该改用这个:

var name = ["cat", "dog"];
document.write(name[1]);

【讨论】:

  • 没错,只要他没有在任何地方为名为“Array”的变量分配任何东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 2016-06-25
  • 2017-06-25
  • 1970-01-01
相关资源
最近更新 更多