Object.is()
这个方法与===很像,但同时也考虑到了边界情形。这个方法必须接收两个参数:
主要用于判断两个对象是否相等,但和’===有一些不一样的地方
console.log(Object.is(true, 1)); // false
console.log(Object.is({}, {})); // false
console.log(Object.is("2", 2)); // false
// 正确的 0、-0、+0 相等/不等判定
console.log(Object.is(+0, -0)); // false
console.log(Object.is(+0, 0)); // true
console.log(Object.is(-0, 0)); // false
// 正确的 NaN 相等判定
console.log(Object.is(NaN, NaN)); // true
//要检查超过两个值,递归地利用相等性传递即可:
function recursivelyCheckEqual(num, ...test) {
return Object.is(num, test[0]) &&
(test.length < 2 || recursivelyCheckEqual(...test));
}
Object.assign()
ECMAScript 6 专门为合并对象提供了 Object.assign()方法。这个方法接收一个目标对象和一个
或多个源对象作为参数
const student={
name:'syz',
age:18,
aaa:'1111'
}
const student1={
name:'zs',
age:36,
bbb:'1111'
}
//后面的会覆盖前面的重名属性和方法
console.log(Object.assign(student,student1));//{ name: 'zs', age: 36, aaa: '1111', bbb: '1111' }
- 注意:后面传入的参数会覆盖前面的重名属性和方法
Object.keys()
获取对象所有的键,返回一个数组
let obj={
a:"1",
cities:["a","b","c"]
}
console.log(Object.keys(obj));//[ 'a', 'cities' ]
Object.values()
获取对象的所有值,返回一个数组
let obj1={
a:"1",
cities:["a","b","c"]
}
console.log(Object.values(obj1));//[ '1', [ 'a', 'b', 'c' ] ]
Object.entries()
获取对象的键和值,返回一个数组
let obj1={
a:"1",
cities:["a","b","c"]
}
console.log(Object.entries(obj1))//[ [ 'a', '1' ], [ 'cities', [ 'a', 'b', 'c' ] ] ]
Object.setPrototypeOf()
为一个对象设置它的原型对象
const person = {
dosth:"play lol"
}
const animal={
attr:['eat','drink']
}
Object.setPrototypeOf(person,animal)
console.log(person.__proto__.attr[0]);//eat
Object.getOwnPropertyDescriptors()
获取对象的描述信息,返回一个数组
let obj1={
a:"1",
cities:["a","b","c"]
}
console.log(Object.getOwnPropertyDescriptors(obj1));
//输出:
/*
{
a: { value: '1', writable: true, enumerable: true, configurable: true },
cities: {
value: [ 'a', 'b', 'c' ],//值
writable: true,//该值是否可以被修改
enumerable: true,//是否可以被枚举
configurable: true,//是否可以被删除
}
}
*/
Object.defineProperty()
创建对象的值和描述信息的函数(传一个值)
const student = {
name: "小明",
age: 19,
[Symbol("level")]: "优秀",
};
Object.defineProperty(student, "gender", {
value: "男", //值
writable: true, //是否可修改的
enumerable: true, //是否可以枚举的
configurable: true, //是否可以删除的
});
console.log(student)//{ name: '小明', age: 19, gender: '男', [Symbol(level)]: '优秀' }
Object.defineProperties()
创建对象的值和描述信息的函数(传多个值)
const student = {
name: "小明",
age: 19,
[Symbol("level")]: "优秀",
};
Object.defineProperties(student,{
id:{
value:'001',
writable: true, //是否可修改的
enumerable: true, //是否可以枚举的
},
sex:{
value:'男',
writable: true, //是否可修改的
enumerable: true, //是否可以枚举的
configurable: true, //是否可以删除的
}
})
console.log(student)//{name: '小明', age: 19, id: '001', sex: '男', Symbol(level): '优秀'}
- 如果用上述方法创建,描述对象的属性值默认为false
确定不点个赞再走嘛?