js对象中取属性值 (.) 和 [ ] 的区别

今天在写js的过程中遇到这么一个问题,取一个对象的属性值,通过 obj.keys 怎么都取不出来,但是用 obj[keys] 就可以。(这个是模拟的数据)

var data = {
  water1: '矿泉水',
  water2: '可乐',
  water3: '雪碧'
}

for(var i = 0; i < 3; i++){
  var water = 'water' + (i + 1)
  console.log(data['water' + (i + 1)) //'矿泉水','可乐','雪碧'
  console.log(data.water) //undefined 
}

后来通过查资料明白,这里的 data.water 输出 undefined,是因为 object 使用 (.) 获取属性值时,这里的 water 不是使用的变量 water,而是直接去 data 对象中寻找名为 water 的 key,没有找到,所以报 undefined。

相同点:都可以获取到 obj 的属性值

不同点:

  • [ ] 运算符可以使用字符串变量的内容作为属性名,点运算符不能。
  • [ ] 运算符可以用纯数字作为属性名,点运算符不能。
  • [ ] 运算符可以用js关键字和保留字作为属性名,点运算符不能。
var data = {
  water: 'woo',
  2: 'ww',
  3: 'opp'
}

var ss = 'water'
console.log(data[ss]) //woo
console.log(data.ss) //undefined

这里由于变量的 var 声明的变量会导致变量的提升,所以会报 undefined

var data = {
  water: 'woo',
  2: 'ww',
  3: 'oop'
}

var ss = 'water'
console.log(data[3]) //oop
console.log(data.3)
//Uncaught SyntaxError: missing ) after argument list

总结:对于一般的常量就使用 (.) 运算符;对于其他的使用 [ ] 运算符。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值