对象赋值
let name="aaa";
let skill= 'web';
var obj= {name,skill};
console.log(obj); //Object {name: "aaa", skill: "web"}
对象Key值构建
let key='qqq';
var obj={
[key]:'nicai'
}
console.log(obj.qqq);//nicai
自定义对象方法
对象方法就是把兑现中的属性,用匿名函数的形式编程方法。
var obj={
add:function(a,b){
return a+b;
}
}
console.log(obj.add(1,2)); //3
Object.is( ) 对象比较
var obj1 = {name:'sunny'};
var obj2 = {name:'sunny'};
console.log(obj1.name === obj2.name);//true
console.log(Object.is(obj1.name,obj2.name)); //true
区分'===' 和 'is'方法的区别 (===为同值相等,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
Symbol
声明Symbol
Symbol函数前不能使用new命令,否则会报错。这是因为生成的Symbol是一个原始类型的值,不是对象
var num= Symbol();
console.log(typeof(num));//symbol
var g = Symbol('xuexi');
console.log(g);//红色字体
console.log(g.toString());//蓝色字体
Symbol在对象中的应用
注意,Symbol值作为对象属性名时,不能用点运算符。
var a = {};
var age = Symbol();
a.age = 'lili';
a[age] = 'lucy';
console.log(a.age,a[age]); //lili lucy
看一下如何用Symbol构建对象的Key,并调用和赋值。
var aaa = Symbol();
var obj={
[aaa]:'hahaha'
}
console.log(obj[aaa]);//hahaha
obj[aaa]='wawawa';
console.log(obj[aaa]);//wawawa
for in遍历
如何改进,让m 的结果是 [{name: "a", number: 1},{name: "b", number: 2}]
let obj ={"a":1,"b":2}
let m = [];
for(let i in obj){
m.push({name: i, number: obj[i]})
}
console.log(m)// [{name: "a", number: 1},{name: "b", number: 2}]
Symbol对象元素的保护作用
var obj1 = {'name':'sunny','fun':'read','age':18}
for(let obj2 in obj1){
console.log(obj2)//name fun age
console.log(obj1[obj2])//sunny read 18
// 用Symbol来进行循环保护
var obj1 = {'name':'sunny','fun':'read'}
var age = Symbol();
obj1[age] = 18
for(let obj2 in obj1){
console.log(obj2)//name fun
console.log(obj1[obj2])//sunny read
}
console.log(obj1)//{name: "sunny", fun: "read", Symbol(): 18}}
Symbol.for(),Symbol.keyFor()
Symbol.for机制有点类似于单例模式,首先在全局中搜索有没有以该参数作为名称的Symbol值,如果有,就返回这个Symbol值,否则就新建并返回一个以该字符串为名称的Symbol值。和直接的Symbol就有点不同了。
var s1 = Symbol.for('foo');
var s2 = Symbol.for('foo');
s1 === s2 // true
Symbol.keyFor方法返回一个已登记的Symbol类型值的key。实质就是检测该Symbol是否已创建
var s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"
var s2 = Symbol("foo");
Symbol.keyFor(s2) // undefined
网友评论