《JS 对象基本用法》

135 阅读2分钟

声明对象

方法一:直接声明一个空的花括号{}

// 方法一:直接声明一个空的花括号{}
let obj = {}

方法二:new Object({})

// 方法二:new Object({})
let obj2 = new Object({})

属性的增删改查

1. 删除对象的属性

例如,删除 obj 对象的 xxx 属性。

// 属性名 xxx 是字符串,可以省略''来写,

delete obj['xxx']

delete obj.xxx

键名是字符串,不是 标识符,可以包含任意字符。
键名的 引号 可以省略,省略后就只能写 标识符。

删除对象的属性后,怎么判断该对象里面还有没有该属性?

'xxx' in obj
// false

上面代码返回 false,则代表,obj 里面 已经没有 xxx 属性了。

2. 查看对象的属性

2.1 查看自身属性

例如,obj 对象有个 age 属性,属性值 18 。

var obj = {
    name: 'r',
    age: 18
}

下面就打印出 obj 对象的 自身属性

Object.keys(obj)

2.2 查看自身 + 共有属性

console.dir(obj)

以上可以看到 age 和 name 自身属性,还有 __proto__ 里面的 共有属性

2.3 判断一个属性是自身属性还是共有属性

obj.hasOwnProperty('toString')

  • hasOwnProperty 返回 false,表示 obj 对象自身没有 toString 属性。
  • 'toString' in obj 返回 true,说明 obj 中有 toString 属性。
  • 但上面又说不是 obj 的自身属性,那说明 toString 是 obj 的共有属性。

3. 修改或增加对象的属性

3.1 直接修改/增加自身属性

// 方法一:
let obj = {name: 'ry'} // name 是字符串
// 方法二:
let key = 'name'; 
obj[key] = 'ry'; //key 是变量

3.2 批量修改/增加自身属性

Object.assign(obj, {name: 'ry',age: 18})

上面的 obj 为对象名,{}花括号里面就是 obj 对象的 属性名属性值,可以添加批量属性,用 , 隔开。

3.3 修改/增加原型的共有属性

我们可以看到 obj 对象的原型共有属性 toString 在 obj.__proto__里面,如果我们要修改 toString 共有属性,是不是直接在obj.__proto__上修改呢?并不是,一般我们这样写:Object.prototype.toString = 'xxx'

可以看到,obj 的 共有属性 toString 被改成了 'xxx'

所以 obj.__proto__ === Object.prototype

虽然这样就修改了共有属性 toString,一般来说,还是不要修改,会引起很多问题。

3.4 修改/增加原型

比如,我们现在给rywgs 这两人,加上 common 共有属性。

let common = { //一开始就先定义共有属性
    kind: 'human',
    sports: 'run'
}
let person1 = Object.create(common)
person1.name = 'ry'
let person2 = Object.create(common)
person2.name = 'wgs'

所以,共有属性一开始就改/新增,别后面再改/新增

'name' in objobj.hasOwnProperty('name') 的区别

  • 'name' in obj 判断 obj 对象中,有没有 name 属性,不管这个属性是 自身属性 或者 是共有属性,只要有这个属性,就返回 true ,没有返回 false

  • obj.hasOwnProperty('name')判断 obj 对象中 自身属性 有没有 name 属性,有返回 true,没有返回 false