說到隱式類型轉換,首先咱們要明白何時會出現隱式類型轉換?數組
一、數學運算符(+ - * / %),可是加號運算裏不能出現字符串或對象類型數據
二、一元+-(正負操做符)後的數據
三、某些比較運算符
eg:函數
6 - "3" //3 var str = "7"; ++str; //8
一、有字符串的加法運算
二、有對象類型(函數,數組,對象)的加法運算
三、某些比較運算符
四、調用alert、document.write方法code
1+[2, 3] //"12,3" 1+{name: "sf"} //"1[object Object]"
一、取反運算:!表示把這個數據轉成布爾值後取它的反值;!!表示把這個數據轉成布爾值
二、三目運算符
三、條件語句的小括號裏
四、邏輯運算符對象
!{name: "sf"} //false []&&"sf" //"sf"
大於和小於比較:
一、字符串與字符串、字符串與對象、對象與對象比較時,都會轉成字符串,而後對比Unicode碼值
二、其它類型數據,轉成數字對比,NaN和任何值(包括自身)比較均返回false字符串
"18" > 9 //true "18" > "9" //false {name: "sf"} > 9 //console.log()打印結果爲false
相等比較:
一、不一樣類型的原始類型數據,把全部的數據轉成數字後進行對比
二、null與undefined除了它們本身與本身、本身與對方相等,與其它的任何數據都不相等
三、對象與原始類型數據比較時,把對象轉成原始值,再進行比較
四、對象與對象類型比較時,比較的是他們的引用地址,除非引用地址相同,不然都不相等數學
null == undefined //true [null] == null //false ["1"] == true //true {name: "sf"} == {name: "sf"} //false
&&邏輯與,咱們一般稱爲短路運算。從左到右每一項進行Boolean類型的隱式類型轉換,返回第一個布爾值爲false的表達式
||邏輯或,咱們一般稱爲兼容運算。從左到右每一項進行Boolean類型的隱式類型轉換,返回第一個布爾值爲true的表達式it
從左到右每一項依次進行運算返回最後一個逗號後邊的運算結果;console
console.log(1+1, 2+2, 3+3) //2, 4, 6 console.log((1+1, 2+2, 3+3)) //6
首先咱們要明白 , 何時會被看成運算符,何時又會是分割語句的做用
通常當逗號兩邊的表達式運算完須要返回一個確切的值時逗號就會被做爲運算符(我的總結)
eg:for循環
for(var i = 0, j = 0, k; i < 5, j < 10; i++, j++){ k = i + j; } console.log(k) //18
這道題裏,每次i < 5, j < 10
時由於須要返回一個確切的布爾值用於判斷for循環是否繼續,因此會在進行運算後返回j < 10
的布爾值。i++, j++
只是進行遞加操做,也不須要返回一個確切的值,因此這裏的 , 做爲語句分割。object