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