3.对象的方法

一–静态方法 Object.

1-----Object.freeze()冻结对象

冻结的对象不能删除,不能重新设置属性,也不能重新设置属性的描述对象

var obj={a:1,b:2};
Object.freeze(obj);
obj.a=10;//不能重新设置属性
delete obj.a;//冻结的对象不能删除,

Object.defineProperty(obj,"a",{//不能重新设置属性的描述对象
     configurable:true,
     writable:true,
     enumerable:true,
     value:10
 }) 
 console.log(obj);

obj自身可以删除,不可以删除属性

obj=null;//obj自身可以删除,不可以删除属性

可以用做复制,并且复制后的属性是可以删除可修改的

		var o=Object.assign({},obj);
        o.a=10;

首先判断对象有没有原型属性a,如果有,还需要看原型属性a是否冻结,如果冻结则不能增加对象属性(包括描述对象设置不可修改属性)

var obj={a:1,b:2};
Object.defineProperty(obj,"c",{
        value:3
    })
Object.freeze(obj);

var o=Object.create(obj);
o.a=10;//原型属性a是否冻结,如果冻结则不能增加对象属性
o.c=10;//描述对象不可修改属性
o.abc=10;
console.log(o)  //o{abc:10,__proto__:{a:1,b:2,c:3}}

2----Object.is 判断相等

比较数据和数据的类型等同于===

		var a=3;
        var b="3";
        console.log(Object.is([],[]));//false

new创造一个数值型对象

var a=3;
var b=new Number(3);//创造一个数值型对象
//var b=Number(3);//强制转换为数值3
console.log(Object.is(a,b))//false  不写new就是true

Object.is判断两个NaN时,是相等的

 console.log(NaN===NaN);//false
 console.log(Object.is(NaN,NaN));//true

3—Object.isEstensible 是否可以扩展

如果冻结对象就不可以扩展了

var obj = {a: 1};
 Object.freeze(obj);
 console.log(Object.isExtensible(obj)); //  false  如果没有被冻结,则打印true

4—Object.isFrozen判断对象是否被冻结

var obj = {a: 1};
 Object.freeze(obj);
 console.log(Object.isFrozen(obj)); // true



二—动态方法(原型方法) obj.

1-----hasOwnProperty 可以区分对象属性和原型属性

判断a是不是当前对象的属性

var obj = {a: 1};
console.log(obj.hasOwnProperty("a")) //true

hasOwnProperty 只可以判断对象属性,不可以判断原型属性

var obj = {a: 1};
var o=Object.create(obj);
console.log(o.hasOwnProperty("a"));//false

-----in 既可以判断对象属性,也可以判断原型属性

var obj = {a: 1};
var o=Object.create(obj);
console.log("a" in o);//true
// in判断属性是否是对象属性时,只要是该对象的原型属性和对象属性都可以确定

2----isPrototypeOf 判断原型

obj是o对象的原型

var obj = {a: 1};
var o=Object.create(obj);
console.log(obj.isPrototypeOf(o));//true    obj是o对象的原型

obj是不是o1的原型链中的一个

var obj = {a: 1};
var o=Object.create(obj);
o.a=10;
var o1=Object.create(o);
o1.a=20;
console.log(obj.isPrototypeOf(o1));//true    obj是不是o1的原型链中的一个

父类.isPrototypeOf(子类)

判断某个类的父类是否是这个指定的类 如果为true,表示子类继承父类


	class Box{
	   a=3;
	   constructor(){
	
	   }
	}
	
	class Ball extends Box{
	   b=10;
	   constructor(){
	
	   }
	}
	
	class Rect extends Ball{
	   c=20;
	   constructor(){
	
	   }
	}
	console.log(Box.isPrototypeOf(Rect));//true   判断某个类的父类是否是这个指定类

3----propertyIsEnumerable 判断是否是可枚举属性

判断当前对象的属性是不是可枚举属性

var obj = {a: 1};
Object.defineProperty(obj,"b",{
       value:10
 });
   
 var names=Object.getOwnPropertyNames(obj);
 for(var i=0;i<names.length;i++){
     // console.log(names[i])  ['a','b']
     if(obj.propertyIsEnumerable(names[i])){//判断是否是可枚举属性
         console.log(names[i]+"是可枚举属性") //a
     }else{
         console.log(names[i]+"不是可枚举属性")//b
     }
 }

4—constructor

就是该对象的类型或者叫做构造函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡萝卜大王驾到通通闪开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值