《JS 对象基本用法》

157 阅读2分钟

声明对象的两种语法

定义

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

    如何删除对象的属性

  • 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 的属性
  • 如何查看对象的属性

  • 中括号语法: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')
  • 如何修改或增加对象的属性

    直接赋值
    obj['name'] = abc
    批量赋值
    Object.assign(obj, {age: 18, gender: 'man'})
    改共有属性
    obj['name'] = abc
    改原型
    obj.__proto__ = common
    let obj = Object.create(common)
    
    注:所有 proto 代码都是强烈不推荐写的

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

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