ES6中的对象与Symbol

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

对象赋值

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

let name="helloworld";
let skill= 'web';
var obj= {name,skill};
console.log(obj); //Object {name: "helloworld", skill: "web"}
对象Key值构建

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

let key='skill';
var obj={
[key]:'web'
}
console.log(obj.skill);
自定义对象方法

对象方法就是把兑现中的属性,用匿名函数的形式编程方法。这个在以前就有应用,我们这里只是简单的复习一下。

var obj={
add:function(a,b){
return a+b;
}
}
console.log(obj.add(1,2)); //3
object.is( ) 对象比较

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

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

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

var obj1 = {name:'hello'};
var obj2 = {name:'hello'};
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:'hello'};
var b={b:'world'};
var c={c:'web'};

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

记得学完了练习一下啊,因为基础知识的点是非常杂的,你不练习很快就忘记了。

Symbol在对象中的作用

我们通过场景应用的方式学习Symbol,它的意思是全局标记。我们先看看它的声明方式。

声明Symbol

我们先来回顾一下我们的数据类型,在最后在看看Symbol如何声明,并进行一个数据类型的判断。

var a = new String;
var b = new Number;
var c = new Boolean;
var d = new Array;
var e = new Object;
var f= Symbol();
console.log(typeof(d));

Symbol的打印
我们先声明一个Symbol,然后我们在控制台输出一下。

var g = Symbol('Hello');
console.log(g);
console.log(g.toString());

这时候我们仔细看控制台是有区别的,没有toString的是红字,toString的是黑字。

Symbol在对象中的应用

看一下如何用Symbol构建对象的Key,并调用和赋值。

var XXX = Symbol();
var obj={
[name]:'Hello'
}
console.log(obj[name]);
obj[name]='web';
console.log(obj[name]);

Symbol对象元素的保护作用

在对象中有很多值,但是循环输出时,并不希望全部输出,那我们就可以使用Symbol进行保护。

没有进行保护的写法:

var obj={name:'GanPing',skill:'web',age:20};

for (let item in obj){
console.log(obj[item]);
}

现在我不想别人知道我的年龄,这时候我就可以使用Symbol来进行循环保护。

let obj={name:'GanPing',skill:'web'};
let age=Symbol();
obj[age]=21;
for (let item in obj){
console.log(obj[item]);
}
console.log(obj);

(完)

分享到