一、对象
1.1定义
- 无序的数据集合
- 键值对的集合
1.2写法
let obj = { 'name':'frank','age':18 }
let boj = new Object({ 'name':'frank' })
console.log({ 'name':'frank',''age':18 })
注意:
键名是字符串,不是标识符,可以包含任意字符
引号可省略,省略之后只能写标识符
即便引号省略了,键名还是字符串
1.3属性名
每个key都是对象的属性名(property)
1.4属性值
个 value 都是对象的属性值 二、删除属性
2.1delete
delete obj.xxx 或 delete obj['xxx']
- 即删除obj的xxx属性
- 注意区分 [属性值为undefined] 和 [不含属性名]
2.2不含属性名
'xxx' in obj === false
2.3含有属性名,但是值为undefined
'xxx' in obj && obj.xxx === undefined
注意: obj.xxx === undefined
三、查看所有属性(读属性)
3.1查看自身所有属性
Object.keys(obj)
3.2查看自身+共有属性
console.dir(obj)
3.3判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
3.4每个对象都有原型
- 原型里存着对象的共有属性
- 比如 obj 的原型就是一个对象
- obj. proto_ 存着这个对象的地址
- 这个对象里有 toString / constructor / valueOf 等属性 3.5对象的原型也是对象
- 所以对象的原型也有原型
- obj = {} 的原型即为所有对象的原型
- 这个原型包含所有对象的共有属性,是对象的根
- 这个原型也有原型,是 null
四、判断一个属性是自身的还是共有的
in 用于查看对象对象
var obj = {'name':frank}
'name' in obj // true
'toString' in obj // true
in 查看的存在一个问题,它不能识别哪些属性是对象自身的,哪些属性是共有的。就像上面代码中,对象obj本身并没有toString属性,但是in会返回true,因为这个属性是共有的。
可以使用对象的hasOwnProperty方法判断一下,是否为对象自身的属性
var obj = {'name':frank}
'name' in obj // true
obj.hasOwnProperty('toString') // false