強(qiáng)制轉(zhuǎn)換
轉(zhuǎn)換成String
1、ToString
var num = 1;
var boo1 = false;
var arr = [1, 2, 3];
var obj = {};
var fn = function () {console.log("我是fn")};
var un1 = undefined;
var nu1 = null;
console.log(num.toString()); // 1
console.log(boo1.toString()); // false
console.log(arr.toString()); // 1,2,3
console.log(obj.toString()); // [object Object]
console.log(fn.toString()); // function () {console.log("我是fn")}
console.log(un1.toString()); // Uncaught TypeError: Cannot read property 'toString' of undefined
console.log(nu1.toString()); // Uncaught TypeError: Cannot read property 'toString' of null
null和undefined這兩個(gè)值沒有toString()方法叶沛,如果調(diào)用他們的方法惰赋,會(huì)報(bào)錯(cuò)
2、String
var num = 1;
var boo1 = false;
var arr = [1, 2, 3];
var obj = {};
var fn = function () {console.log("我是fn")};
var un1 = undefined;
var nu1 = null;
console.log(String(num)); // 1
console.log(String(boo1)); // false
console.log(String(arr)); // 1,2,3
console.log(String(obj)); // [object Object]
console.log(String(fn)); // function () {console.log("我是fn")}
console.log(String(un1)); // Uncaught TypeError: Cannot read property 'toString' of undefined
console.log(String(nu1)); // Uncaught TypeError: Cannot read property 'toString' of null
使用String()函數(shù)做強(qiáng)制類型轉(zhuǎn)換時(shí)蕴侧,對(duì)于Number和Boolean實(shí)際上就是調(diào)用的toString()方法择同,但是對(duì)于null和undefined,就不會(huì)調(diào)用toString()方法净宵。它會(huì)將 null 直接轉(zhuǎn)換為 "null"敲才,將 undefined 直接轉(zhuǎn)換為 "undefined"
轉(zhuǎn)換成數(shù)字
Number
var un = undefined;
var nu = null;
var str1 = '';
var str2 = '34';
var str3 = '34px';
var str4 = 'hello';
var boo1 = false;
var boo2 = true;
var arr1 = [];
var arr2 = [34];
var arr3 = [34, 55];
var obj1 = {}
var fn = function(){return 21}
var date = new Date()
console.log(Number(un)) // Nan
console.log(Number(nu)) // 0
console.log(Number(str1)) // 0
console.log(Number(str2)) // 34
console.log(Number(str3)) // NAN
console.log(Number(str4)) // NAN
console.log(Number(boo1)) // 0
console.log(Number(boo2)) // 1
console.log(Number(arr1)) // 0
console.log(Number(arr2)) // 34
console.log(Number(arr3)) // NAN
console.log(Number(obj1)) // NAN
console.log(Number(fn)) // NAN
console.log(Number(date)) // 1554639507784
parseInt
var un = undefined;
var nu = null;
var str1 = '';
var str2 = '34';
var str3 = '34px';
var str4 = 'hello';
var num1 = 22.22;
var boo1 = false;
var boo2 = true;
var arr1 = [];
var arr2 = [34];
var arr3 = [34, 55];
var obj1 = {}
var fn = function(){return 21}
var date = new Date()
console.log(parseInt(un)) // Nan
console.log(parseInt(nu)) // NAN
console.log(parseInt(str1)) // NAN
console.log(parseInt(str2)) // 34
console.log(parseInt(str3)) // 34
console.log(parseInt(str4)) // NAN
console.log(parseInt(num1)) // 22
console.log(parseInt(boo1)) // NAN
console.log(parseInt(boo2)) // NAN
console.log(parseInt(arr1)) // NAN
console.log(parseInt(arr2)) // 34
console.log(parseInt(arr3)) // 34
console.log(parseInt(obj1)) // NAN
console.log(parseInt(fn)) // NAN
console.log(parseInt(date)) // NAN
parseFloat
var un = undefined;
var nu = null;
var str1 = '';
var str2 = '34';
var str3 = '34px';
var str4 = 'hello';
var num1 = 22.22;
var boo1 = false;
var boo2 = true;
var arr1 = [];
var arr2 = [34];
var arr3 = [34, 55];
var obj1 = {}
var fn = function(){return 21}
var date = new Date()
console.log(parseFloat(un)) // Nan
console.log(parseFloat(nu)) // NAN
console.log(parseFloat(str1)) // NAN
console.log(parseFloat(str2)) // 34
console.log(parseFloat(str3)) // 34
console.log(parseFloat(str4)) // NAN
console.log(parseFloat(num1)) // 22.22
console.log(parseFloat(boo1)) // NAN
console.log(parseFloat(boo2)) // NAN
console.log(parseFloat(arr1)) // NAN
console.log(parseFloat(arr2)) // 34
console.log(parseFloat(arr3)) // 34
console.log(parseFloat(obj1)) // NAN
console.log(parseFloat(fn)) // NAN
console.log(parseFloat(date)) // NAN
隱式轉(zhuǎn)換
轉(zhuǎn)換成字符串
+號(hào)運(yùn)算符
1 轉(zhuǎn)換規(guī)則
- 如果兩個(gè)操作值都是字符串裹纳,則將它們拼接起來
- 如果只有一個(gè)操作值為字符串,則將另外操作值轉(zhuǎn)換為字符串紧武,然后拼接起來
- 如果一個(gè)操作數(shù)是對(duì)象剃氧、數(shù)值或者布爾值,則調(diào)用toString()方法取得字符串值阻星,然后再應(yīng)用前面的字符串規(guī)則朋鞍。對(duì)于undefined和null,分別調(diào)用String()顯式轉(zhuǎn)換為字符串妥箕。
var str1 = '1' + undefined
var str2 = '1' + null
var str3 = '1' + '1'
var str4 = '1' + true
var str5 = '1' + 1
var str6 = '1' + {}
var str7 = '1' + []
var str8 = '1' + [1]
var str9 = '1' + [1, 2]
var str10 = '1' + function(){console.log(1)}
var str11 = 1 + {}
var str12 = 1 + []
var str13 = 1 + [1]
var str14 = 1 + [1, 2]
var str15 = 1 + function(){console.log(1)}
console.log(str6, typeof str6) // 1[object Object] string
console.log(str7, typeof str7) // 1 string
console.log(str8, typeof str8) // 11 string
console.log(str9, typeof str9) // 11,2 string
console.log(str10, typeof str10) // 1function(){console.log(1)} string
console.log(str1, typeof str1) // 1undefined string
console.log(str2, typeof str2) // 1null string
console.log(str3, typeof str3) // 11 string
console.log(str4, typeof str4) // 1true string
console.log(str5, typeof str5) // 11 string
console.log(str6, typeof str6) // 1[object Object] string
console.log(str7, typeof str7) // 1 string
console.log(str8, typeof str8) // 11 string
console.log(str9, typeof str9) // 11,2 string
console.log(str10, typeof str10) // 1function(){console.log(1)} string
console.log(str11, typeof str11) // 1[object Object] string
console.log(str12, typeof str12) // 1 string
console.log(str13, typeof str13) // 11 string
console.log(str14, typeof str14) // 11,2 string
console.log(str15, typeof str15) // 1function(){console.log(1)} string
轉(zhuǎn)換成數(shù)字
+號(hào)運(yùn)算符
1 轉(zhuǎn)換規(guī)則
如果兩個(gè)操作值都是數(shù)值
- 如果一個(gè)操作數(shù)為NaN滥酥,則結(jié)果為NaN
- 如果是Infinity+Infinity,結(jié)果是Infinity
- 如果是-Infinity+(-Infinity)畦幢,結(jié)果是-Infinity
- 如果是Infinity+(-Infinity)坎吻,結(jié)果是NaN
- 如果是+0+(+0),結(jié)果為+0
- 如果是(-0)+(-0)宇葱,結(jié)果為-0
- 如果是(+0)+(-0)瘦真,結(jié)果為+0
var num1 = 1 + undefined
var num2 = 1 + null
var num3 = 1 + '1'
var num4 = 1 + true
var num5 = 1 + 1
var num6 = 1 + NaN
var num7 = Infinity + Infinity
var num8 = -Infinity + -Infinity
var num9 = Infinity + -Infinity
var num10 = 0 + 0
var num11 = -0 + -0
var num12 = 0 + -0
console.log(num1, typeof num1) // NaN "number"
console.log(num2, typeof num2) // 1 "number"
console.log(num3, typeof num3) // 11 string
console.log(num4, typeof num4) // 2 "number"
console.log(num5, typeof num5) // 2 "number"
console.log(num6, typeof num6) // NaN "number"
console.log(num7, typeof num7) // Infinity "number"
console.log(num8, typeof num8) // -Infinity "number"
console.log(num9, typeof num9) // NaN "number"
console.log(num10, typeof num10) // 0 "number"
console.log(num11, typeof num11) // -0 "number"
console.log(num12, typeof num12) // 0 "number"
乘除、減號(hào)運(yùn)算符贝搁、取模運(yùn)算符
這些操作符針對(duì)的是運(yùn)算吗氏,所以他們具有共同性:如果操作值之一不是數(shù)值,則被隱式調(diào)用Number()函數(shù)進(jìn)行轉(zhuǎn)換雷逆。
轉(zhuǎn)換成布爾值
1弦讽、轉(zhuǎn)換規(guī)則
1.1 若類型相同
1.2 若類型不相同
- undefined、null相等
- boolean膀哲、string往产、number之間相比,會(huì)轉(zhuǎn)換成Nunber
- boolean某宪、string仿村、number和對(duì)象相比,對(duì)象會(huì)轉(zhuǎn)換成基本類型兴喂,再進(jìn)行對(duì)比
2蔼囊、轉(zhuǎn)換成布爾值的運(yùn)算符類型
- if (..) 語(yǔ)句中的條件判斷表達(dá)式。
- for ( .. ; .. ; .. ) 語(yǔ)句中的條件判斷表達(dá)式(第二個(gè))衣迷。
- while (..) 和 do..while(..) 循環(huán)中的條件判斷表達(dá)式
- ? : 中的條件判斷表達(dá)式畏鼓。
- 邏輯運(yùn)算符 || (邏輯或)和 && (邏輯與)左邊的操作數(shù)(作為條件判斷表達(dá)式)
- 寬松相等和嚴(yán)格相等:“ == 允許在相等比較中進(jìn)行強(qiáng)制類型轉(zhuǎn)換,而 === 不允許壶谒。