前端基础——特性与对象扩展

特性


value:

可修改性
writable: boolean

可枚举性
enumerable: boolean

可配置性
configurible: boolean

特性方法
get()
set()

定义特性的方法:
Object.defineProperty()

	var obj = {
		color: "red",
		width: 100
	}
		Object.defineProperty(obj, "color", {
		// 修改可枚举性
		enumerable: false
	})

定义多个特性的方法:
Object.defineProperties()

	var obj = {
		color: "red",
		num: 100
	}

	// 设置color和num的特性
	Object.defineProperties(obj, {
		color: {
			value: "blue",
			writable: false,
			enumerable: false 
		},
		num: {
			get: function() {
				return this._num;
			},
			set: function(value) {
				this._num = value;
			},
			enumerable: false,
			// 一旦设置了特性方法(get或者是set)将不能再次设置 value 和 writable
			// writable: false
			value: 300
		}
	})

对象扩展

Object.preventExtensions(obj)
取消了对象的可拓展性之后: 不能添加属性,但是仍然可以删除属性,修改属性值。

查看对象的可拓展性:
Object.isExtensible() 返回 true| false

Object.seal(obj)
当封闭对象之后, 对象可以被访问,可以修改属性, 不可以新增属性、不可以删除属性。

查看对象是否被封闭:
Object.isSealed(obj) 返回true|false

Object.freeze(obj)
当对象冻结之后, 可以被访问, 不可以新增、 不可以删除、 不可以修改。

查看对象是否冻结:
Object.isFrozen(obj) 返回 true | false

对象的深复制(深拷贝)

第一种方法:

    var obj = {
      name: 'lisi',
      age: 20,
      dosomething() {
        console.log('hello');
      }
    }
    var obj1 = JSON.parse(JSON.stringify(obj));
    console.log(obj === obj1); // false

第二种方法:

    var obj = {
      name: 'lisi',
      age: 20,
      dosomething() {
        console.log('hello');
      }
    }
    var obj1 = {};
    Object.assign(obj1, obj);
    console.log(obj === obj1); // false

判断空对象的方法

    var obj = {};
    console.log(Object.keys(obj).length === 0); // true

猜你喜欢

转载自blog.csdn.net/qq_42303885/article/details/85652034