2021/11/28 对象的新增方法、Symbol 类型和属性

新增方法:

1、object.is()类来解决"==="恒等的缺点

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

2、object.assign()方法合并指定对象至目标对象内部

(1).如果属性有相同,后面的源对象内容会覆盖之前的属性值;

(2).如果直接传非对象内容,会转换为对象;

(3).如果传入的是 undefined 和 null 会报错;

let obj1={
    name:"苏玮一",
    age:21
}
let obj2={
    name:"刘路",
    age:23
}
let obj3={
    set:"男"
}
//...传参,合并所有对象,返回给参数的目标对象
console.log(Object.assign(obj1,obj2,obj3));//{ name: '刘路', age: 23, set: '男' }
//第一个对象得到合并后的结果
console.log(obj1);

3、Object.getPrototypeOf()和 Object.setPrototypeof()方法

let obj={
    fn(){
        return 'fn';
    }
}
let obj2={
    fn(){
        return 'fn2';
    }
}
//以obj对象为原型
let f=Object.create(obj);
console.log(f.fn());
//检测obj是否是f的原型对象
console.log(Object.getPrototypeOf(f)===obj);//true
//输出原型对象的 fn
console.log(f.fn());

//设置f的原型为obj2
Object.setPrototypeOf(f,obj2);
console.log(Object.getPrototypeOf(f)===obj2);//true
console.log(f.fn());

4、super关键字,用于原型中方法的继承功能

let obj={
    fn(){
        return 'fn'
    }
}
let f={
    fn(){
        return super.fn()+" ex";
    }
}
//设置obj为f原型
Object.setPrototypeOf(f,obj);
console.log(f.fn());//fn ex

//可以设置f为原型
let h=Object.create(f);
console.log(h.fn());//fn ex

 Symbol类型:

//创建 Symobl 通过函数 Symbol()完整,可以传递参数,也可以为空
//注意,不支持new Symbol
let obj=Symbol();
console.log(obj);//Symbol()
console.log(typeof obj);//symbol类型

//在 Symbol()函数中参数,是对变量的描述,程序无法访问,只能日志打印
//为了输出测试时,便于区分
Symbol("s!");

//创建两个 Symobel 类型的变量,来验证他们独一无二的特性
//有没有参数,或参数是否相同都不恒等
//因为 Symbol 是唯一存在的
let s1=Symbol(),s2=Symbol();
console.log(s1===s2);//false

//Symobol 类型变量无法进行隐式转换,需要提前显示转换匹配的类型
//Symbol 类型无法隐式转换,可显式
let s=Symbol('s');
console.log(s.toString()+"变量");//Symbol(s)变量
console.log(String(s)+"变量");//Symbol(s)变量
console.log(!s);//false

 Symbol属性:

//重名的属性名不报错,被覆盖
let obj = {
    name : '苏玮一',
    name : '刘路'
    };
console.log(obj);//{ name: '刘路' }
    //拼装的属性名,也被覆盖
let x = 'name',y = 'name';
let obj = {
    ['user' + x] : '苏玮一',
    ['user' + y] : '刘路'
 };
console.log(obj);//{ username: '刘路' }


//Symbol 作为对象属性名
let x=Symbol(),y=Symbol();
let obj={
    [x]:"苏玮一",
    [y]:"刘路"
}
console.log(obj);//{ [Symbol()]: '苏玮一', [Symbol()]: '刘路' }
console.log(obj[x]);//苏玮一
console.log(obj[y]);//刘路

let fn=Symbol();
let obj={
    [fn](){
        return 'fn'
    }
}
console.log(obj[fn]());
上一篇:2021/11/28


下一篇:【报告分享】品牌全面出海时代,破解社交媒体营销密码-OneSight(附下载)