//不可枚举的属性,在控制台中其字体颜色就会变成浅window.onload=function () { /*******属性标签来控制对象属性的权限***********/ delete Object.prototype;//返回false,因为Object.prototype的属性标签设置其不能被删除 var descriptor=Object.getOwnPropertyDescriptor(Object,'prototype');//查询Object.prototype所有的属标签 console.log(descriptor) //configurable:false 表示该属性不可配置 //enumerable:false 表示该属性不可被枚举 // /*********delete删除变量*********/ var globalVal=5; console.log(delete globalVal)//返回的是false,无法删除val申明的变量 function fn() { } delete fn ;//false console.log(delete fn )//无法删除函数变量 //可以删除变量的特殊情况: //①:隐式申明变量 globalVal0=6; delete globalVal0 console.log(delete globalVal0) //②:在eval中申明的变量可以被删除 eval("var s=10;console.log(delete s)")//返回true //查看一个属性是否可以被枚举 propertyIsEnumerable(),传入属性的key值,字符串类型传参 var cat=new Object(); cat.leg=4; cat.eye=2; console.log('leg' in cat);//true in操作符会向对象的原型链上查找 console.log('eye' in cat);//true console.log('toString' in cat);//true console.log(cat.propertyIsEnumerable('leg'))//true console.log(cat.propertyIsEnumerable('toString'))//false //设置对象的属性标签 Object.defineProperty(cat,'price',{enumerable:false,value:1000}); //通过该方式创建对象的时,它的所有布尔类型的属性标签值都为false console.log(cat.propertyIsEnumerable('price'))//false console.log(cat)//在控制台中就看到cat的price属性变成灰色,就表示不可枚举 console.log(cat.hasOwnProperty('price'))//true /****属性枚举*****/ var o={x:1,y:2,z:3} console.log('toSring' in o);//true o.propertyIsEnumerable('toString')//属性标签控制toString属性不可枚举 var key; for(key in o){ console.log(key)//只会打印出 x y z,而不会打印出toString,因为toString属性不可枚举 } //再在o对象的基础上创建对象obj var obj=Object.create(o,{b:{value:8}});//返回一个新对象。在指定原型对象上添加新属性后的新对象 //通过Object.create()创建的对象,obj从o对象上继承 //Object.create(proto,{propertiesObject}) //****proto一个对象,应该是新创建的对象的原型 //propertiesObject可选。该参数对象是一组属性与值,该对象的属性名称将是新创建的对象的属性名称,值是属性描述符, //只有该对象中自身拥有的可枚举的属性才有效,也就是说该对象的原型链上属性是无效的。 //且属性b的属性标签默认都为false,不可写,不可枚举,不可配置的 configurable:false,enumerable:false obj.a=6; obj.b=10//下面打印obj,其中b的属性值依旧为8,没有变,b是不可写,不可枚举,不可配置的 无法用for in枚举出来 console.log(obj)//{a:6,b:8} console.log(obj.__proto__)//指向的是o对象 var key0; for(key0 in obj){ console.log(key0)// //b属性由于是不可枚举的,所以输出结果x y z a if(obj.hasOwnProperty(key0)){//过滤掉原型上的属性 console.log(key0) //a //b属性由于是不可枚举的,所以输出结果a } } console.log(obj.hasOwnProperty('b'))//true obj对象本身就有b属性,只不过不可写,不可枚举,不可配置的 console.log(obj.b)//8 // hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是, // 此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员}```