首先,js的typeof返回的是字符串
一共有 “number”, “string”, “boolean”, “object”, “undefined” “function”
其實function也是object,為什么這么返回我也不知道
在進行( - * / % )運算時
基本類型的轉(zhuǎn)換形式
先說加,這個與其他的不太一樣。無論什么類型,遇到string都會轉(zhuǎn)換成字符串。比如
true '1' => 'true1'undefined '1' => 'undefined1'null '1' => 'null1'
其余時候是轉(zhuǎn)換成數(shù)字。
null, false => 0undefined => NaNtrue => 1
其他運算符,那就沒辦法做字符串拼接操作了,統(tǒng)一轉(zhuǎn)化成"number"類型(即使是string類型也不例外)
"a1" => NaN"1" => 1
大概很好理解吧,如果是純數(shù)字就能轉(zhuǎn),不是純數(shù)字,就會轉(zhuǎn)成NaN
對象
分類討論
如果是 ,會調(diào)用toString()方法,
JavaScript調(diào)用該valueOf方法將對象轉(zhuǎn)換為原始值。您很少需要自己調(diào)用該valueOf方法;
當(dāng)遇到期望原始值的對象時,JavaScript會自動調(diào)用它。默認(rèn)情況下,該valueOf方法由后代的每個對象繼承Object。每個內(nèi)置核心對象都會覆蓋此方法以返回適當(dāng)?shù)闹?。如果對象沒有原始值,則valueOf返回對象本身。
這是mdn關(guān)于valueOf的描述
我的理解是,首先,js一切皆為對象。包括string,number,boolean。
上面這幾種,他們是有原始值的,所以valueOf()會直接返回本身。
function MyNumberType(n) { this.number = n;}MyNumberType.prototype.valueOf = function() { return this.number;};var myObj = new MyNumberType(4);myObj 3; // 7
if判定條件里,應(yīng)該是要先轉(zhuǎn)化成boolean類型,
如null, ‘’, undefined, NaN, 0 => false