Object构造函数的属性
Object.length 值为1。
获取一个对象的长度
对象的长度不能用.length获取,用js原生的Object.key可以获取到
let obj = { name:'希希', age:'18', }; var arr = Object.keys(obj); console.log(arr); // ['name', 'age'] console.log(arr.length); //2
Object构造函数的方法
1、Object.assign()
通过复制一个或多个对象来创建一个新的对象。
Object.assign(target, ...sources)
参数:
target 目标对象
sources 源对象
返回值:
目标对象
示例:
var obj = { a:1 }; var copy = Object.assign({},obj); console.log(JSON.stringify(obj)); //{"a":1} console.log(JSON.stringify(copy)); //{"a":1} copy = Object.assign({b:2,c:3},obj); console.log(JSON.stringify(copy)); //{"b":2,"c":3,"a":1} console.log(JSON.stringify(obj)); //{"a":1} obj.a=4; console.log(JSON.stringify(obj)); //{"a":4} console.log(JSON.stringify(copy));//{"b":2,"c":3,"a":1}
针对深拷贝,需要使用其他方法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个指向对象的引用,它也只拷贝那个引用值。
var obj1 = { a:0,b:{ c:0 } }; var copy1 = Object.assign({}, obj1); console.log(JSON.stringify(copy1)); // {"a":0,"b":{"c":0}} console.log(JSON.stringify(obj1)); // {"a":0,"b":{"c":0}} obj1.b.c=1; console.log(JSON.stringify(obj1)); // {"a":0,"b":{"c":1}} console.log(JSON.stringify(copy1)); // {"a":0,"b":{"c":1}} obj1.a=1; console.log(JSON.stringify(obj1)); // {"a":1,"b":{"c":1}} console.log(JSON.stringify(copy1)); // {"a":0,"b":{"c":1}} copy1.b.c=2; console.log(JSON.stringify(copy1)); // {"a":0,"b":{"c":2}} console.log(JSON.stringify(obj1)); // {"a":1,"b":{"c":2}} copy1.a=2; console.log(JSON.stringify(obj1)); // {"a":1,"b":{"c":2}} console.log(JSON.stringify(copy1)); //{"a":2,"b":{"c":2}}
合并对象,当并具有相同属性的对象时,属性被后续参数中的相同属性的其他对象覆盖
var o1 = {a:1}; var o2 = {b:1}; var o3 = {c:1}; obj = Object.assign(o1,o2,o3); console.log(JSON.stringify(obj)); // {"a":1,"b":1,"c":1} console.log(JSON.stringify(o1)); // {"a":1,"b":1,"c":1} console.log(JSON.stringify(o2)); // {"b":1} console.log(JSON.stringify(o3)); // {"c":1} var b1={a:2,b:2,c:3}; var b2 = {b:3,c:4}; var b3 = {c:5}; obj=Object.assign({},b1,b2,b3); // {a: 2, b: 3, c: 5} console.log(JSON.stringify(obj)); //{"a":2,"b":3,"c":5}
2、Object.create()
创建具有指定的原型,并可选择包含指定的属性对象。
Object.create(proto[, propertiesObject])
参数:
proto 新创建对象的原型对象。
propertiesObject 可选。如果没有指定为 undefined,则是要添加到新创建对象的可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数。
返回值:
在指定原型对象上添加新属性后的对象。
例外:
如果proto参数不是 null 或一个对象,则抛出一个 TypeError 异常。
let newPerson = Object.create({}, { height: { value: 188, writable: false, }, skin: { value: 'yellow', } }); newPerson //{height: 188, skin: "yellow"}
3、Object.defineProperty()
直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
Object.defineProperty(obj, prop, descriptor)
参数:
obj 要在其上定义属性的对象。
prop 要定义或修改的属性的名称。
descriptor 将被定义或修改的属性描述符。
返回值:
被传递给函数的对象。
4、Object.defineProperties()
直接在一个对象上定义新的属性或修改现有属性,并返回该对象。
Object.defineProperties(obj, props)