你不知道的javaScript(三)------对象

10 阅读1分钟

1. Object.defineProperty()

var myObj = {}
Object.defineProperty(myObj,"a",{
  value:3,  //属性值
  writable:true,  //可写
  enumerable:true,   //可枚举
  configurable:true   //可配置
})
console.log(myObj) //{a:3}

可以在添加属性的时候,对对应的属性进行特性设置。

注意点:

  1. 把configurable设置成false是单向操作,无法撤销。(true->false:不报错。false->true:报错。)
var obj = {
  a:2
}
true -> false:不报错
Object.defineProperty(obj,"a",{
  configurable:true
})
Object.defineProperty(obj,"a",{
  configurable:false
})

false -> true:报错
Object.defineProperty(obj,"a",{
  configurable:false
})
Object.defineProperty(obj,"a",{
  configurable:true
})
  1. 即使是属性configurable:false,也可以将writable的状态由true设置成false,但是不能将false设置成true。
不报错情况:
Object.defineProperty(obj,"a",{
  writable:true
})
Object.defineProperty(obj,"a",{
  configurable:false
})
Object.defineProperty(obj,"a",{
  writable:false
})

报错情况:
Object.defineProperty(obj,"a",{
  writable:false
})
Object.defineProperty(obj,"a",{
  configurable:false
})
Object.defineProperty(obj,"a",{
  writable:true
})

3.关于设置一个对象不可更改juejin.cn/post/710763…

查找对象身上的属性

  1. in:会查找对象原型链上属性。
  2. Object.keys():只展示可以枚举的属性。不会找原型链。
  3. Object.getOwnPropertyNames():返回对象身上的所有属性,无论是不是可以枚举。不会找原型链。
  4. Object.hasOwnProperty():判断对象是不是包含该属性,不会找原型链。