JavaScript中,非数组的对象为什么也可以用Obj["Index"]来访问属性呢?

根据MDN的属性访问器可知:
对象可以使用 obj.propertyName / obj["propertyName"]来访问属性。

而数组的属性,可以通过下标来访问。(来源忘了,反正就是知道)
但我发现:对于非数组对象,也可以使用下标来访问对象的属性(尽管这个下标我也不知道是什么,就是乱写的),这是为什么呢?

var a = [],i = 0;

var obj={

    a:12,

    b:34.56,

    c:true,

    d:"hello",

    e:null,

    f:undefined,

    g:{}

};

   

for (a[i] in obj) {

  console.log("a[" + i + "]=" + a[i] + ",obj[" + i + "]=" + obj[a[i]]);

  i++;


输出如下:

a[0]=a,obj[0]=12
a[1]=b,obj[1]=34.56
a[2]=c,obj[2]=true
a[3]=d,obj[3]=hello
a[4]=e,obj[4]=null
a[5]=f,obj[5]=undefined
a[6]=g,obj[6]=[object Object]

函数式编程
浏览 765回答 4
4回答

慕的地10843

终于找到这个知识点的出处了,见这里对象属性索引在 JavaScript 1.0 中,你可以通过名称或序号访问一个属性。但是在 JavaScript 1.1 及之后版本中,如果你最初使用名称定义了一个属性,则你必须通过名称来访问它;而如果你最初使用序号来定义一个属性,则你必须通过索引来访问它。这个限制发生在你通过构造函数创建一个对象和它的属性(就象我们之前通过 Car 对象类型所做的那样)并且显式地定义了单独的属性(如 myCar.color = "red")之时。如果你最初使用索引定义了一个对象属性,例如 myCar[5] = "25",则你只可能通过 myCar[5] 引用它。这条规则的例外是从与HTML对应的对象,例如 forms 数组。对于这些数组的元素,你总是既可以通过其序号(依据其在文档中出现的顺序),也可以按照其名称(如果有的话)访问它。举例而言,如果文档中的第二个 <form> 标签有一个 NAME 属性且值为 "myForm",访问该 form 的方式可以是 document.forms[1],document.forms["myForm"]或 document.myForm。var myCar=new Object();myCar.make="Ford";myCar.model= "Mustang";myCar.year = 1969;myCar["hum"] = 100;console.log(myCar["0"]);console.log(myCar["1"]);console.log(myCar["2"]);console.log(myCar["hum"]);console.log(myCar.hum);

30秒到达战场

访问对象的属性的方法有两种:Obj.attrObj[attr]有时候第一种是没办法执行的,我举个栗子:所以,提供了第二种方法来获取属性的值。

子衿沉夜

使用属性表达式访问属性,这句话?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript