对象标签1

//不可枚举的属性,在控制台中其字体颜色就会变成浅

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:是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,
    // 此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员
}```

转载于:https://my.oschina.net/u/3407699/blog/1548812

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值