JavaScript 对象方法及其扩展
JavaScript 对象方法及其扩展
Object.is(v1,v2):判断对象v1与v2是否完全相等 该方式是以字符串是否相等来判断的
console.log(0 === -0) //true console.log(NaN == NaN)//false NaN与任何数都不相等 console.log(Object.is(0,-0)) //false console.log(Object.is(NaN,NaN))//true
Object.assign()多个对象进行合并
Object.assign(target,source1,source2…):对多个对象进行合并
1.返回目标对象target,对象用等号进行赋值 – 浅拷贝 2.如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性 3.只会拷贝源对象自身的并且可枚举的属性到目标对象身上。 4. 会跳过那些值为 null 或 undefined 的源对象
const target = { a: 1, b: 1 }; const source1 = { b: 2, c: 2 }; const source2 = { c: 3 }; Object.assign(target, source1, source2); target // {a:1, b:2, c:3}
常见用途 1.关于拷贝的用法 2.为属性指定默认值
const DEFAULTS = { logLevel: 0, outputFormat: html }; //options对象是用户提供的参数。 function processContent(options) { options = Object.assign({ }, DEFAULTS, options); console.log(options); // ... }
Object.setPrototypeof()/Obejct.setPrototypeOf()
Object.setPrototypeOf(对象a,对象b):设置对象a的__proto__指向对象b Object.getPrototypeOf(对象):获取指定对象的__proto__指向的值,没有返回null
Object.create(prototype,[descriptors])
Object.create(对象)方法创建一个新对象,新对象的隐式原型__proto__指向参数的对象 descriptors可选。需要传入一个对象,该对象的属性类型参照Object.defineProperties()的第二个参数
Object.defineProperties(object,descriptors)/Object.defineProperty(obj, prop, descriptor)
作用:为指定的object对象扩展多个属性 Object的defineProperty/defineProperties主要功能就是用来定义或修改这些内部属性。
Object.defineProperty(obj, prop, descriptor)
obj: 需要被操作的目标对象 prop: 目标对象需要定义或修改的属性的名称 descriptor: 被定义或修改的属性的配置项对象{} - getter:每一次访问属性都会调用getter重新执行 - setter:每一次obj.name进行修改时调用 - configurable:控制属性是否可以被删除,默认是不可删除false - writable:控制属性是否可以被修改,默认不可以被修改false - enumerable:控制属性是否可以被遍历,默认是不可被遍历false
let obj = new Object(); let name1 = "ranan"; Object.defineProperty(obj, name, { configurable: true,//控制属性是否可以被删除,默认是不可删除false writable: true,//是否可以被修改,默认不可以被修改false enumerable: true, //是否可以被遍历,默认是不可被遍历false value: 张三, //设置属性值, //当有人读取obj的name属性时,get函数(getter=get+函数)就会被调用,且返回值就是age的值 get(){ return name1 ; } //当有人修改obj的age属性时,set函数(setter)就会调用,且会收到修改的具体值 set(value){ name1 = value; } })