1 声明对象的两种语法
1.1 定义
1.2 一般语法
let a = { 'name': 'Jack', 'age': 18 }
let a = new Object ( {'name':'Jack'} )
console.log ( {'name': 'Jack, 'age': 18} )
注意:
- 键名是字符串(string), 不是标识符, 可以包含任意字符;
- 引号可省略, 省略之后就只能写标识符;
-
1.3 用变量做属性名的语法
let p1 = 'name'
let obj = { p1 : 'Jack'} // 属性名为'p1'
let obj = { [p1] : 'Jack' } // 属性名为'name'
对比:
不加 [ ] 的属性名会自动变成字符串;
- 加了 [ ] 则会当做变量求值;
- 值如果不是字符串, 则会自动变成字符串.
2 对象的隐藏属性
- JS中每一个对象都有一个隐藏属性;
- 这个隐藏属性储存着其共有属性组成的对象的地址;
- 这个共有属性组成的对象叫做原型;
- 隐藏属性储存着原型的地址.
举例:
- var obj = { }
- obj.toString( ) //居然不报错
- 因为obj的隐藏属性对应的对象上有 toString( )
3 删除对象的属性
3.1 语法
delete obj.xxx 或
delete obj['xxx']
3.2 不含属性名
语法:
'xxx' in obj === false
3.3 含有属性名, 但属性值为undefined
语法:
'xxx' in obj &&obj.xxx=== undefined 或
'xxx' in obj && obj['xxx']
注意: obj.xxx=== undefined, 不能断定’xxx’是否为obj的属性
4 查看对象的属性
4.1 查看自身所有属性
语法:
Object.keys(obj)
4.2 查看自身+共有属性
语法:
console.dir(obj) 或
Object.entries(obj).
4.3 查看某个属性
obj ['key'] //中括号语法(优先使用)
obj.key //点语法
obj [key] // 这是坑新人语法. 变量key值一般不为'key'.
4.4 ‘name’ in obj 与 obj.hasOwnProperty(‘name’)的区别
hasOwnPropert( )方法, 如果返回值为true, 则可以确定指定的属性为对象自身的属性(此方法会忽略掉那些从原型链上继承到的属性).
in 运算符, 是指如果指定的属性在指定的对象或其原型链中, 则in 运算符返回true.
举例:
let obj = { 'name': 'Jack' }
'name' in obj // 返回 true.
obj.hasOwnProperty('name') // 返回 true.
obj.hasOwnProperty('toString') // 返回 false. 因为toString是共有属性, 不是对象自身的属性.
5 修改或增加对象的属性
5.1 直接赋值
let obj = {name: 'Jack'} //name是字符串
obj.name = 'Jack' // name是字符串
obj['name'] = 'Jack'
obj[name]= 'frank'//错,因name值不确定
obj['na'+'me'] = 'Jack'
let key = 'name'; obj[key] = 'Jack'
let key = 'name';obj.key= 'Jack'//错. 因为obj.key等价于obj['key']
5.2 批量赋值
语法:
Object.assign(obj, {age: 18, gender: 'man'})
5.3 修改共有属性
语法:
Object.prototype.toString= 'xxx'
注意: 一般来说, 不要修改原型, 会引起很多问题.
5.4 修改隐藏属性
推荐使用Object.create.
语法:
let obj =Object.create(common)
obj.name = 'Tom'
let obj2 =Object.create(common)
obj2.name = 'jack'
注意: 隐藏属性如果要改, 那么一开始就要改, 不要中途改.