首页 > 其他 > 详细

2021.04.27(对象的扩展 属性的简洁表示法、属性名表达式)

时间:2021-04-27 20:04:08      阅读:21      评论:0      收藏:0      [点我收藏+]

属性的简洁表示法

ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。

1.  const foo = ‘bar‘;
2.  const baz = {foo};
3.  baz // {foo: "bar"}
4.
5.  // 等同于
6.  const baz = {foo: foo};

上面代码中,变量 foo  直接写在大括号里面。这时,属性名就是变量名, 属性值就是变量值。下面
是另一个例子。

1.  function f(x, y) {
2.  return {x, y};
3.  }
4.
5.  // 等同于
6.
7.  function f(x, y) {
8.  return {x: x, y: y};
9.  }
10.
11.  f(1, 2) // Object {x: 1, y: 2}

除了属性简写,方法也可以简写。

1.  const o = {
2.  method() {
3.  return "Hello!";
4.  }
5.  };
6.
7.  // 等同于
8.
9.  const o = {
10.  method: function() {
11.  return "Hello!";
12.  }
13.  };

下面是一个实际的例子。

1.  let birth = ‘2000/01/01‘;
2.
3.  const Person = {
4.
5.  name: ‘张三‘,
6.
7.  //等同于birth: birth
8.  birth,
9.
10.  // 等同于hello: function ()...
11.  hello() { console.log(‘我的名字是‘, this.name); }
12.
13.  };

这种写法用于函数的返回值,将会非常方便。

1.  function getPoint() {
2.  const x = 1;
3.  const y = 10;
4.  return {x, y};
5.  }
6.
7.  getPoint()
8.  // {x:1, y:10}

简洁写法在打印对象时也很有用。

1.  let user = {
2.  name: ‘test‘
3.  };
4.
5.  let foo = {
6.  bar: ‘baz‘
7.  };
8.
9.  console.log(user, foo)
10.  // {name: "test"} {bar: "baz"}
11.  console.log({user, foo})
12.  // {user: {name: "test"}, foo: {bar: "baz"}}

上面代码中, console.log  直接输出 user  和 foo  两个对象时,就是两组键值对,可能会混
淆。把它们放在大括号里面输出,就变成了对象的简洁表示法,每组键值对前面会打印对象名,这样就
比较清晰了。

注意,简写的对象方法不能用作构造函数,会报错。

1.  const obj = {
2.  f() {
3.  this.foo = ‘bar‘;
4.  }
5.  };
6.
7.  new obj.f() // 报错

上面代码中, f  是一个简写的对象方法,所以 obj.f  不能当作构造函数使用。

属性名表达式

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

1.  // 方法一
2.  obj.foo = true;
3.
4.  // 方法二
5.  obj[‘a‘ + ‘bc‘] = 123;

上面代码的方法一是直接用标识符作为属性名,方法二是用表达式作为属性名,这时要将表达式放在方
括号之内。
但是,如果使用字面量方式定义对象(使用大括号),在 ES5 中只能使用方法一(标识符)定义属
性。

1.  var obj = {
2.  foo: true,
3.  abc: 123
4.  };

ES6 允许字面量定义对象时,用方法二(表达式)作为对象的属性名,即把表达式放在方括号内。

1.  let propKey = ‘foo‘;
2.
3.  let obj = {
4.  [propKey]: true,
5.  [‘a‘ + ‘bc‘]: 123
6.  };

表达式还可以用于定义方法名。

1.  let obj = {
2.  [‘h‘ + ‘ello‘]() {
3.  return ‘hi‘;
4.  }
5.  };
6.
7.  obj.hello() // hi

注意,属性名表达式与简洁表示法,不能同时使用,会报错。

1.  // 报错
2.  const foo = ‘bar‘;
3.  const bar = ‘abc‘;
4.  const baz = { [foo] };
5.
6.  // 正确
7.  const foo = ‘bar‘;
8.  const baz = { [foo]: ‘abc‘};

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

1.  const keyA = {a: 1};
2.  const keyB = {b: 2};
3.
4.  const myObject = {
5.  [keyA]: ‘valueA‘,
6.  [keyB]: ‘valueB‘
7.  };
8.
9.  myObject // Object {[object Object]: "valueB"}

上面代码中, [keyA]  和 [keyB]  得到的都是 [object Object]  ,所以 [keyB]  会
把 [keyA]  覆盖掉,而 myObject  最后只有一个 [object Object]  属性。

 

2021-04-27 14:48:55

2021.04.27(对象的扩展 属性的简洁表示法、属性名表达式)

原文:https://www.cnblogs.com/zhenggc99/p/14708956.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!