基本資料型別:number,boolean,string,null,undefined,symbol(es6)
typeof null; // "object",歷史遺留的bug
基本資料型別的值儲存在棧記憶體,儲存的是值。
複雜資料型別(物件型別)的值儲存在堆記憶體,位址儲存在棧記憶體。當我們將乙個變數複製給另乙個變數時,複製的是位址,指向的是同一塊記憶體,當其中乙個物件改變時,另乙個物件也會變化。
【注】當函式的引數時物件時:
function test(person)
return person
}const p1 =
const p2 = test(p1)
console.log(p1) // -> ?
console.log(p2) // -> ?
需要注意的一點是,函式傳參是傳遞物件指標的副本。
typeof 可以判斷除了null之外的基本資料型別,但不能判斷複雜資料型別,除了函式都返回"object"。
instanceof內部機制是通過原型鏈來判斷,可以判斷複雜資料型別,但是不能直接判斷基本資料型別。
instanceof的實現原理:
// left instanceof right 在left的原型鏈中一層層網上找是否有原型等於right的原型,直到最頂層null(objec.prototype.__proto__)
function instance_of(left, right)
if (lp === rp)
lp = lp.__proto__; // 繼續向上一層原型鏈找
}}
可以自定義instanceof的[hasinstance],讓instanceof判斷基本型別
class primitivenumber
}1 instanceof primitivenumber; // true
轉字串
number:1 => '1'
boolean/function/symbol:false => 'false',function foo(){} => "function foo(){}"
array:[1,2] => '1,2'
物件: => "[object object]"
轉數字
string:『1』 =>1,'a'=>nan
array: => 0, [1] => 1, [1,2,3]=>nan
除了陣列的引用型別: => nan
null:null => 0
symbol:拋錯
轉boolean
undefined、null、false、nan、'',0,-0 *****》 false
其他所有值都轉為true。
【注】物件轉基本型別,會呼叫內建的[[toprimitive]]函式,該函式演算法邏輯一般如下:
可以重寫[symbol.toprimitive]。
四則運算符中的型別轉換
『+』:如果一方為字串,就會把另一方也轉換為字串;如果一方不是字串或數字,那麼會將它轉換為字串或數字。
其它運算子:只要其中一方是數字,另一方就會被轉換為數字。
'a' + + 'a';// 'anan'
比較運算中的型別轉換
如果是物件,就通過toprimitive
轉換物件
『==』和『===』的區別
『==』會首先判斷雙方是否是同一型別,如果不是,會進行型別轉換。
判斷『x==y』的流程如下:
型別是否相同?相同的話就相當於比較'x===y'
x和y是否分別為null或undefined,是的話返回true
x和y兩者的型別是否為string和number,是的話將string轉換為number,再回到步驟1
x和y其中一方是否為boolean,是的話將boolean轉為number,再回到步驟1
x和y是否其中一方為object,且另一方為string/number/symbol,是的話將object轉換為基本型別,再回到步驟1
『===』是嚴格等於,判斷雙方的型別和值是否相同。
參考資料:
js資料型別
一.原始資料型別 1.typeof 運算子。var a alert typeof a 輸出結果為 undefined 2.undefined 未定義 型別 當變數未定義時,該變數值被預設為undefined 如 var a alert typeof a 輸出結果為 undefined 注意值unde...
js資料型別
js 基本資料型別 undefined null boolean number string js 操作符 typeof檢測給定變數的資料型別。返回值表示的型別 undefined 值未定義。boolean 值為布林型別。string 值為字串。number 值為數字。object 值為物件或nul...
js資料型別
var num 1,boo true,aa null,bb,str mary arr 1,2,4,8 obj arrnew new array 1,2,3 strnew new string 1,2,3 用 typeof 檢測變數的型別 console.log number typeof num n...