文章目录
Object
object.assign()
拷贝源对象自身可枚举属性,利用该属性可以合并两个对象
let obj1 = { a: 0 , b: { c: 0}};
let obj2 = Object.assign({}, obj1);
obj2.b.c = 3;
log(JSON.stringify(obj1)); // { a: 0, b: { c: 3}}
log(JSON.stringify(obj2)); // { a: 0, b: { c: 3}}
object.Defineproperty()
- 使用此方法可以为对象添加属性或修改属性的值:三个参数含义分别为对象名称、属性名称、值和是否可修改属性值 (得出obj={ name: 42 }),所添加的对象
- 还具有gertter和setter,默认为undefine,访问该属性时会调用该函数
(要么有value和writable要么有gertter和setter) - Enumerable属性定义了对象的属性是否可以在for…in循环和object.keys()中被枚举
Object.defineProperty(obj, 'name', {
value: 42, // 属性对应的值,默认为undefine
writable: false // 是否可以被赋值运算符修改
enumerable: false // 是否具有可枚举属性
configurable:false // 能够改变属性名称,删除该属性
});
object.entries()
使用此方法返回一个键值对数组,其顺序和for…in 循环遍历时的一样
(for…of…遍历的是value,for…in…遍历的是key)
若是可排序的key会转换顺序
const anObj = { 100: 'a', 2: 'b', 7: 'c' }
console.log(Object.entries(anObj)) // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]
object.prototype.constructor()
所有对象都会从他的原型上继承constructor属性
var a = []
a.constructor === Array // true
object.keys()
- 返回对象可枚举属性组成的数组:obj[key] = value(返回由key组成的数组)
- 若是key是可排序的,返回的key是排序好了的
- 若要获取一个对象的所有属性,包括不可枚举的,使用object.getOwnPropertyName()
var anObj = { 100: 'a', 2: 'b', 7: 'c' }
console.log(Object.keys(anObj)) // console: ['2', '7', '100']
// 数组返回的key是0,1,2,3,
var arr = ['a', 'b', 'c']
console.log(Object.keys(arr)) // console: ['0', '1', '2']
object.values()
返回可枚举的对象(同object.keys())
具有可排序的key时,value的值会被打乱
var an_obj = { 100: 'a', 2: 'b', 7: 'c' }
console.log(Object.values(an_obj)) // ['b', 'c', 'a']
object.hasOwnProperty()
返回一个布尔值,判断该对象是否含有指定的属性(会忽略从原型链继承来的属性)
object1.property1 = 42;
console.log(object1.hasOwnProperty('property1')) // expected output: true
object.is()
判断两个值是否为同一个值,返回布尔值,与三等不同的有:
+0,-0,三等返回true,object.is()返回false,
NaN和NaN比较时,三等返回false,object.is()返回true
var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo); // true
Object.is(foo, bar); // false
Object.is([], []); // false
Object.is(NaN, 0/0); // true
参考文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object