JavaScript中的名称索引 - 数组/对象?

3
我知道在JavaScript中,当使用索引名称将值推入时,它们基本上像对象一样工作。但我不明白以下行为 -
person = [];
person[0] = "Someone";
person["test"] = "SomeoneElse"

在控制台输入person会打印出["Someone"],我看不到关于person.test的任何信息。 person.test确实打印SomeoneElse。然而,如果我用console.log(person),就会得到["Someone", test: "SomeoneElse"]。 为了检查这是否有意义,我尝试创建了一个类似这样的结构 -

var experiment = ["Someone1", test1: "SomeoneElse1"]

而我得到的是
Uncaught SyntaxError: Unexpected token

我缺少什么?

提前感谢!


1
你应该使用对象来保存键值映射,而不是数组。 - Arun P Johny
1
使用对象代替数组。数组没有像这样的键。 - vaso123
我明白你的意思。数组在底层是对象,但我不明白person的console.log为什么没有出现。为什么实验没有被创建? - Swanidhi
3个回答

5
在控制台上输入person会输出["Someone"]。调用Array.prototype.toString格式化该输出时,只考虑其自身的"数组值",不包含其他属性。
然而,如果我使用console.log(person),则会得到["Someone", test: "SomeoneElse"]console.log输出对象的其他信息,包括自有属性。
因为这是虚假的语法错误;数组文字语法不允许键,因为数组值应该没有键。数组是一个数字索引值列表。仅仅因为底层实现使用对象(因为javascript中的每个东西都是某种类型的对象),才可以在数组上设置"非数字键"。但这并不意味着你正在正确地使用数组。
还可以查看JavaScript数组元素是否只是数组对象属性?

1
这是因为 JavaScript 中的数组本身也是一个对象,而对象可以有属性。因此,在具有元素的数组上设置属性是完全有效的。
第二个示例不起作用,因为 [...,...,...] 语法专门用于实例化数组及其元素。

0

在控制台中输入person就像执行alert(person);或将其值传递给变量或元素,因此更像是想要获取第一组可读取的值。这就是为什么它显示你内部的值,你可以尝试添加person[1] = *something;*,然后它会显示someone, something

console.log(person) - 它会显示对象内所有项目。更像是告知您内部的内容,就像IDE中的文本可视化器

var experiment = ["Someone1", test1: "SomeoneElse1"] - 这绝对会抛出异常,因为没有这样的初始化值格式,至少期望的是数组格式,如var experiment = ["Someone1", "SomeoneElse1"]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接