20200301

@czhang
  • date: 20200301
  • author: czhang

Plan

你不知道的 JavaScript 第二部分 第三章

Notes

1. 对象

  1. 类型

    string number boolean null undefined object

    JS 的对象底层都表示为二进制,二进制前三位都为 0 的话会被 typeof 判断为 object 类型, null 为全 0,因此前三位也为 0,执行 typeof 时 会返回 "object"

  2. 内置对象

    String Number Boolean Object Function Array Date RegExp Error

    => 内置函数

  3. 当初识定义一个变量时,只是一个字变量,在取其 length 属性 或者其他操作时,js 会自动转换为 String 变量,所以可以访问属性和方法

2. 属性

  1. 对象的属性名永远是字符串,如果不是,会被自动转换为一个字符串

  2. 可计算属性名: [aaa + bbb] : 'aabb'

  3. 如果给数组添加一个“看起来”像数字的属性,它就会变成数值下标

    arr['3'] = 'a';
    console.log(arr[3]); // "a"
    
  4. 复制对象

    1. Object.assign(目标对象,多个源对象) ==> 浅复制 (使用 = 操作符)
    2. 深复制
  5. 属性描述符

    1. writable 是否可修改属性的值 为 false 时,相当于定义了一个空操作 setter
    2. configurable 属性是否可配置,就是是否可以使用 defineProperty() 方法修改属性描述符
      1. 为 false 时, 可以把 writable 状态由 true 改为 false ,但不可以 false 改为 true
      2. 为 false 时, 禁止删除该属性
    3. enumerable 可枚举属性, 是否可出现在 for in 循环中
    4. 不变性
      1. writable:false configurable:false
      2. Object.preventExtensions() 禁止添加新属性
      3. Object.seal() 禁止添加新属性 & 所有属性 configurable:false
      4. Object.freeze() writable:false ==> 最高级别
      5. 都是禁止对象及其直接属性的修改,对象引用的其他对象不受影响

More