javascript是一門弱類型語言,意思就是語言中的數(shù)據(jù)類型,很輕易就能被改變
比如定義一個變量值為數(shù)字,然后重新給他賦值為字符串,類型就由數(shù)字類型轉(zhuǎn)為了字符串類型。
類型的轉(zhuǎn)換,可以有很多種方法,例如在js中常用的parseInt、toString、等方法,這些方法都是強制將某個類型轉(zhuǎn)為指定的類型。
除了這些方法,還有一些特殊應(yīng)用場景,會將類型悄悄的進行轉(zhuǎn)換,如下幾種情況:
1、數(shù)學(xué)運算
如果一個數(shù)字跟另一個其他類型的數(shù)據(jù)進行數(shù)學(xué)運算時,另一個數(shù)據(jù)會被轉(zhuǎn)為數(shù)字類型進行運算,例:
var a = 1;
var b = true;
var c = a + b;
console.log(c); // 2 - 此時的布爾類型true被轉(zhuǎn)為了數(shù)字1,進行了數(shù)學(xué)加法運算
var a = 3;
var b = undefined;
var c = a + b;
console.log(c); // NaN - 此時的b被轉(zhuǎn)為了數(shù)字類型進行了數(shù)學(xué)運算
注意:加法比較特殊,因為符號+,除了可以進行數(shù)學(xué)加法以外,還可以進行字符串的拼接。例:
var a = 2;
var b = [1,2,3]
var c = a / b;
console.log(c); // NaN - 此時的b被轉(zhuǎn)為了數(shù)字類型
var a = 2;
var b = [1,2,3]
var c = a + b;
console.log(c); // 21,2,3 - 此時的a和b不再是加法運算,而是進行了拼接
2、字符串拼接
當(dāng)+符號左右兩邊有一個是字符串的時候,另一個也會轉(zhuǎn)為字符串進行拼接,例:
var a = 2;
var b = '3';
var c = a + b;
console.log(c); // 23 - 此時的a被轉(zhuǎn)為了字符串,進行了拼接
3、比較運算
當(dāng)比較運算符(除相等比較和全等比較)左右兩邊有一個是數(shù)字的時候,另一個也會轉(zhuǎn)為數(shù)字進行比較大小,例:
var a = 2;
var b = '10';
console.log(a>b) // false - 說明b被轉(zhuǎn)為數(shù)字10進行了大小比較
4、判斷條件
所有被放在if分支語句的小括號中的代碼會被轉(zhuǎn)為布爾類型,例:
var a = 2;
if(a){
console.log('a變量是true'); // a變量是true - 說明變量a的2被轉(zhuǎn)為了布爾值true
}else{
console.log('a變量是false');
}
var b;
if(b){
console.log('b變量是true');
}else{
console.log('b變量是false'); // b變量是false - 說明b變量undefined被轉(zhuǎn)為了布爾值false
}
5、date輸出
我們知道,new 一個構(gòu)造函數(shù)會得到一個對象,但是new Date()之后,輸出的卻是一個字符串,例:
var d = new Date();
console.log(d); // Mon Mar 15 2021 17:50:25 GMT+0800 (中國標(biāo)準(zhǔn)時間)
// 這說明,new出來的對象d,在輸出的時候被悄悄的轉(zhuǎn)換成了字符串輸出了
6、對象數(shù)組輸出在頁面
當(dāng)在控制臺輸出一個數(shù)組或?qū)ο蟮臅r候,是本省的類型顯示,例:
var arr = [1,2,3,4];
var obj = {name:"張三",age:12}
console.log(arr);
console.log(obj);
輸出效果如下圖:
但是如果將數(shù)組或?qū)ο笤谖谋局休敵龅脑挘瑪?shù)組和對象會默認(rèn)調(diào)用自己原型中的toString方法,以字符串形式顯示在文本中,例:
var arr = [1,2,3,4];
var obj = {name:"張三",age:12}
document.write(arr)
document.write(obj)
文本中顯示如下:
數(shù)組和對象其實已經(jīng)調(diào)用了他們原型上的toString方法,被轉(zhuǎn)為了字符串,例:
var arr = [1,2,3,4];
var obj = {name:"張三",age:12}
console.log(arr.toString());
console.log(obj.toString());
控制臺顯示如下圖:
隱形轉(zhuǎn)換在多處出現(xiàn),我們在編程的時候,需要謹(jǐn)慎小心,熟悉后可以對之進行利用,例如判斷一個數(shù)據(jù)或?qū)ο笾械闹凳欠翊嬖跁r,可以利用分支語句的條件中的隱形轉(zhuǎn)換來搞定。