20200301
- date: 20200301
- author: czhang
Plan
你不知道的 JavaScript 第二部分 第三章
Notes
1. 对象
类型
string number boolean null undefined object
JS 的对象底层都表示为二进制,二进制前三位都为 0 的话会被 typeof 判断为 object 类型, null 为全 0,因此前三位也为 0,执行 typeof 时 会返回 "object"
内置对象
String Number Boolean Object Function Array Date RegExp Error
=> 内置函数
当初识定义一个变量时,只是一个字变量,在取其 length 属性 或者其他操作时,js 会自动转换为 String 变量,所以可以访问属性和方法
2. 属性
对象的属性名永远是字符串,如果不是,会被自动转换为一个字符串
可计算属性名: [aaa + bbb] : 'aabb'
如果给数组添加一个“看起来”像数字的属性,它就会变成数值下标
arr['3'] = 'a'; console.log(arr[3]); // "a"复制对象
- Object.assign(目标对象,多个源对象) ==> 浅复制 (使用 = 操作符)
- 深复制
属性描述符
- writable 是否可修改属性的值 为 false 时,相当于定义了一个空操作 setter
- configurable 属性是否可配置,就是是否可以使用 defineProperty() 方法修改属性描述符
- 为 false 时, 可以把 writable 状态由 true 改为 false ,但不可以 false 改为 true
- 为 false 时, 禁止删除该属性
- enumerable 可枚举属性, 是否可出现在 for in 循环中
- 不变性
- writable:false configurable:false
- Object.preventExtensions() 禁止添加新属性
- Object.seal() 禁止添加新属性 & 所有属性 configurable:false
- Object.freeze() writable:false ==> 最高级别
- 都是禁止对象及其直接属性的修改,对象引用的其他对象不受影响