对象 object

第七种数据类型,唯一一种复杂类型 对象可以包含其他六种类型,而前六种为简单类型,不能包含其他类型

定义:

  • 无序的数据集合
  • 键值对的集合

    写法

    3.jpg

    属性名和属性值

  • 每个键值代表对象的一个属性,包含键名和键值两个部分。

  • 键名表示属性名,键值表示属性值
  • 键名是字符串,不是标识符,可以包含任意字符。(标识符是不能以数字开头的)
  • 引号可省略,省略之后就只能写标识符
  • 就算引号省略了,键名也还是字符串(重要)

所有属性名会自动变成字符串

  1. let obj = {
  2. 1: true, // 1 --> '1'
  3. 3.2: true, // 3.2 --> '3.2'
  4. 1e2: true, // 1e2 --> '100'
  5. 1e-2: true, // 1e-2 --> '0.01'
  6. .234: true, // .234 --> '0.234'
  7. 0xFF: true // 0xFF --> '255'
  8. }
  9. Object.keys(obj)
  10. => ["1", "100", "255", "3.2", "0.01", "0.234"]
  • 可以使用 Object.keys(obj) 来打印出 obj 的所有 key

使用变量作为属性名

  • 语法

    1. let p1 = 'name'
    2. let obj1 = {
    3. p1: 'Barry' // 属性名为:'p1'('p1'这个字符串)
    4. }
    5. let obj2 = {
    6. [p1]: 'Barry' // 属性名为:'name'(变量p1的值)
    7. }
  • 对比:

    • 不加 [ ] 的属性名会自动变成字符串
    • 加了 [ ] 则会当做变量求值
    • 值如果不是字符串,则会自动变成字符串

对象的隐藏属性

  • 隐藏属性
    • JS 中每一个对象都有一个隐藏属性
    • 这个隐藏属性储存着其共有属性组成的对象的地址
    • 这个共有属性组成的对象叫做原型
    • 也就是说,隐藏属性储存着原型的地址
      1. var obj = {}
      2. obj.toString() // 居然不报错
      3. // 因为 obj 的隐藏属性对应的对象上有 toString()

      除了字符串,symbol 也能做属性名

      现在基本用不到,在学习「迭代」时会用到

  1. let a = Symbol()
  2. let obj = { [a]: 'Hello' }