声明对象
方法一:直接声明一个空的花括号{}
// 方法一:直接声明一个空的花括号{}
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 修改/增加原型
比如,我们现在给ry和wgs 这两人,加上 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 obj 和 obj.hasOwnProperty('name') 的区别
-
'name' in obj判断 obj 对象中,有没有 name 属性,不管这个属性是自身属性或者是共有属性,只要有这个属性,就返回true,没有返回false。 -
obj.hasOwnProperty('name')判断 obj 对象中自身属性有没有 name 属性,有返回true,没有返回false。