JS对象

110 阅读2分钟

一、对象

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