Javascript JS数组a[';1';]未给出错误
我声明了一个数组Javascript JS数组a[';1';]未给出错误,javascript,arrays,Javascript,Arrays,我声明了一个数组a=[1,2,3,4,5] 当我写a[1]时,它返回2,这非常好,但是当我写a['1']时,它也会给我2,而不是给出错误 我以为那里会出错。为什么它会这样呢???所有属性名称都是字符串 如果您传递一个数字,它将在用于查找属性值之前转换为字符串 console.log(1=='1')所有属性名称都是字符串 如果您传递一个数字,它将在用于查找属性值之前转换为字符串 console.log(1=='1')首先,数组也是一个对象,其属性名为0,1,2,….n 属性名称必须是字符串。这
a=[1,2,3,4,5]
当我写a[1]
时,它返回2,这非常好,但是当我写a['1']
时,它也会给我2,而不是给出错误
我以为那里会出错。为什么它会这样呢???所有属性名称都是字符串 如果您传递一个数字,它将在用于查找属性值之前转换为字符串
console.log(1=='1')代码>所有属性名称都是字符串
如果您传递一个数字,它将在用于查找属性值之前转换为字符串
console.log(1=='1')代码>首先,数组也是一个对象,其属性名为0,1,2,….n
属性名称必须是字符串。这意味着非字符串对象不能用作对象中的键。任何非字符串对象(包括数字)都通过toString
方法键入到字符串中。[]
首先,数组也是属性名为0,1,2,….n
属性名称必须是字符串。这意味着非字符串对象不能用作对象中的键。任何非字符串对象(包括数字)都通过toString
方法键入到字符串中。[]
在JS中,数组
基本上是一个对象
,因此其行为大部分类似于一个对象。在这种情况下,只要您不访问数组.length
或尝试迭代a
,这些都是等效的:
const a = {"0": foo};
const b = ["foo"];
这也会起作用:
const a = ["foo"];
a.bar = "baz";
console.log(a);
因此a[1]
和a['1']
是等价的,这正是我们所期望的。在JS中,数组基本上是一个对象,因此其行为基本上与对象类似。在这种情况下,只要您不访问数组.length
或尝试迭代a
,这些都是等效的:
const a = {"0": foo};
const b = ["foo"];
这也会起作用:
const a = ["foo"];
a.bar = "baz";
console.log(a);
所以a[1]
和a['1']
是等价的,这正是我们所期望的。但是数组的索引不是数值的吗?@Rajesh-不是。它们是字符串,就像其他任何属性一样。在数组中,名称为=
的属性是特殊大小写的(例如,通过长度
getter属性),但它们仍然是字符串。谢谢。我不知道这一点。:-)但是数组的索引不是数字的吗?@Rajesh-No。它们和其他属性一样是字符串。在数组中,名称为=
的属性是特殊大小写的(例如,通过长度
getter属性),但它们仍然是字符串。谢谢。我不知道这一点。:-)