对象的原型:
声明对象的两种语法:
let obj = {"name":"jack"}
//语法糖let obj = new Object({'name': 'jack'})
console.log({ 'name': 'jack, 'age': 18 })
-
如何删除对象的属性:
delete obj.xx
x 或delete obj['xxx']
- 不含属性名
'xxx' in obj === false
含有属性名,但是值为
undefined
'xxx' in obj && obj.xxx === undefined
注意
obj.xxx === undefined
不能断定'xxx'
是否为obj
的属性如何查看对象的属性:
查看自身所有属性
Object.keys(obj)
- 查看自身+共有属性
console.dir(obj)
判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
如何修改或增加对象的属性:
批量赋值
Object.assign(obj, {age: 18, gender: 'man'})
- 无法通过自身修改或增加共有属性
let obj = {}, obj2 = {}
// 共有 toString obj.toString = 'xxx'
只会在改 obj 自身属性 obj2.toString
还是在原型上
- 我偏要修改或增加原型上的属性
Object.prototype.toString = 'xxx'
(一般来说,不要修改原型,会引起很多问题)
‘name’ in obj和obj.hasOwnProperty(‘name’) 的区别:
'name' in obj
是用来判断obj
中是否有name
属性,只要有,不管是否在原型中都会返回true
,hasOwnProperty
,只能用来查看obj
的私有属性中是否有name
属性,如果name
在其原型中则返回false
。