为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

函数式编程 2019-03-29 23:19:00
根据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]=12a[1]=b,obj[1]=34.56a[2]=c,obj[2]=truea[3]=d,obj[3]=helloa[4]=e,obj[4]=nulla[5]=f,obj[5]=undefineda[6]=g,obj[6]=[object Object]
查看完整描述

4 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

终于找到这个知识点的出处了,见这里

对象属性索引

在 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);


查看完整回答
反对 回复 2019-04-02
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

访问对象的属性的方法有两种:

  1. Obj.attr

  2. Obj[attr]

有时候第一种是没办法执行的,我举个栗子:

https://img1.sycdn.imooc.com//5ca2c59a0001a0b108000223.jpg

所以,提供了第二种方法来获取属性的值。

查看完整回答
反对 回复 2019-04-02
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

使用属性表达式访问属性,这句话?


查看完整回答
反对 回复 2019-04-02
  • 4 回答
  • 0 关注
  • 764 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信