夯實Javascript基礎。
基本型別有六種: null,undefined,boolean,number,string,symbol。
基本型別的值是儲存在棧記憶體
中的簡單資料段
基礎型別特性
基礎型別最重要的特性
- 基礎型別是不變的
- 因此:基礎型別沒有splice,sort之類的直接改變變數的方法
- 強行改變基礎型別會報錯
// str 不能呼叫 Array的 sort 和 splice Array.prototype.sort.call('strxyz'); // Uncaught TypeError: Cannot assign to read only property '2' of object '[object String]' Array.prototype.splice.call('strxyz'); // Uncaught TypeError: Cannot assign to read only property 'length' of object '[object String]' // object 可以使用 Array的sort 和 splice Array.prototype.sort.call({x: 1, y: 2}); // {x: 1, y: 2} Array.prototype.splice.call({x: 1, y: 2}); // [] 複製程式碼
- 基礎型別沒有
__proto__
沒有屬性
str.x = 1; console.log(str.x); // undefined 複製程式碼
- 所有對基礎型別屬性的訪問都是訪問的
基本包裝型別
(String、Number、Boolean)當你呼叫 `str.length` 時,實際過程是這樣的: - 建立String型別的一個例項 - 在例項上呼叫指定的方法 - 銷燬這個例項 var str = 'abc'; var _str = new String(str); var len = _str.length; _str = null; console.log(len); 複製程式碼
其他特性
- typeof null === 'object'
- (歷史遺留問題,因為000開頭表示物件,而null全是0)
- 條件判斷時
undefined
null
false
NaN
''
0
-0
為 false,其他都為 true- (條件判斷時會隱式轉換為Boolean)
- JS只有浮點型別(double),沒有整型
1 === 1.0
- NaN 也屬於 number 型別,並且 NaN 不等於自身。
var a = NaN; a !== a;
String
型別是類陣列,具有iterator
typeof String('x')[Symbol.iterator] === 'function'
基礎型別檢測
檢測基礎型別用 typeof
// typeof 只適合檢測 基礎型別
typeof new Date() // 'object'
typeof [] // 'object'
typeof {} // 'object'
typeof console.log // 'function'
複製程式碼
基礎型別轉換
基本型別轉換時,首先會呼叫 valueOf
,然後呼叫 toString
。並且這兩個方法可以重寫。
var a = 1;
var obj = {x: 1};
obj.toString === '[object Object]';
var arr = [2, 3];
arr.toString() === '2,3';
a + obj === '1[object Object]';
a + arr === '12,3';
複製程式碼
Symbol.toPrimitive
該方法在轉基本型別時呼叫優先順序最高。
let a = {
valueOf() {
return 1;
},
toString() {
return '2';
},
[Symbol.toPrimitive]() {
return 3;
}
}
1 + a // => 4
複製程式碼
四則運算
- 在四則運算中,除了'+' 其他操作都會以數字進行計算
- 如果是 + 運算,如果不是所有字面量都是
number
,那麼會轉換為字串(toString
)進行拼接
End
持續更新中,Github資訊更多哦,你的⭐是我最大的支援。檢視詳情,