[JavaScript]オブジェクトを一定のままにします.freeze()


Object.freeze

  • Object.freeze()メソッドでオブジェクトをフリーズします.
  • フリーズされたオブジェクトは変更できません.
  • How to Use

    const obj = {
      prop: 42
    };
    
    Object.freeze(obj);
    
    obj.prop = 33;
    // Throws an error in strict mode
    
    console.log(obj.prop);
    // expected output: 42
    
  • Object.フリーズするオブジェクトオブジェクトをフリーズします.
  • Other examples

    var o1 = {
        name: 'kim',
        score: [1, 2]
    }
    o1.name = 'lee';
    console.log(o1);
  • Object.freezeを使わなければkimからleeになることを確認できます.ここでfreezeを使用すると変更できます.
  • var o1 = {
        name: 'kim',
        score: [1, 2]
    }
    Object.freeze(o1);
    o1.name = 'lee';
    console.log(o1);

    金が変わらない
  • 李が、そのままの姿を見せている.
  • Notice!

  • の凍結を解除するコマンドも提供されません.一度解凍する正式な方法は存在しない.コピーする方法はありますが…freezeとは、オブジェクトのpropertyをフリーズすることです.ない番組をもう一つ追加しましょう.propertyの値がオブジェクトの場合、制限することはできません.
  • o1.city = 'seoul';
    →エラー
    o1.score.push(3);
    →pushでいいです.このオブジェクトは別の場所に格納されるため、PropertyはRapperのみを格納します.もしそうなら、対象も凍らせるべきです.
    Object.freeze(o1.score);
    →上記のコマンドを実行するとエラーが発生します.その相手まで凍ってしまったからだ.
    C:\Users\yuri\Desktop\TEST\freeze-study\freeze-study.js:9
    o1.score.push(3);
             ^
    
    TypeError: Cannot add property 2, object is not extensible
        at Array.push (<anonymous>)
        at Object.<anonymous> (C:\Users\yuri\Desktop\TEST\freeze-study\freeze-study.js:9:10)

    object.freezeとconstの違い

  • freezeでは値自体の変更は許可されず、constでは名前が示す値を他の値に変更することは許可されません.
  • の2つを同時に使用すると、この移動可能な値をより強力に制御することができる.
  • const o1 = {
        name: 'kim'
    }
    Object.freeze(o1);
    const o2 = {
        name: 'lee'
    }
    o1 = o2;
    PS C:\Users\yuri\Desktop\TEST\freeze-study> node .\freez_const.js
    C:\Users\yuri\Desktop\TEST\freeze-study\freez_const.js:8
    o1 = o2;
       ^
    
    TypeError: Assignment to constant variable.
        at Object.<anonymous> (C:\Users\yuri\Desktop\TEST\freeze-study\freez_const.js:8:4) 
        at Module._compile (internal/modules/cjs/loader.js:1137:30)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
        at Module.load (internal/modules/cjs/loader.js:985:32)
        at Function.Module._load (internal/modules/cjs/loader.js:878:14)
        at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
        at internal/main/run_main_module.js:17:47
    →上記のコードを実行中に次のエラーが発生します.constによるエラー.キーワード変数がconstではなくvarの場合、問題は発生しません.
    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
    https://opentutorials.org/module/4075/24884