1、声明对象的两种语法
let obj = {
'name':'xxx',
'age':18
}
let obj = new Object({
'name':'xxx',
'age':18
})
两者都是可用的声明对象的语法,前者更加简便一些,后者更加正确。
2、如何删除对象的属性
也是两种语法
delete obj.xxx //方法1
delete obj['xxx'] //方法2
- 判断是否含有属性名
'xxx' in obj //不含有就返回false
'xxx' in obj&&obj.xxx === undefined //含有属性名,但是属性值为undefined
- 注意:
obj.xxx ==== undefined //不能断定'xxx'是否为obj的属性
示例:
- 注意:delete只能用于删除对象的属性
3、如何查看对象的属性
- 查看自身的所有属性名:
Object.keys(obj)
- 查看自身所有属性值:
Object.values(obj)
- 查看自身所有属性和属性值:
obj //方法一
Object.entries(obj) //方法二
- 查看自身属性+共有属性:
console.dir(obj) //方法一
obj.__proto__ // 方法二,不推荐
- 判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
- 注意: 'toString' in obj 无法判断是自身的还是共有的
- 查看属性值:
obj['key'] //初学者推荐
obj.key //老手使用
- 注意:
obj.name === obj['name'] //obj['name']中的name是字符串
obj.name !== obj[name] //obj[name]中的name是变量
- 一定要分清楚 obj.name、obj['name'] 、obj[name]
4、如何修改或增加对象的属性
- 直接赋值:
let obj = {name: 'xxx'} //true
obj.name = 'xxx' //true
obj['name'] = 'xxx' //true
obj['na' + 'me'] = 'xxx' //true
let key = 'name'; obj[key] = 'xxx' //true, 等价于'name':'xxx'
obj[name] = 'xxx' //false
let key = 'name' ; obj.key = 'xxx' //false,obj.key等价于obj['key'],也就是'key':'xxx'
- 批量赋值
Object.assign(obj,{'p1':'1','p2':'2','p3':'3','p4':'4'})
- 无法通过自身修改或增加共有属性
let obj = {}, obj2 = {} //共有toString
obj.toString = 'xxx' //只会改obj的自身属性
obj2.toString //还是在原型上
- 偏要修改或增加原型上的属性
obj.__proto__.toString = 'xxx' //不推荐用__proto__
Object.prototype.toString = 'xxx' //相对好一些
- 如果一定要改
let obj = Object.create(common) //表示以common为原型创建对象
obj.name = 'xxx' //创建以后再添加属性和值或者使用Object.assign(obj,{'name':'xxx'...})
5、'name' in obj和obj.hasOwnProperty('name') 的区别
- 都是用于查看属性是不是在对象中
- 但是前者无论是自身属性还是共有属性都会返回true,后者仅仅是自身属性才返回true
6、7种数类型
- number
- boolen
- string
- symbol
- null
- undefined
- object
7、五个falsy值
- undefined
- null
- ''
- 0
- NaN