JS基礎知識(1)
阿新 • • 發佈:2018-11-22
內建型別
js有七種內建型別,七種內建型別又分為兩大型別:基本型別和物件(Object)。
六種基本型別: null,undefined,boolean,number,string,symbol。
JS 的數字型別是浮點型別的,沒有整型。NaN 也屬於 number 型別,並且 NaN 不等於自身。
物件(Object)是引用型別,在使用過程中會遇到淺拷貝和深拷貝的問題。
let a = { name: 'FE' } let b = a b.name = 'EF' console.log(a.name) // EF
Typeof
typeof 對於基本型別,除了 null 都可以顯示正確的型別
typeof 對於物件,除了函式都會顯示 object
對於 null 來說,雖然它是基本型別,但是會顯示 object
如果我們想獲得一個變數的正確型別,可以通過 Object.prototype.toString. call(xx)。這樣我們就可以獲得類似 [Object Type] 的字串。
let a // 我們也可以這樣判斷 undefined a === undefined // 但是 undefined 不是保留字,能夠在低版本瀏覽器被賦值 let undefined = 1 // 這樣判斷就會出錯 // 所以可以用下面的方式來判斷,並且程式碼量更少 // 因為 void 後面隨便跟上一個組成表示式 // 返回就是 undefined a === void 0
instanceof
instanceof 可以正確的判斷物件的型別,因為內部機制是通過判斷物件的原型鏈 中是不是能找到型別的 prototype。
//我們也可以試著實現一下 instanceof function instanceof(left, right) { let prototype = right.prototype // 獲得型別的原型 left = left.__proto__ // 獲得物件的原型 while (true) { // 判斷物件的型別是否等於型別的原型 if (left === null) return false if (prototype === left) return true left = left.__proto__ } }
型別轉換
轉Boolean
在條件判斷時,除了 undefined, null, false, NaN, '', 0, -0,其他所 有值都轉為 true,包括所有物件。
物件轉基本型別
物件在轉換基本型別時,首先會呼叫 valueOf 然後呼叫 toString。並且這兩個方 法你是可以重寫的。 當然你也可以重寫 Symbol.toPrimitive ,該方法在轉基本型別時呼叫優先順序最高。
let a={
valueOf()
{
return 0;
},
toString()
{
return '1';
},
[Symbol.toPrimitive]()
{
return 2;
}
}
1 + a // => 3 '1' + a // => '12'
四則運算子
只有當加法運算時,其中一方是字串型別,就會把另一個也轉為字串型別。其 他運算只要其中一方是數字,那麼另一方就轉為數字
1 + '1' // '11'
2 * '2' // 4
[1, 2] + [2, 1] // '1,22,1'
// [1, 2].toString() -> '1,2'
// [2, 1].toString() -> '2,1'
// '1,2' + '2,1' = '1,22,1'
對於加號需要注意這個表示式 'a' + + 'b' 'a' + + 'b' // -> "aNaN"