1. 類型轉換
01) 其餘數據類型到Boolean類型轉換
經過Boolean() 函數轉換express
【Boolean true false】
String 非空字符串 ""
Number 任何非0 0和NaN
Object 任何對象 null
Undefined n/a undefined (n/a not applicable 不適用)
例如:
Boolean(""); //false
Boolean(0); //false
Boolean(NaN); //false
Boolean(null) //false
Boolean(undefined) //false
Boolean("briup"); //true
Boolean(1); //trueapp
02) 其餘數據類型到數值類型轉換
1.Number()
1) 若是轉換的值是null,undefined,boolean,number
Number(true); //1
Number(false); //0
Number(null); //0
Number(undefined); //NaN
Number(10); //10 若是是數字值,原樣輸出
2) 若是是字符串:
Number("123"); //若是僅包含數值,轉換爲對應的數值
Number("234.1");//解析爲對應的小數
Number("+12.1");//首位爲符號位,其他爲爲數值,轉換爲對應的數值
NUmber("1+2.3");//NaN 符號位出如今其餘位置,解析爲NaN
Number("0xa"); //若是僅包含十六進制格式,轉爲爲對應的十進制的值
Number("010"); //【注意!】不會當作八進制被解析,結果爲10
Number(""); //空字符串被轉換爲0
Number("123ac");//包含其餘字符: NaN
Number(" 12"); //12
2.parseInt()
1) 若是轉換的值是null,undefined,boolean,number
parseInt(true); //NaN
parseInt(false); //NaN
parseInt(null); //NaN
parseInt(undefined);//NaN
parseInt(10); //10 若是是整數值,原樣輸出
parseInt(10.3); //10 若是是小數,捨去小數點一級後面的內容
2) 若是是字符串:
parseInt("123"); //123;若是僅包含數值,轉換爲對應的數值
parseInt("234.1");//234;小數點後面的數值省略
parseInt("+12.1");//12; 首位爲符號位,其他爲爲數值,轉換爲整數
parseInt("0xa"); //10; 若是僅包含十六進制格式,轉爲爲對應的十進制的值
parseInt("010"); //10; 【注意!】不會當作八進制被解析,結果爲10
parseInt(""); //NaN;空字符串被轉換爲NaN
parseInt("1+2.3");//1; 若是首位爲數值,依次向後解析,找到連續的數值,直到遇到第一個非數值的,將以前獲取的數值轉換爲Number返回
parseInt("123ac");//123;
3.parseFloat()
與parseInt() 相似,可是也有不一樣:
1.字符串中的第一個小數點是有效的,而第二個小數點則無效其後的內容會被省略
2.始終忽略前導0
parseFloat("22.3.4") //22.3
parseFloat("022.34"); //22.34
3.不能解析0x
03) 其餘數據類型到字符串類型轉換
1. toString()函數
默認狀況下,toString()是以十進制格式返回數值的字符串表示,經過傳遞參數,能夠輸入以二進制,八進制,十六進制乃至任意有效進制格式的字符串值
var num = 10;
num.toString(); "10"
num.toString(2); "1010"
num.toString(8); "12"
num.toString(16); "a"
可是null ,undefined 沒有toString() 方法
null.toString() //報錯 TypeError: null has no properties
undefined.toString(); //報錯 TypeError: undefined has no properties
2. String() 構造函數
String(null) "null"
String(undefined); "undefined"函數
2,操做符
01) 一元操做符
++,--,+,-操做符應用任何類型數值都返回一個【數值類型】,先將任意類型的值轉換爲Number而後進行運算(經過Number()方法進行轉換)
1.遞增 ++
var a = "11";
1+a++;
1+ ++a;
前置:操做該變量以前進行遞增或者遞減操做
後置:操做該變量以後進行遞增或者遞減操做
對任意數據類型的操做數都適用,使用前先將其轉換爲數字(Number()),而後再進行運算,在應用於對象的時候,優先先調用對象的valueOf方法,以取得一個可供操做的值,若是子類對象僅重寫了toString(),調用該方法。
2.遞減 --
前置:操做該變量以前進行遞增或者遞減操做
後置:操做該變量以後進行遞增或者遞減操做
對任意數據類型的操做數都適用,使用前先將其轉換爲數字,而後再進行運算在應用於對象的時候,先調用對象的valueOf方法,以取得一個可供操做的值,若是子類對象僅重寫了toString(),調用該方法。
3.加 +
至關於調用Number();
var a = "12"
+a ; // 12 至關於調用了Number("12")
4.減 -
將一元減應用於數值時,數值會變成負數。
將一元減應用於非數值時,遵循與一元加操做符相同的規則,最後將獲得的數值轉化爲負數編碼
02) 布爾操做符, 非(NOT)
邏輯非 !
該操做符應用任何類型數值都返回一個【布爾值】。先將任意類型的數值轉換爲Boolean,而後取反,
!a ==> !Boolean(a)
!0 //true
!"" //true
!NaN //true
!false //truespa
連用兩次邏輯非 ,就能夠將任意數據類型轉化爲Boolean類型,!!a ==> Boolean(a)
!!"" //false
03) 邏輯與 && (同真才真,有假則假) 也被稱爲短路語句
可應用於任意數值。若是有一個操做數不是布爾類型,邏輯與就不必定返回boolean類型對象
1.若是第一個操做數是
null,NaN,undefined,false,0,""可被轉換爲false的值的時候返回該值
2.若是第一個數其餘,返回第二個數
var s1 = 8;
var s2 = "briup";
var s3 = "";
var result = s1 && s2; //briup
var result2 = s3 && s2; //空字符串字符串
04) 邏輯或 ||(有真則真,同假才假)
false ||
若是兩個操做數都是null,NaN,undefined,false,0,""可被轉換爲false的值的時候返回該值string
若是第一個操做數是null,NaN,undefined,false,0,"" 則返回第二個操做數
05) 加性操做符
1. 加法 +
m + n
1) 當m,n不爲String,Object類型的時候,先將m,n轉換爲Number類型,而後再進行計算
true + false; //1;Number(true)+Number(false);
true + 1; //2;Number(true) + 1
null + undefined; //NaN;Number(undefined) -> NaN
2) 當m,n有一個爲String,不管另外一個操做數爲什麼(但不爲對象)都要轉換爲String,而後再進行拼接
"1" + true; // 1true
"1" + undefined;// 1undefined
"1" + 1; // 11
3) 當m,n 有一個爲對象,若是該對象既重寫toString,又重寫了valueOf方法,先調用valueOf方法獲取返回值,將該返回值和另一個操做數進行運算。若是該對象沒有重寫valueOf方法,將調用toString方法獲取返回值,將該返回值和另一個操做數進行運算。
var o = {
name:"briup",
valueOf:function(){
return "1";
}
}
o+1; //2;o+1
2. 減法 -
返回值爲【數值類型】。不管操做數爲任何類型,先將其使用Number()轉換器轉換爲Number類型,而後再計算。
true - 1; //0; 1-1
null - true; //-1 ; 0-1
1 - undefined //NaN
var o = {
name:"briup",
valueOf:function(){
return 1;
}
}
o-1; //0; 1-1
06) 乘性操做符
返回值爲【數值類型】當操做數爲非數值的時候執行自動的類型轉化Number()
1. 乘法 *
若是兩個數都是數值,執行常規的乘法計算
若是一個操做數是NaN,結果爲NaN
超過數值範圍返回Infinity
若是有一個操做數不是數值,則先調用Number()將其轉換爲數值。
2. 除法 /
若是一個操做數是NaN,結果爲NaN (0/0 ; NaN)
一個非0值除0 Infinity
若是有一個操做數不是數值,則先調用Number()將其轉換爲數值。
var s1 = 5;
var s2 = 2;
var result = s1/s2; //2.5
3. 取餘 %
若是兩個數都是數值,執行常規的取餘計算
若是一個操做數是NaN,結果爲NaN(任意數%0 ; NaN)
若是有一個操做數不是數值,則先調用Number()將其轉換爲數值。it
07) 關係操做符
< > <= >= ,返回一個【Boolean】值
1.若是兩個操做數是字符串,比較字符串中對應位置的每一個字符的字符編碼值
"a">"b" //false
"1">"a" //false
2.若是一個操做數是數值,將另一個操做數也轉換爲數值進行比較
"3">1; //true
3>true; //true 3>Number(true)
3>undefined; //false Number(undefined)=NaN ;任何數和NaN比較結果都爲false
3.若是一個操做數是對象,先調用valueOf(),再調用toString()將返回值與另一個操做數比較,若是沒有重寫toString() valueOf()則始終爲false
var o = {
name:"briup",
valueOf:function(){
return "13";
}
}
o>2 // true ; "13">2
08) 相等操做符,返回【Boolean】
1.相等和不相等 ==, != (先轉換在比較)
1.若是兩個操做數都爲字符串,比較字符序列
2.若是兩個操做數都爲數值類型,比較值的是否相等
3.若是兩個操做數都是對象,比較的對象的引用
4)null == undefined //true
5)NaN與任何值(包括NaN)相等比較結果爲false,不等結果爲true.
6)若是一個操做數爲number類型,另一個操做數爲undefined,null,boolean,string之一,先將這些數據類型轉換爲數值,再進行比較io
2.全等和不全等
僅比較不轉換,先比較兩個數所屬的數據類型,若是類型不一樣則不一樣,若是類型相同,再繼續比較兩個數的值
console.log("55" == 55); true
console.log("55" === 55);false
null == undifined; //true null派生自undifined
null === undifined; //false
09) 三目運算符 ? :
variable = boolean_expression ? true_value : false_value;
若是boolean_expression爲true,將true_value賦給variable,不然將false_value賦給variable
例如:求任意兩個數之間最大值
function max(m,n){
return m>n?m:n; //若是m>n爲true返回m,若是m>n爲false,返回n
}
10) 賦值運算符 =
將右側的值賦給左側的變量
能夠和其餘算術運算符連用 *= /= %= += -=
var a = 4;
a *= 3; //=> a = a*3;
11) 逗號操做符 能夠在一條語句中執行多個操做 var num1=1,num2 = 2, num3 = 3;