• 【JavaScript】Object 静态方法(二)


    以下内容为学习记录,可以参考 MDN 原文。

    环境

    • node v12.18.1
    • npm 6.14.5
    • vscode 1.46
    • Microsoft Edge 83

    概念

    定义在 Object 构造函数之上的方法,称为静态方法(static method)。

    冻结

    Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。

    Object.isFrozen() 方法判断一个对象是否被冻结。

    const obj = {
      prop: 42
    };
    
    Object.freeze(obj);
    
    obj.prop = 33;
    // Throws an error in strict mode
    
    console.log(obj.prop);
    // expected output: 42
    

    扩展

    Object.preventExtensions() 方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。

    Object.isExtensible() 方法判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)。

    const object1 = {};
    
    Object.preventExtensions(object1);
    
    try {
      Object.defineProperty(object1, 'property1', {
        value: 42
      });
    } catch (e) {
      console.log(e);
      // Expected output: TypeError: Cannot define property property1, object is not extensible
    }
    

    密封

    Object.seal() 方法封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。
    当前属性的值只要原来是可写的就可以改变。

    Object.isSealed() 方法判断一个对象是否被密封。

    const object1 = {
      property1: 42
    };
    
    Object.seal(object1);
    object1.property1 = 33;
    console.log(object1.property1);
    // expected output: 33
    
    delete object1.property1; // cannot delete when sealed
    console.log(object1.property1);
    // expected output: 33
    

    is

    Object.is() 方法判断两个值是否是相同的值。

    Object.is('foo', 'foo');     // true
    Object.is(window, window);   // true
    
    Object.is('foo', 'bar');     // false
    Object.is([], []);           // false
    
    var foo = { a: 1 };
    var bar = { a: 1 };
    Object.is(foo, foo);         // true
    Object.is(foo, bar);         // false
    
    Object.is(null, null);       // true
    
    // 特例
    Object.is(0, -0);            // false
    Object.is(0, +0);            // true
    Object.is(-0, -0);           // true
    Object.is(NaN, 0/0);         // true
    
  • 相关阅读:
    C++ 派生类对象的构造与析构过程
    C++ lvalue(左值)和rvalue(右值)
    enum class 用法
    gcc 编译选项
    using用法总结
    const用法及与constexpr区别总结
    Lanbda表达式
    CMake 用法总结(转载)
    ElasticSearch学习文档
    Maven学习笔记
  • 原文地址:https://www.cnblogs.com/jiangbo44/p/13472786.html
Copyright © 2020-2023  润新知