对象对于Javascript是非常重要的。在ES6中对象有了很多新特性。

对象的函数解构

我们在前后端分离时,后端经常返回来JSON格式的数据,前端的美好愿望是直接把这个JSON格式数据当作参数,传递到函数内部进行处理。ES6就为我们提供了这样的解构赋值。

let json = {
    a:'js',
    b:'ps'
}
function fun({a,b='web'}){   //给b设置默认值
    console.log(a,b);
}
fun(json);

是不是感觉方便了很多,我们再也不用一个个传递参数了。

数组的函数解构

函数能解构JSON,那解构我们的数组就更不在话下了,我们看下边的代码。我们声明一个数组,然后写一个方法,最后用…进行解构赋值。

let arr = ['js','css','html'];
function fun(a,b,c){
    console.log(a,b,c);
}

fun(...arr);

in的用法

in是用来判断对象或者数组中是否存在某个值的。我们先来看一下用in如何判断对象里是否有某个值。

对象判断

let obj={
    a:'js',
    b:'css'
}
console.log('a' in obj);  //true

数组判断

先来看一下ES5判断的弊端,以前会使用length属性进行判断,为0表示没有数组元素。但是这并不准确,或者说真实开发中有弊端。

let arr=[,,,,,];
console.log(arr.length); //5

上边的代码输出了5,但是数组中其实全是空值,这就是一个坑啊。那用ES6的in就可以解决这个问题。

let arr=[,,,,,];
console.log(0 in arr); //false

let arr1=['js','css'];
console.log(0 in arr1);  // true

注意:这里的0指的是数组下标位置是否为空。

对象赋值

ES6允许把声明的变量直接赋值给对象,我们看下面的例子。

let name="coder";
let skill= 'js';
var obj= {name,skill};
console.log(obj);

对象Key值构建

有时候我们会在后台取出key值,而不是我们前台定义好的,这时候我们如何构建我们的key值那。比如我们在后台取了一个key值,然后可以用[ ]的形式,进行对象的构建。

let key='skill';
var obj={
    [key]:'web'
}
console.log(obj.skill);

Object.is( ) 对象比较

对象的比较方法,以前进行对象值的比较,经常使用===来判断,比如下面的代码:

var obj1 = {name:'js'};
var obj2 = {name:'js'};
console.log(obj1.name === obj2.name);//true

那ES6为我们提供了is方法进行对比。

var obj1 = {name:'js'};
var obj2 = {name:'js'};
console.log(obj1.name === obj2.name);//true
console.log(Object.is(obj1.name,obj2.name)); //true

区分=== 和 is方法的区别是什么,看下面的代码输出结果。

console.log(+0 === -0);  //true
console.log(NaN === NaN ); //false
console.log(Object.is(+0,-0)); //false
console.log(Object.is(NaN,NaN)); //true

这里,===为同值相等,is()为严格相等。

Object.assign( )合并对象

操作数组时我们经常使用数组合并,那对象也有合并方法,那就是assgin( )。看一下啊具体的用法。

var a={a:'js'};
var b={b:'css'};
var c={c:'web'};

let d=Object.assign(a,b,c)
console.log(d);