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;
	 }
})
经验分享 程序员 微信小程序 职场和发展