Skip to content

Instantly share code, notes, and snippets.

@pajaydev
Last active September 22, 2020 20:52
Show Gist options
  • Select an option

  • Save pajaydev/f28b06c0486f8388c24c36c1861b080a to your computer and use it in GitHub Desktop.

Select an option

Save pajaydev/f28b06c0486f8388c24c36c1861b080a to your computer and use it in GitHub Desktop.

Revisions

  1. pajaydev revised this gist Sep 22, 2020. 1 changed file with 7 additions and 6 deletions.
    13 changes: 7 additions & 6 deletions js-protect-objects.md
    Original file line number Diff line number Diff line change
    @@ -1,13 +1,14 @@
    # Object.seal vs Object.freeze vs Object.preventExtensions()
    ## Object.seal()
    ```javascript
    /**
    * The Object.seal() method seals an object: that is, prevents new properties to be getting added and making all existing properties
    * non-configurable.
    *
    * @Reference:
    * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal
    */
    ```javascript

    const language = {
    name: 'JavaScript',
    author: 'Brendan Eich'
    @@ -25,14 +26,15 @@ console.log(language); //{"name":"Java","author":"Brendan Eich"}
    ```

    ## Object.preventExtensions()
    ```javascript
    /**
    * Object.preventExtensions() prevents new properties being getting added. We can modify or delete the properties.
    *
    * @Reference:
    * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensionsl
    *
    */
    ```javascript

    const language = {
    name: 'JavaScript',
    author: 'Brendan Eich'
    @@ -50,9 +52,8 @@ language.name = "Java"; // allowed
    console.log(language); //{"name":"Java"}
    ```



    ## Object.freeze()
    ```javascript
    /**
    * Object.freeze() freezes the object, that means it prevents new properties from being added, prevents existing properties getting removed, or existing properties to get changed ot their enumerability, configurability or writability getting changed.
    *
    @@ -62,7 +63,7 @@ console.log(language); //{"name":"Java"}
    * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
    *
    */
    ```javascript

    Object.freeze(language);

    // adding property
    @@ -78,7 +79,7 @@ console.log(language); //{"name":"JavaScript","author":"Brendan Eich"}
    ## Comparison

    | Operations | Object.seal | Object.preventExtensions | Object.freeze
    | --- | --- | --- | --- | --- |
    | --- | --- | --- | --- |
    | Adding | :x: | :x: | :x: |
    | deleting | :x: | :white_check_mark: | :x: |
    | modifying | :white_check_mark: | :white_check_mark: | :x: |
  2. pajaydev created this gist Sep 22, 2020.
    87 changes: 87 additions & 0 deletions js-protect-objects.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,87 @@
    # Object.seal vs Object.freeze vs Object.preventExtensions()
    ## Object.seal()
    /**
    * The Object.seal() method seals an object: that is, prevents new properties to be getting added and making all existing properties
    * non-configurable.
    *
    * @Reference:
    * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal
    */
    ```javascript
    const language = {
    name: 'JavaScript',
    author: 'Brendan Eich'
    };

    Object.seal(language)
    // adding property
    language['createdAt'] = "Netscape"; // not allowed
    // deleting property
    delete language.name; // not allowed
    // changing property
    language.name = "Java"; // allowed

    console.log(language); //{"name":"Java","author":"Brendan Eich"}
    ```

    ## Object.preventExtensions()
    /**
    * Object.preventExtensions() prevents new properties being getting added. We can modify or delete the properties.
    *
    * @Reference:
    * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensionsl
    *
    */
    ```javascript
    const language = {
    name: 'JavaScript',
    author: 'Brendan Eich'
    };

    Object.preventExtensions(language);

    // adding property
    language['createdAt'] = "Netscape"; // not allowed
    // deleting property
    delete language.author; // allowed
    // changing property
    language.name = "Java"; // allowed

    console.log(language); //{"name":"Java"}
    ```



    ## Object.freeze()
    /**
    * Object.freeze() freezes the object, that means it prevents new properties from being added, prevents existing properties getting removed, or existing properties to get changed ot their enumerability, configurability or writability getting changed.
    *
    * it freezes SHALLOW, nested objects is not frozen here
    *
    * @Reference:
    * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
    *
    */
    ```javascript
    Object.freeze(language);

    // adding property
    language['createdAt'] = "Netscape"; // not allowed
    // deleting property
    delete language.author; // not allowed
    // changing property
    language.name = "Java"; //not allowed

    console.log(language); //{"name":"JavaScript","author":"Brendan Eich"}
    ```

    ## Comparison

    | Operations | Object.seal | Object.preventExtensions | Object.freeze
    | --- | --- | --- | --- | --- |
    | Adding | :x: | :x: | :x: |
    | deleting | :x: | :white_check_mark: | :x: |
    | modifying | :white_check_mark: | :white_check_mark: | :x: |