大前端时代让前端飞程序员

ES6小册子--对象

2018-04-18  本文已影响4人  魏永_Owen_Wei

本篇是ES6小册子的第三篇文章,先感谢所有订阅的朋友,我会尽可能的挤出时间完成文章。这一章的主题是对象,对象是JavaScript语言的基础数据类型,相信没有前端开发者没有用过对象。今天我来和大家介绍一下ES6中对象的新特性。

1.属性初始值的简写

ES5中使用构造函数生成对象的方式应该是这样:

var genObj = function(name,num){
  return {
    name: name,
    num: num
  }
}

ES6中可以只初始化属性名称,JavaScript引擎会去寻找同名的变量。就拿上面的例子来说,可以在ES6中写成:

let genObj = function (name, num){
  return {name,num}
}

另外函数可以不写成键值对的形式。

let obj = {
  test: "123",
  testFunc(){console.log("")}
}

相等于:

let obj = {
  test: "123",
  testFunc: function(){console.log("")}
}

2.可计算属性名

之前对象的键值只能是常量,ES6支持变量作为键值。我们举个栗子就好明白了。

let test = "hello";
let obj = {
  [test]:"11222"
}
console.log(obj[test])
console.log(obj["hello"]);
image

所以使用变量和常量都是可以获取到value的值。其实这里也只是做了一个转换,真正的键值还是变量的值。


image

3.Object.is()

Object.is()方法接受两个参数,判断两个参数的类型和值是否都相等。作用和恒等<code>===</code>很类似。不同的地方有两点:

1.我们都知道在JavaScript中<code>NaN</code>是和任何值都不等的,包括其自身。但是Object.is(NaN, NaN)返回的值为true。
2.JavaScript判断正零<code>+0</code> 和 负零 <code>-0</code>是恒等的,即 <code>+0 === -0</code>。但是Object.is(+0, -0)返回的值为false。

使用恒等判断还是使用Object.is()判断取决于实际场景和个人喜好,不一定是Object.is()就一定优于恒等。

4.Object.assign()

这是一种可以复制对象属性到另一个对象的方法,专业的词叫做混合Mixin。类似的函数早就出现在了各种JavaScript库中,ES6中新增了官方版本的函数而已。
该函数可以接受任意多的源对象,第一个参数是待接收属性的对象,之后的参数都是提供属性的源对象。我们举个栗子演示一下:

let assignObj = {};
let objA = {a:1,b:2,c:3};
let objB = {c:1,d:3,e:6}
Object.assign(assignObj,objA,objB);
console.log(assignObj);
image

有一点不知道大家注意到没有,objA和objB都有属性c。但是最终整合到assignObj对象上的是objB的c属性,这说明后面的属性会覆盖已有的相同属性。

ES6中对对象还有一些改进比如定义了枚举自有属性的顺序,提供了改变对象原型的方法 setPrototypeof() 等等。总的来说这次对对象的改动不是很大,有兴趣的同学可以继续研究。

ES6小册子第三章到这里就结束了,欢迎你给我留言。如果你觉得文章还不错,欢迎推荐给你的朋友。

ES6小册子帮你用最短的时间掌握前端开发的核心语言~

上一篇下一篇

猜你喜欢

热点阅读