JS对象基本用法

290 阅读2分钟

对象object 定义

  • 无序的数据集合
  • 键值对的集合
  • 属性名:属性值
  • 键名一定为字符串,不是标识符,可以包含任意字符
  • 键名引号如果没有特殊字符(如中文)则可以省略,若省略了引号则为标识符
  • 就算引号省略了也还是字符串

1.声明对象的两种语法

  • Let obj ={‘name’: ‘abc’,‘age’:18 }

  • Let obj = new Object({‘name’:’abc’})

  • Console.log({‘name’:’abc’,’age’:18})

  • Object.Keys(obj)可以得到obj的所有key

  • 如果想用变量的值为属性名

a=‘xxx’
Let obj={[a]:yyy}
↓
xxx:yyy
  • Js每个对象都有一个隐藏属性,这个隐藏属性存储着其公有属性组成的对象的地址

  • 存有所有隐藏(公有)属性组成的对象叫做原型,隐藏属性储存着原型的地址

  • 共有属性用于节省内存

  • 除了字符串,symbol也能作为属性名,迭代会用到

Let a = Symbol()
Let obj = {[a]: ‘Hello’}

2.如何删除对象的属性

  • Var obj ={name:’abc’ }
  • Delete obj.name 或 delete obj[‘name’] 值和属性名都删除
  • Undefined只删除值
  • 检查该属性是否还存在
  • ‘name’ in obj === false 则不存在
  • 含有属性名,但是值为 undefined
  • 'xxx' in obj && obj.xxx === undefined
  • 注意 obj.xxx === undefined 不能断定 'xxx' 是否为 obj 的属性

3.如何查看对象的属性

  • 两种方法查看属性
  • 中括号语法:obj['key']
  • 点语法:obj.key
查看x所有属性名
  • Object.keys(x)
  • [‘属性名’]
查看x所有属性值
  • Object.values(x)
  • [‘属性值’]
查看所有属性名和属性名
  • x
  • {‘属性名’:‘属性值’}
  • Object.entries(x)
  • [Array(2)]
  • [‘属性名’,‘属性值’]
查看x的所有属性和隐藏属性
  • Console.dir(x)
判断一个属性是自身的还是共有的
  • obj.hasOwnProperty('toString')

4.如何修改或增加对象的属性

直接赋值

obj['name'] = abc

批量赋值

Object.assign(obj, {age: 18, gender: 'man'})

改共有属性

obj.__proto__['toString'] = 'xxx'

改共有属性

Object.prototype['toString'] = 'xxx'

改原型

obj.__proto__ = common
let obj = Object.create(common)

注:所有 proto 代码都是强烈不推荐写的

5.'name' in obj和obj.hasOwnProperty('name') 的区别

'name' in obj 判断name属性是否存在

obj.hasOwnProperty('name') //判断name属性是否是自身就有的