一–静态方法 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
就是该对象的类型或者叫做构造函数