赞
踩
ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。
- const foo = 'bar';
- const baz = {foo};
- baz // {foo: "bar"}
-
- // 等同于
- const baz = {foo: foo};
上面代码中,变量foo
直接写在大括号里面。这时,属性名就是变量名, 属性值就是变量值。下面是另一个例子。
- function f(x, y) {
- return {x, y};
- }
-
- // 等同于
-
- function f(x, y) {
- return {x: x, y: y};
- }
-
- f(1, 2) // Object {x: 1, y: 2}
- const o = {
- method() {
- return "Hello!";
- }
- };
-
- // 等同于
-
- const o = {
- method: function() {
- return "Hello!";
- }
- };
下面是一个实际的例子。
- let birth = '2000/01/01';
-
- const Person = {
-
- name: '张三',
-
- //等同于birth: birth
- birth,
-
- // 等同于hello: function ()...
- hello() { console.log('我的名字是', this.name); }
-
- };
这种写法用于函数的返回值,将会非常方便。
- function getPoint() {
- const x = 1;
- const y = 10;
- return {x, y};
- }
-
- getPoint()
- // {x:1, y:10}
CommonJS 模块输出一组变量,就非常合适使用简洁写法。
- let ms = {};
-
- function getItem (key) {
- return key in ms ? ms[key] : null;
- }
-
- function setItem (key, value) {
- ms[key] = value;
- }
-
- function clear () {
- ms = {};
- }
-
- module.exports = { getItem, setItem, clear };
- // 等同于
- module.exports = {
- getItem: getItem,
- setItem: setItem,
- clear: clear
- };
JavaScript 定义对象的属性,有两种方法。
- // 方法一
- obj.foo = true;
-
- // 方法二
- obj['a' + 'bc'] = 123;
上面代码的方法一是直接用标识符作为属性名,方法二是用表达式作为属性名,这时要将表达式放在方括号之内。
但是,如果使用字面量方式定义对象(使用大括号),在 ES5 中只能使用方法一(标识符)定义属性。
- var obj = {
- foo: true,
- abc: 123
- };
ES6 允许字面量定义对象时,用方法二(表达式)作为对象的属性名,即把表达式放在方括号内。
- let propKey = 'foo';
-
- let obj = {
- [propKey]: true,
- ['a' + 'bc']: 123
- };
下面是另一个例子。
- let lastWord = 'last word';
-
- const a = {
- 'first word': 'hello',
- [lastWord]: 'world'
- };
-
- a['first word'] // "hello"
- a[lastWord] // "world"
- a['last word'] // "world"
表达式还可以用于定义方法名。
- let obj = {
- ['h' + 'ello']() {
- return 'hi';
- }
- };
-
- obj.hello() // hi
注意,属性名表达式与简洁表示法,不能同时使用,会报错。
- // 报错
- const foo = 'bar';
- const bar = 'abc';
- const baz = { [foo] };
-
- // 正确
- const foo = 'bar';
- const baz = { [foo]: 'abc'};
ES5 引入了Object.keys
方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。
- var obj = { foo: 'bar', baz: 42 };
- Object.keys(obj)
- // ["foo", "baz"]
S2017 引入了跟Object.keys
配套的Object.values
和Object.entries
,作为遍历一个对象的补充手段,供for...of
循环使用。
- let {keys, values, entries} = Object;
- let obj = { a: 1, b: 2, c: 3 };
-
- for (let key of keys(obj)) {
- console.log(key); // 'a', 'b', 'c'
- }
-
- for (let value of values(obj)) {
- console.log(value); // 1, 2, 3
- }
-
- for (let [key, value] of entries(obj)) {
- console.log([key, value]); // ['a', 1], ['b', 2], ['c', 3]
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。