true + false
// 1
12 / "6"
// 2
"number" + 15 + 3
// 'number153'
15 + 3 + "number"
// '18number'
[1] > null
// true
"foo" + + "bar"
// 'foonan'
'true' == true
// false
false == 'false'
// false
null == ''
// false
!!"false" == !!"true"
// true
['x'] == 'x'
// true
+ null + 1
// 'null1'
[1,2,3] == [1,2,3] // false
0 || "0" && {} // {}
{}++{}+[1] // '0[object object]1'
!+++! // 'truefalse'
newdate(0) - 0
// 0
newdate(0) + 0
// 'thu jan 01 1970 02:00:00(eet)0'
複製**
加法運算子會觸發數字轉換
true + false
==> 1 + 0
==> 1
複製**
除法運算子會觸發字串的數字轉換
加法運算子是從左到右結合,所以先執行"number" + 15
,因為第乙個運算元是字串,加法運算子對15進行字串轉換,第二步也是如此。
如同上乙個一樣,先執行15+3
,因為都是數字,所以不需要進行型別轉換。第二步中,因為乙個運算元中有字串,所以對數字進行字串轉換。
比較運算子會觸發對運算元的數字轉換
[1] > null
==> '1' > 0
==> 1 > 0
==> true
複製**
右邊運算子比左邊運算子具有更高的優先順序,因此+'bar'
表示式先執行。一元加號運算子會觸發對字串進行數字型別轉換,由於字串轉換之後是乙個非法的數字,結果是nan
。第二步執行'foo' + nan
"foo" + + "bar"
==> "foo" + (+"bar")
==> "foo" + nan
==> "foonan"
複製**
==運算子會觸發數字型別轉換,字串'true'
被轉換成nan
,布林true
被轉換成1
==運算子通常會觸發數字型別轉換,但不是null
的情況,null
只能和null
和undefined
進行比較,不能和其他值進行比較。
!!運算子將這兩個字串轉換成布林值true
,因為他們不是空的字串, ==不進行型別轉換,只對布林值的true
進行比較
==運算子會觸發對乙個陣列進行陣列轉換,陣列的valueof()
方法會返回陣列自己,但是因為陣列不是基本型別,velueof
會被忽略。陣列的tostring()
僅僅將['x']
轉換成字串'x'
+會觸發將進行數字型別轉換,和上乙個一樣進行
tostring
操作,會返回乙個空的字串,接下來就進行'' + null + 1
兩邊有同樣型別,不進行型別轉換,由於==檢查值相等而不是引用相等,兩個陣列是兩個不同的例項,所以結果是false
邏輯運算子||
、&&
會進行布林型別轉換,但是會返回原始運算元。0
是false
,'0'
是true
,{}
是true,最後返回{}
所有的運算元都不是基本型別,所以+開始從左邊的觸發數字轉換,陣列和物件的valueof
方法被忽略。使用後備tostring
方法。這裡有乙個訣竅,第乙個{}
不被看作物件,而是被視為塊宣告語句,因此它被忽略。於是開始從後面的+
開始進行評估,的
tostring
返回乙個空字串,再對空字串進行數字轉換是0
{}++{}+[1]
==> ++{}+[1]
==> 0 + {} + [1]
==> 0 + '[object object]' + [1]
==> '0[object object]' + [1]
==> '0[object object]' + '1'
==> '0[object object]1'
複製**
這個可以根據運算子的優先順序去解釋
!+++!
==> (!+) + + (!)
==> !0 + + false
==> true + + false
==> true + '' + false
==> 'truefalse'
複製**
減號運算子會進行數字轉換。date.valueof()
返回自unix紀元以來的毫秒數
new
date(0) - 0
==> 0 - 0
==> 0
複製**
加號運算子觸發預設轉換。date
假定字串轉換為預設值,因此使用tostring()
方法,而不是valueof()
。 JS中的型別轉換
1 隱式型別轉換 如果相等操作的兩個變數不是同一型別,那麼相等運算子會嘗試進行一些型別轉換 比較運算子。運算元可以是任何型別,但是只有數字和字串才能真正執行比較操作。減操作符將兩個運算元都轉換為數字。加操作符,如果乙個運算元是字串,那麼另外乙個運算元也會轉換為字串。一元加會將其運算元轉換為數字。轉換...
js中的型別轉換
運算子 兩個運算元的型別不相同時 物件到數字的轉換 空陣列轉換為數字0 boolean true number 0 number nan number false 0因此 console.log true fasle console.log true true false console.log f...
js中的隱含型別轉換
記錄下平時的知識點 心得等,如果理解有誤還請提出以便及時修正.1 toprimitive obj,type js內部存在toprimitive obj,type 隱含轉換方法,實質意義上是呼叫obj物件的valueof方法及tostring方法將該物件轉換為原始型別,其中,date型別資料預設typ...