计算属性名 ES6

26 篇文章 0 订阅
2 篇文章 0 订阅

MDN解释:

从ECMAScript 2015开始,对象初始化语法开始支持计算属性名。其允许在[]中放入表达式,计算结果可以当做属性名。这种用法和用方括号访问属性非常类似,也许你已经用来读取和设置属性了。现在同样的语法也可以用于对象字面值了:

// Computed property names (ES6)
var i = 0;
var a = {
  ["foo" + ++i]: i,
  ["foo" + ++i]: i,
  ["foo" + ++i]: i
};

console.log(a.foo1); // 1
console.log(a.foo2); // 2
console.log(a.foo3); // 3

var param = 'size';
var config = {
  [param]: 12,
  ["mobile" + param.charAt(0).toUpperCase() + param.slice(1)]: 4
};

console.log(config); // { size: 12, mobileSize: 4 }

ECMAScript 6入门解释:

js定义对象的属性,有两种方法

//方法一
obj.foo = true;
//方法二
obj['a' + 'b'] = 123

es5只能使用方法一(标识符)定义属性。
es6允许字面量定义对象时用方法二,即把表达式放在方括号内。
例子:
1、比如在react中修改state中的属性,就直接使用了计算属性名的方法

this.state = {
	isGoing: true,
	number: 3
}
handleChange(e){
	const name = e.target.name
	const value = name == 'isGoing' ? 'xxx': 'xxxxxxxxx'
	// name可能为isGoging或者number
	...
	this.setState = {
	 [name]: value
	}
}

2、

let lastword = 'last word';
const a = {
	'first word': 'hello',
	[lastword]: 'world'
};
a['first word'] // 'hello'
a['last word'] // 'word'
a[lastword]  // 'word'

3、注意,属性名表达式如果是一个对象,默认情况下会自动将对象转换为字符串[object Object],这一点要特别小心

const keyA = {a: 1};
const keyB = {b: 2};

const myObject = {
  [keyA]: 'valueA',
  [keyB]: 'valueB'
};

myObject // Object {[object Object]: "valueB"}

参考资料:ES6入门(阮一峰)MDN

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值