对象

104 阅读1分钟

基本类型:

六种类型:
    string
    number
    null
    undefined
    boolean
    symbol(ES6新增)

内置对象: 对象子类型(注意:没有null/undefined),实质上是内置函数;

String
Number
Boolean
Object
Function
Array
Date
RegExp
Error

属性描述符

value
writable  是否可以修改属性的值。
    Object.defineProperty( myObject, "a", {
        value: 2,
        writable: false, // 不可写!
        configurable: trueenumerable: true
    } );
    myObject.a = 3;
    myObject.a; // 2, 严格模式下直接报错TypeError
    
enumerable 枚举
configurable:
    配置修改属性描述符,单向的,一旦设置后续无法修改
    会让delete删除失效
    例外:当configurable:false时 -> writable可以true->false,但是无法false->true;

不变性

1.对象常量:
    场景:创建一个正真常量,不可修改/删除/重定义
    方法:writable:false + configurable:false;
2.禁止扩展:
    场景:禁止添加属性,且保留原有属性;
    方法:Object.preventExtensions(obj)
3.密封:
    场景:禁止添加属性/重新配置/删除现有属性,但可以修改属性的值;
    方法:Object.seal(...)
    原理:内部会调用Object.preventExtensions(obj),然后把现有所有属性添加configurable:false4.冻结:
    场景:禁止修改一切属性内容,可应用在对象上的级别最高的不可变性(引用类型限制不到,如果如要深层冻结,需要遍历所有内容,类似深层拷贝)
    方法:Object.freeze(..)
    原理:内部调用Object.seal(...),把所有数据访问数据标记为writable:false