Javascript 为什么我可以用[1]而不是[1]创建属性?

Javascript 为什么我可以用[1]而不是[1]创建属性?,javascript,Javascript,为什么我可以创建一个属性:o[4] 但不是这样:o[five] varo={one:“one”,true:“two”,three:“three”}; o[4]=“四”; 控制台日志(o); o[five]=“五”; 控制台日志(o)如果您在php tester周围玩,而不是在这里玩,可能会更好 但是你可以这样做 o.five = "five"; 而不是 o[five] = "five"; varo={one:“one”,true:“two”,thr

为什么我可以创建一个属性:
o[4]

但不是这样:
o[five]

varo={one:“one”,true:“two”,three:“three”};
o[4]=“四”;
控制台日志(o);
o[five]=“五”;

控制台日志(o)如果您在php tester周围玩,而不是在这里玩,可能会更好

但是你可以这样做

o.five = "five";
而不是

o[five] = "five";
varo={one:“one”,true:“two”,three:“three”};
o[4]=“四”;
控制台日志(o);
//o[five]=“五”;
o、 五=“五”;
o['six']=“六”;

控制台日志(o)
1
是一个文本值
five
(您使用它的方式)是一个标识符

如果
o[five]
是声明和初始化的标识符,则可以执行
o[five]
来创建属性;它的值将被查找并用作属性名(可能首先转换为字符串)

如果未声明和初始化
o[five]
,则不能使用
o[five]
创建属性,因为当您尝试读取未声明/未初始化标识符的值时,这是一个错误

相反,由于
1
是一个文本值,因此您可以始终以这种方式使用它

如果打算创建名为
five
的属性,则可以使用
o[“five”]
,但如果要使用的名称是有效的标识符名称,则通常会使用
o.five
。但是,例如,
+
是一个有效的属性名,但不是一个有效的标识符名,因此如果需要创建一个名为
+
的属性,您可以使用
o[“+”]

一些例子:

five
未声明且未初始化:

const o={};

o[five]=“five”//参考错误
o[“五”]=“五”
o.five=“五”但从不
o[five]=“five”
,仅当five是一个变量并存储属性名时,
[five]
涉及对名为“five”的变量的引用,而您尚未定义该变量。没有名为
five
的变量,可以尝试使用
“five”
1。初始化是否意味着成功为标识符|变量赋值?2.我的想法正确吗:只有当密钥是有效标识符时,点方法才能生成属性;括号中不是这种情况。@tonitone110-1。是的,尽管“成功”并不是真正意义上的成功2.正当点表示法仅允许您使用根据规范()中的“标识符名称”语法有效的属性名称。例如,要成为有效的标识符名称,它必须以字母或其他非数字标识符字符开头。因此
test1
是一个有效的标识符名称,但
1test
不是(因为它以数字开头)。但是通过使用字符串的方括号表示法,您可以创建基本上具有任何名称的属性。