对象(Object)

对象是由键值对组成的无序数据组合,包含键名和键值,键值对之间用逗号分隔。

键名:所有键名都是字符串。

  1. 如果键名是数值,会被自动转为字符串。
  2. 如果键名不符合标识符命名规则,则必须加引号。

    属性:对象的属性读取,有两种方法,点运算符和方括号运算符。

    注:如果使用方括号运算,键名必须加引号,否则会被当做变量处理,数字键名可以不加引号,因为会自动转为字符串。点运算和方括号运算也可以用来给对象里的内容赋值。

    声明对象的语法

    1. //示例 1:
    2. let obj1 = {
    3. "key":"value",
    4. "key":"value",
    5. "key":"value",
    6. }
    7. //示例 2:
    8. let obj2 = new Object({
    9. "key":"value",
    10. "key":"value",
    11. "key":"value",
    12. })

删除对象的属性

删除对象的两种方法

  1. let obj = {
  2. "name":"小明",
  3. "age":"18",
  4. }
  5. //第一种,赋值 undefined
  6. obj.name = undefined
  7. //第二种,delete
  8. delete obj.name
  9. delete obj["name"]

undefined 和 delete区别在哪

  1. obj.name = undefined
  2. 这句话是把 undefined 的值赋给 "name" 这个属性
  3. name in obj
  4. //ture
  5. "name" 这个属性还在对象 obj 里面,只是 "name" value undefined
  6. delete 时是删除对象里的内容:"key" + "value"
  7. 删除成功返回true,再读取被删除的属性会返回undefined
  8. 需要注意的是如果删除一个不存在的属性,delete不会报错,且也返回true
  9. delete只有在属性存在且不得删除的情况下才会返回false

in

用于检查对象是否包含某个属性,检查的是键名不是键值,如果包含就返回true否则返回false。

for in

用来遍历一个对象的全部属性,遍历的是对象所有课遍历的属性,会跳过不可遍历的属性,包括自身属性和继承属性。

typeof方法确定数据类型:

可以返回一个值的数据类型,除了null会返回object,函数Fn会返回function,其他几种都会返回自身的数据类型。

查看对象的属性

查看对象本身的属性和值

  1. let obj = {
  2. "name":"小明",
  3. "age":"18",
  4. }
  5. //查看所有属性
  6. Object.keys(obj)
  7. //查看所有值
  8. Object.value(obj)
  9. //枚举属性的键值对数组
  10. Object.entries(obj)
  11. //查看自身+共有属性
  12. console.dir(obj)
  13. //判断某个对象是否含有指定的属性
  14. obj.hasOwnProperty('toString')

查看对象里某个属性

  1. obj["key"]
  2. obj.key

修改或增加对象的属性

直接赋值

  1. let obj = {name: '小明'} // name 是字符串
  2. obj.name = '小明' // name 是字符串
  3. obj['name'] = '小明'
  4. obj[name] = '小明' // false,因 name 值不确定
  5. obj['na'+'me'] = '小明'
  6. let key = 'name';
  7. obj[key] = '小明'
  8. letkey = 'name';
  9. obj.key ='小明' // false因为 obj.key 等价于 obj['key']

批量赋值

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

关于原型

  1. //无法通过自身修改或增加共有属性
  2. let obj = {}, obj2 = {} // 共有 toString
  3. obj.toString = 'xxx' //只会在改 obj 自身属性
  4. obj2.toString //还是在原型上
  5. //偏要修改或增加原型上的属性
  6. obj.__proto__.toString = 'xxx' // 不推荐用 __proto__
  7. Object.prototype.toString = 'xxx'
  8. 一般来说,不要修改原型,会引起很多问题