obj[‘x‘]和obj[x]的区别

本文探讨了JavaScript对象的属性名类型,指出属性名可以是字符串或Symbol,但在处理过程中,非字符串类型通常会被转化为字符串。在示例中,对象属性名不能是引用类型,如尝试使用对象作为属性名,实际会被转换为字符串。FOR-IN循环遍历对象时,只会得到字符串形式的属性名,并且无法遍历到Symbol类型的属性。此外,通过变量作为属性名访问对象属性时,会根据变量的值来查找对应的属性。
摘要由CSDN通过智能技术生成

对象数据类型:由零到多组键值对(属性名和属性值)组成的
属性名的类型
【说法一:属性名类型只能是字符串或者Symbol】
【说法二:属性名类型可以是任何基本类型值,处理中可以和字符串互通】

 但是属性名绝对不能是引用数据类型,如果设置引用类型,最后也是转换为字符串处理的

 

例子

let sy = Symbol('AA');
let x = {
 0: 0
};
let obj = {
 0: 12,
 true: 'xxx',
 null: 20
};
obj[sy] = '珠峰';
obj[x] = 100; //=> obj['[object Object]']=100 会把对象变为字符串作为属性名

for (let key in obj) {
// FOR IN遍历中获取的属性名都会变为字符串
// 并且无法迭代到属性名是SYMBOL类型的属性
console.log(key, typeof key);
}

let x = 20;
let obj = {
 x: 100,
 20:10
};
// 属性名肯定得是一个值
// obj[x] 把x变量存储的值当做属性名, 获取对象的属性值 => obj[20] => undefined
// 如果有20:10这一项obj[x] => 10
// obj['x'] == obj.x 获取属性名为x的属性值 =>100 <=> obj.x 属性名为x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值