es6中const定義的屬性是否可以改變_為什么有人說const並非一定為常量


原文鏈接:http://www.fly63.com/article/detial/952

由一個有個問題引入:const定義的對象屬性是否可以改變?如果你面試回答不可以,那么面試官會告訴你回答錯了,這難道const定義的並非一定為常量?下面先看下const的定義:

 

const是用來定義常量的,而且定義的時候必須初始化,且定義后不可以修改。

這對於基本類型的數據而言:如果定義的時候不初始化值的話就會報錯,錯誤內容就是沒有初始化。並且const定義的基本數據類型的變量確實不能修改。例如:

1、不初始化的情況

const PI // Uncaught SyntaxError: Missing initializer in const declaration

2、修改變量的情況

const PI=3.14159 PI=3 Uncaught TypeError: Assignment to constant variable.

 

上面說的const定義的屬性可變,是針對對象或者數組的。例如:

1、const定義對象:

const Obj = {}; Obj.name = "fly63"; console.log(Obj.name); // 打印fly63

2、const定義數組

Arr=[3,4] Arr[0]=1 console.log(Arr) //輸出[1,4] //不應許直接賦值,回報錯:Uncaught TypeError: Assignment to constant variable. Arr=[1,4]

 

為什么會這樣呢?這是由於對象或者數組屬於引用數據類。

const實際上保證的,並不是變量的值不得改動,而是變量指向的那個內存地址所保存的數據不得改動。
對於簡單類型的數據(數值、字符串、布爾值),值就保存在變量指向的那個內存地址,因此等同於常量。但對於復合類型的數據(主要是對象和數組),變量指向的內存地址,保存的只是一個指向實際數據的指針,const只能保證這個指針是固定的(即總是指向另一個固定的地址),至於它指向的數據結構是不是可變的,就完全不能控制了。因此,將一個對象聲明為常量必須非常小心。  

 

const定義引用數據類,不能修改指針指向新的對象 ,但可以修改它指向的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM