你不知道的JavaScript之对象(二)

1 writable(可写)

如果要writable:false一致的话,setter被调用时应该抛出应该TypeError错误

2 configurable(可配置)

把configurable修改成false是单向操作,无法撤销,而且还会禁止删除属性。

例外:configurable:false还是可以把writable由true为false,反之不行。

3 enumerable(可枚举)

控制属性是否出现在对象的属性枚举中,例如for..in循环

4 不变性

  • 对象常量:设置writable:false和configurable:false
  • 禁止扩展:Object.prevent.Extensions() 禁止对象添加新属性并且保留已有属性
  • 密封:Object.seal()  相当于先调用Object.prevent.Extensions() 再把现有属性标记为configurable:false
  • 冻结: Object.freeze() 相当于先调用Object.seal() 再把现有属性标记为writable:false

5 in操作符会检查属性是否在对象及其[[Prototype]]原型链中。注意:in操作符检查的是属性名是否存在

4 in [2,4,6] //false

    hasOwnProperty()只会检查属性是否在当前对象中,不会检查[[Prototype]]原型链。

    通过Object.create(null)创建的对象不会连接到Object.prototype,因此没有hasOwnProperty方法。

6 propertyIsEnumerable检查给定的属性名是否直接存在于对象中(而不是在原型链上)并且满足enumerable:true

Object.keys()返回一个数组,包含所有可枚举属性

Object.getOwnPropertyNames()返回一个数组,包含所有属性,无论是否可枚举

var obj={};
Object.defineProperty(
  obj, 
  "a",
  {enumerable:true,value:2}
);
Object.defineProperty(
  obj, 
  "b",
  {enumerable:false,value:3}
);
console.log(obj.propertyIsEnumerable("a"));//true
console.log(obj.propertyIsEnumerable("b"));//false
console.log(Object.keys(obj));// ["a"]
console.log(Object.getOwnPropertyNames(obj));// ["a","b"]

7 遍历

forEach()遍历数组所有值并忽略回调函数返回值。

every()会一直运行直到回调函数返回false。

some()会一直运行直到回调函数返回true。

for..in遍历对象无法直接获取属性值,实际上遍历的是对象中所有可枚举属性,需要手动获取属性值,而且顺序不确定。

for..of 直接遍历值

var arr=[2,3];
for(var v of arr){
  console.log(v);//2;3
}
for(var v in arr){
  console.log("属性:"+v+"值:"+arr[v]);// 属性:0值:2;属性:1值:3
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值