JS 对象基本用法

99 阅读2分钟

声明对象的语法

对象是以键值对(key: value)的形式存储的,需要注意的是 key 的类型是 string

let obj = {'width': 100, 'height': 200}
​
let obj = new Object({'width': 100, 'height': 200})

原型

每个对象都有原型

原型用来存对象的共有属性

obj.__proto__ 存着原型的地址

原型里有 toString / valueOf 等属性

对象的原型也是对象

对象的原型也有原型,这个原型是 null,即为对象的根

删除对象属性

delete obj.xxxdelete obj['xxx']

判断不含属性名

'xxx' in obj === false

判断含有属性名,但是值为 undefined

'xxx' in obj && obj.xxx === undefined

注意

obj.xxx === undefined
// 不能断定'xxx'是否为 obj 的属性
let x = {}
x.a === undefined
// true
// 无论有没有此属性,都会返回 true

查看对象属性

查看自身所有属性

Object.key(obj)

查看自身 + 共有属性

console.dir(obj)

判断属性是否存在

判断是否为自身属性

obj.hasOwnProperty('toString')

判断是否为共有属性

var obj = {
  p: 123
};

if("toString" in obj){
    if("obj".hasOwnProperty("toString")){
        console.log("属性为私有属性")
    }else{
        console.log("属性为共有属性")
    }
}else{
    console.log("不存在该属性")
}

// 属性为共有属性

查看属性

  • 中括号语法 obj['key'] // key 为字符串
  • obj[key] // key 为变量
  • 点语法 obj.key

推荐使用中括号语法,key的值是字符串类型,点语法会产生误导

修改或增加对象属性

直接复制

let obj = {name: 'murphy'} // name 是字符串
obj.name = 'murphy' // name 是字符串
obj['name'] = 'murphy'
let key = 'name'; obj[key] = 'murphy'

批量赋值

Object.assign(obj, {name: 'murphy', age: 18, gender: 'man'})

修改隐藏属性

__proto__

不推荐使用,过时不符合规范


let obj = {name: 'murphy'}
let common = {hobby: 'read'}
obj.__proto__ = common

Object.create

推荐使用

let common = {hobby: 'read'}
let obj = Object.create(common)
obj.name = ”murphy"
let obj2 = Object.create(common)
obj2.name = ”jack"

建议一开始就修改原型,后面改会影响性能

推荐使用 Obejct.create

一开始就把原型指定好,后面再改很影响性能