关于Object的一些知识点

169 阅读1分钟

Object.defineProperty() 定义属性

通过Object.defineProperty() 可以为对象创建属性,如下所示

let person = {};
Object.defineProperty(person,'name',{
    value: 'jack',
    writable:false //是否可以改变,默认为false
    configurable:false, //是否能够被删除
    enumerable:false //是否能被遍历
})
Object.keys(person).forEach(function(key) {
    console.log(key); //取不到值
})
delete person.name; //无法删除属性
person.name="小白";
console.log(person); //因为上边的writable为false,所以输出的值为小白

此外还提供了了set、get方法

let person = {};
let temp = null;
Object.defineProperty(person, 'name', {
    get: function() {
        return temp + '你知道吗?';
    },
    set: function(val) {
        temp = val + '是谁';
    }
})
person.name = "小白";
console.log(person.name); //输出 小白是谁你知道吗?

Object.preventExtensions() 禁止扩展

let person = {};
Object.preventExtensions(persion);
person.name="小白";
console.log(person.name); //undefined

Object.seal()会创建一个密封的对象

Object.freeze()会创建一个冻结对象,这个方法实际上会在一个现有对象上调用Object.seal(),并把所有现有属性标记为writable: false,这样就无法修改它们的值

Object.keys()

Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组。

var person = {
    name:'xiaowang',
    age:18,
    gender:'男'
}
Object.keys(person).forEach(function(key) {
    console.log(key);  //name age gender
})
var person = {
    name:'xiaowang',
    age:18,
    gender:'男'
}
Object.keys(person).map(function(key,value) {
    console.log(key + ':' + value);
})

Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const returnedTarget = Object.assign(target, source);

console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }

console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }