# 變數
- 調用為宣告的變數會報錯
console.log(message); | |
// 提示錯誤:message is not defined |
- 只宣告,未定義(不賦值)
var message; | |
console.log(message); | |
// 提示錯誤:undefined |
- 宣告變數可以不使用關鍵字 var,這只在非嚴格模式下適用;嚴格模式下會提示錯誤;
非嚴格模式下:嚴格模式下:message = 100;
console.log(message);
// 輸出 100
"use strict";
message = 100;
console.log(message);
// 提示錯誤:message is not defined
# 常數
宣告常數時必須初始化。且定義後不可修改。
const message = 100; | |
console.log(message); |
# 原始數據類型
JavaScript
只有五種基本數據類型( boolean
null
undefined
number
string
)和一種複雜數據類型 Object
。
關於各種數據類型對布林類型的轉換關系。
數據類型 | 轉換為 true | 轉換為 false |
---|---|---|
boolean 類型 | true | false |
string 類型 | 任何非空字符串 | “”(空字符串) |
number 類型 | 任何非零數字值(包括無窮大) | 0 、 0.0 和 NaN |
Object 類型 | 任何對象 | null |
undefined | underfined |
:::note info
關於 NaN
:NaN
表示不是一個數字 但是屬於 number
類型
與任何值不相等包括自身
:::
# 字符串
在 JavaScript
中字符串不可以改變長度。那麼當修改字符串時實際上並不是在原字符串上進行修改,而是在創建一個一個變數,賦值為修改的內容。然後銷毀原字符串。
# 包裝類型
在 JavaScript
語言中,原始類型與包裝類型創建的數據在使用上沒有任何差異
定義變數的兩種方式
// 直接 / 字面量 量方式定義 | |
var bool = true; | |
// 構造函數方式 | |
var Bool = new Boolean(true); |
創建對象的語法格式 new 構造函數 (); 例如 var Bool = new Boolean(true);
表示創建一個值為 true
的變數 Bool
三種包裝類型分別是布林類型、數字類型、字符串類類型
var Bool = new Boolean(true); | |
var Num = new Number(100); | |
var Str = new String("this is message"); |
判斷包裝類型不能使用 typeof
而是使用 instanceof
。語法結構變數名 / 對象名 instanceof
構造函數 / 數據類型
console.log(Str instanceof String); |
# 特殊類型
# undefined
得到 undefined
這個值的情況
- 宣告變數但未初始化值時。
var msg; | |
console.log(msg); |
- 宣告並初始化值為
undefined
時。
var msg1 = undefined; | |
console.log(msg1); |
函數中的
return
語句的默認返回值。函數中的
return
語句的返回值的設置為undefined
訪問某一對象中不存在的屬性時。
# null
null
是 5 個基本類型的一個,但是得到的類型是 object
。這是 JavaScript
語言的曆史遺留問題 / 當初設計的紕漏。所以當我們判斷 null
類型時可以使用特殊方法 console.log(Object.prototype.toString.call(null));
# undefined 與 null 的關係
undefined
派生於 null
。他們兩個值相等但類型不等。
console.log(undefined == null); // 結果 true 說明值相等 | |
console.log(undefined === null); // 結果 false 說明類型不等 |
# 類型轉換
關鍵點 | 隱式類型轉換 | 顯式類型轉換 |
---|---|---|
JavaScript 官方規範 | 官方未提及 | 明確表明 |
執行效率 / 性能 | 整體較優 | 整體較弱 |
難易程度 | 有些難度 | 容易 |
# 隱性類型轉換
欲轉換為 | 轉換符號 | 說明 | 範例 |
---|---|---|---|
布林 | !! | 將數據轉換為布林類型,在數據前加 !! 即可 | !!"this is message" !!11 |
數字 | + | 將數據轉換為數字類型,在數據前加 + 即可 | +"this is message" +true |
字符串 | ""+ | 將數據轉換為字符串類型,與空字符串相加即可 (位置無關) | "" + 100 "" + true |
- 如果存在字符串的話,按照字符串的拼接操作
- 沒有字符串,而存在數字值的話,按照算數運算操作
# 顯式類型轉換
顯示類型轉換則是利用類型的構造方法
// 轉化為 boolean 類型 | |
console.log(typeof Boolean("this is message")); | |
console.log(typeof Boolean(100)); | |
// 轉化為 number 類型 | |
console.log(typeof Number("100")); | |
console.log(typeof Number(true)); | |
// 轉化為 string 類型 | |
console.log(typeof String(100)); | |
console.log(typeof String(true)); |
關於轉換為數字時 JavaScript
提供了提供了兩個函數用戶轉換為 number
類型的整數和浮點數。
console.log(parseInt(11.11)); | |
console.log(parseFloat(11.11)); |
但需要注意的是:轉換為整型即 parseInt
函數,如果包含小數則將小數部分舍掉,並不會四捨五入計算。
console.log("100轉化為", parseInt("100")); | |
console.log("100.55轉化為", parseInt("100.55")); | |
console.log("100轉化為", parseFloat("100")); | |
console.log("100.55轉化為", parseFloat("100.55")); | |
/* | |
輸出結果為: | |
100 轉化為 100 | |
100.55 轉化為 100 | |
100 轉化為 100 | |
100.55 轉化為 100.55 | |
*/ |
關於轉換為 string
類型 JavaScript
還提供一個 toString
方法。
var num = 100; | |
var bool = true; | |
console.log(typeof num.toString()); | |
console.log(typeof bool.toString()); |