请问js对象属性值为什么用数组也可以访问

请问js对象属性值为什么用数组也可以访问

2013-10-18 13:58 xiaosage86  |  浏览 1571 次
var obj = {
 name:'lily',
 year:'20'

}
alert(obj.year);
alert(obj['year']);

这两种都能访问到year的值。难道对象和数组没区别?
2013-10-18 14:09 提问者采纳

两个都是获取对象值的方式。


第二个用变量名获取对象值的时候很有用。

1
2
3
4
5
6
7
8
9
var  obj = {
  name: 'lily' ,
  year: '20'
 
}
alert(obj.year);
var  y =  'year' ;
// 用变量获取
alert(obj[y]);
提问者评价
大家回答的都很好!采纳你了
评论  |  11  0

zhaoapk | 来自:芝麻团 | 十一级 采纳率69%

擅长: JavaScript Html/Css

为您推荐:

按默认排序 | 按时间排序

其他2条回答

2013-10-18 14:22 绛紫方糖  | 六级
对象的属性确实可以通过类似于通过访问数组的中括号形式进行访问。
原理上来讲,是js这样设计的,很多弱类型语言都是如此设计。
可是并不能理解为对象跟数组没区别,例如说,你可以使用Array类型方括号的形式访问Object类型数据的属性。但是反过来,不能使用Object的点号访问Array类型数据的内容。
在js里,Key对应Value的数据结构,其实都是Object类型的,Array类型的数据都是一维的,数字下标的数据集合。

另外,二楼给你举得例子是没问题的,非常实用,插一句,还有另一种情况
就是你要访问的key是有空格的,也可以使用这种方式,例如说 people['first name'],这种情况是没法使用点号进行访问的。

最后,一楼的那个理解完全是错误的,这跟JSON没任何关系
评论(15)  |  5  0
2013-11-12 19:00 Դo0Forever
回复 绛紫方糖: 做听你解释js引擎怎么解析obj[a]="string" 回复
2013-11-12 09:07 绛紫方糖
回复 源o0Forever:你是外行么????你这说出去不怕把人笑死??? 回复
2013-11-12 08:56 Դo0Forever
回复 绛紫方糖: obj[a]='123'在底层引擎编译的时候不是专程json格式的?js所有的容器不都是json?不管什么规范不所有代码都是string,只要看解释器怎么解析而已,扯这些有用吗?只是js的解释器能解析到第一种写法而已,我觉得我们争的没意思,这个和json肯定有关系,你不可否认这个obj是个对象吧,我没说表层的东西,底层解析的时候肯定转化为统一格式了,不信你调试console下 回复
2013-11-12 08:34 绛紫方糖
回复 源o0Forever:真服你了,自己都说了,json是String,还不明白这区别? 你直接用字面量表示法赋值,得到的变量是Object。要是json格式只是String,你进行赋值操作,只会把这个表示结构的字符串赋过去,没有解析、没有eval这样的操作,他只是个字符串,没法转变成相应语言的对象结构。你现在说说看,人家提这问题,跟JSON有啥关系,非往JSON上靠什么靠?? 回复
2013-11-12 08:21 绛紫方糖
回复 源o0Forever:不懂装懂确实很可怕。自己都写出Notation了,都不明白这个单词啥意思?还在这辩半天?你自己拿着这个问题去德问、知乎上去问去。你看会不会有人说这跟JSON有关系。这格式就是js的对象字面量语法格式。只是JSON跟他有关系,他跟JSON没有半点关系。你拿去问,有第二个技术过关的人认同你说法你再过来辩,要不然就省省吧 回复

123下一页>

2013-10-18 14:08 源o0Forever  | 六级
个人认为这个就是json格式的神奇,js是弱类型语言,不强调类型。json总的来说就是key-value模型的,一个key对应一个value。你的第二种用法并没用到数组特性,js并不强调这些。并不是[]内的都是数组,第二种写法个人的理解是,object这个对象中,year这个key对应的value。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值