【问题标题】:Javascript multidimensional array printing single lettersJavascript多维数组打印单个字母
【发布时间】:2018-03-12 11:39:30
【问题描述】:

我在一个数组中有一个数组,不知何故它不能将不同的值识别为单独的,所以如果我尝试打印 2nd 值,它会打印出 2 nd 第一个值的字母。

var name = ["John", "Alex"];
var food = ['pizza', 'banana', "cheese", ["bmw", "tesla"], name];
document.write(food[4][1]);

数组['bmw', 'tesla'] 工作正常,它的名称数组表现得很奇怪。

food[4][0] outputs J (from John)

food[4][5] outputs A (from Alex).

【问题讨论】:

  • 我试过了,效果很好。最好尝试检查您的数组声明。您可以将 name 声明为字符串而不是数组(因为这是 food[4][5] 等于 A 的唯一可能原因)或者因为您在 Javascript 中使用了保留字
  • 从“名称”更改为其他修复了它。但是你所说的数组声明是什么意思?如果它有方括号,它被声明为数组,对吗?在php中你可以做array(),我在这里试过但没有用。我还能如何声明一个数组?谢谢

标签: javascript arrays multidimensional-array


【解决方案1】:

这取决于您在哪里运行 var name = ["John", "Alex"]; 语句。

如果你把它放到一个函数中,那么它就会像你期望的那样工作。

但是如果您在浏览器的控制台中运行它,那么它会在全局范围内执行。在global scope 中声明的变量是properties of the global window 对象。但是window 对象已经有一个名为name 的属性,并且它的类型不能更改。如果你给它分配一个不是字符串的值,its method toString() is used to convert it to a string

这就是为什么声明:

var name = ["John", "Alex"];

window.name 分配一个新值,由于其类型无法更改,数组["John", "Alex"] 被转换为字符串"John,Alex" 并分配给window.name

为变量使用不同的名称(names,f.e.),即使在全局上下文中,它也会按照您的预期工作。

【讨论】:

  • 谢谢,解决了。并感谢您的解释,这有助于更多!
【解决方案2】:

您还应该避免使用 JavaScript 内置对象、属性和方法的名称:

据我了解,您应该避免使用 name 关键字,因为它是保留的。尝试使用names 它应该可以工作。

【讨论】:

  • 不是真正的保留字——更像是浏览器中的预定义标识符。 axiac 回答它。
【解决方案3】:

那是因为 food[4] 不是数组而是字符串 "John,Alex"

food[4].split(',')[0] outputs "John"
food[4].split(',')[1] outputs Alex

【讨论】:

  • 为什么它不是对另一个数组的引用?
  • 因为 food[4] 是字符串类型而不是数组。因此,如果你做 food[4][0] 它会在字符串的零位置输出字母。通过使用 split 命令,你实际上创建了一个可以使用元素的数组。
  • 问题是为什么当它被定义为一个数组时它是一个字符串。这是一个非常特殊的问题,与 var s 如何在浏览器的全局范围内工作以及使用命名为现有 window 属性的变量的巧合有关。 axiac 的回答很到位,你应该读一下
  • 你确实是对的。谢谢,我完全错过了......
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 2016-11-28
  • 2012-03-15
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多