JavaScript 變數是儲存資料值的容器。
-
JS中的變數是鬆散型別的,可以儲存任何型別的資料。
-
JS變數鬆散型別的本質,決定了變數只是在特定時間用於儲存特定值的一個名字而已。 由於不存在定義某個變數必須要儲存何種資料型別值的規則,變數的值及其資料型別可以在指令碼的生命週期內改變。
用var關鍵字宣告的變數,未經初始化時,儲存的是一個特殊的值——undefined。
-
變數初始化僅僅是給變數賦一個值。
-
可以在一條語句中宣告多個變數,初始化或不初始化皆可,變數之間用逗號隔開。
-
使用更具語義的變數名,讓程式碼的可讀性更強。
-
用var關鍵字宣告的變數是定義該變數的作用域中的區域性變數。
-
當使用var關鍵字宣告瞭一個變數時,建立的這個變數是不可配置的,也就是說這個變數無法通過delete運算子刪除。
var num1 = 10;
2 (function num() {
3 var num2 = 10;
4 delete num2;
5 console.log(num2); //10
6 })();
7 delete num1;
8 console.log(num1);
複製程式碼
基本型別值與引用型別值
JS中的變數可以儲存兩種不同型別的值:基本型別值和引用型別值。
在將一個值賦給變數時,解析器必須確定這個值是基本型別值還是引用型別值。
-
基本資料型別:Number、String、Boolean、Null、Undefiend;這5種基本資料型別是按值訪問的,因為可以操作儲存在變數中的實際的值。
-
對於基本型別值,在複製變數的時候,會在新的變數上建立一個新值,這個新值是原值的一個副本,它們相互獨立。
-
基本型別值之間的比較,只是單純的值的比較。
-
引用型別值是儲存在變數中的物件;引用型別值就是指物件。
-
儲存引用型別值的變數,實際上儲存的是一個指向該物件的指標。
-
當複製儲存著物件的某個變數時,複製的其實是指標;複製操作結束後,兩個變數指向同一個物件。
-
對於引用型別值,可以為其新增屬性和方法,也可以修改或者刪除其屬性和方法。
-
在為物件新增屬性和方法時,操作的是實際的物件,因此,改變任何一個變數,都會影響另外一個變數。
此時a和b這兩個記憶體空間是獨立的,對一個記憶體空間值的改變不會影響另一個內容空間。
變數的宣告、定義與初始化
宣告——給變數一個名字,宣告它從此刻開始存在;
定義——給變數分配一個儲存空間;
初始化——給變數的儲存空間賦值。
在JS中,就是這樣子:
1 var x; //宣告——變數x從現在開始存在;
2 x = "hello"; //(定義並)初始化。
複製程式碼
由於JS是一種動態語言,其變數的型別是不固定的,可以隨著儲存值的變化而變化,所以其定義變得無關緊要。
變數的提升
- 普通的var變數,肯定要提升
- 迴圈內部中的var變數,也會提升
- 在函式中的var變數,也是可以提升的