首頁 >web前端 >js教程 >javascript怎麼進行強制型別轉換

javascript怎麼進行強制型別轉換

青灯夜游
青灯夜游原創
2021-04-19 14:27:414902瀏覽

強制轉換方法:1、使用ToString()、ToNumber()或ToBoolean()方法;2、使用String()、Number()或Boolean()方法;3、使用「 」或「- 」運算子;4、使用「if()」、「while()」等語句。

javascript怎麼進行強制型別轉換

本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

一、型別轉換規則

1.ToString

對一般物件來說,除非自行定義toString方法,否則就會呼叫Object.prototype.toString()方法,如果物件有自己的toString方法,字串化就會呼叫該方法並使用其傳回值。

2.ToNumber

  • #對於基本型別其中true轉換為1,false轉換為0; undefined 轉換為NaN,null 轉換為0
  • 對於物件類型會先轉換成為基本型別值如果傳回的是非數字的基本型別值,則再遵循基本型別轉換規則將其強制轉換為數字。為了將值轉換為對應的基本型別值,抽像運算ToPrimitive會先檢查該值是否有 valueOf() 方法。如果有並且傳回基本型別值,再使用該值進行強制型別轉換。如果沒有就使用 toString() 的回傳值(如果存在)來進行強制型別轉換。 如果 valueOf() 和 toString() 都沒有傳回基本型別值,會產生 TypeError 錯誤。
let a = {
    valueOf:function(){
        return "42";
    }
};
let b = {
    toString:function(){
        return "42";
    }
};
let c = [4,2];
c.toString = function(){
    return this.join(""); //"42"
};

Number(a);     //42
Number(b);     //42
Number(c);     //42
Number('');    //0
Number([]);    //0
Number(["abc"];//NaN

3.ToBoolean

#JavaScript中的值可以分為能被強制轉換為false的值和能被強制轉換為true的值兩類。
假值:

  • undefined
  • null
  • false
  • 0、-0、NaN
  • ""

真值:除了上述清單的都可以理解為是真值,所有物件都是真值

let a1 = new Boolean( false );
let b1 = new Number( 0 );
let c1 = new String( "" );
let d1 = Boolean(a1 && b1 && c1); //true

let a2 = [];
let b2 = {};
let c2 = function(){};
let d2 = Boolean(a2 && b2 && c2); //true

二、顯示強制型別轉換

#1.字串與數字之間的顯示轉換

字串與數字之間的轉換是透過String(..)Number(..) 這兩個內建函數。
除了String(..) 和Number(..) 以外,還有其他方法可以實作字串和數字之間的明確轉換:

let a = 42;
let b = a.toString();
let c = "3.14";
let d = +c;
b; // "42"
d; // 3.14

a.toString() 是明確的,不過其中涉及隱式轉換。因為 toString() 對 42 這樣的基本型別值不適用,所以 JavaScript 引擎會自動為 42 建立一個封裝對象,然後對該對象呼叫 toString()。這裡顯式轉換含有隱式轉換。

2.顯示轉換為布林值

let a = "0";
let b = [];
let c = {};
let d = "";
let e = 0;
let f = null;
let g;
Boolean( a ); // true
Boolean( b ); // true
Boolean( c ); // true
Boolean( d ); // false
Boolean( e ); // false
Boolean( f ); // false
Boolean( g ); // false

雖然Boolean(..) 是明確的,但並不常用。明確強制類型轉換為布林值最常用的方法是!!

let a = "0";
let b = [];
let c = {};
let d = "";
let e = 0;
let f = null;
let g;
!!a; // true
!!b; // true
!!c; // true
!!d; // false
!!e; // false
!!f; // false
!!g; // false

【推薦學習:javascript高階教學

三、隱式強制型別轉換

1.字串與數字之間的隱含強制型別轉換

( 1) 運算子

即能用於數字加法,也能用於字串拼接

##如果的其中一個運算元是字串(或者透過對其呼叫ToPrimitive 抽像操作得到字串), 則執行字串拼接;否則執行數字加法。因為陣列的 valueOf() 運算無法得到簡單基本型別值,於是它轉而呼叫 toString()。因此下例中的兩個陣列變成了 "1,2" 和 "3,4"。將它們拼接後返回 "1,23,4"。

let a = "42";
let b = "0";
a + b; // "420"

let c = 42;
let d = 0;
c + d; // 42

let x = [1,2];
let y = [3,4];
x + y; // "1,23,4"

可以使用運算子進行字串轉換,將數字和空字串"" 相來將其轉換為字串

let a = 42;
let b = a + "";
b; // "42"

a ""(隱含)和前面的String (a)(顯式)之間有一個細微的差別需要注意。

根據 ToPrimitive抽像操作規則,a ""會對a呼叫valueOf()方法,然後透過ToString抽象 操作將傳回值轉換為字串。而 String(a) 則是直接呼叫 ToString()。它們最後回傳的都是字串,但如果a 是物件而非數字結果可能會不一樣

let a = {
    valueOf: function() { return 42; },
    toString: function() { return 4; }
};
a + "";         // "42"
String( a );    // "4"

(2)從字串強制類型轉換為數字的情況

-是數字減法運算符,因此a - 0會將a強制類型轉換為數字。也可以使用a * 1和a /1,因為這兩個運算子也只適用於數字,只不過這樣的用法不太常見

let a = [3];
let b = [1];
a - b; // 2

2.隱式強制類型轉換為布林值

下面的情況會發生布林值隱式強制型別轉換:

(1) if (..)語句中的條件判斷式。

(2) for ( .. ; .. ; .. )語句中的條件判斷表達式(第二個)。

(3) while (..) 和 do..while(..) 迴圈中的條件判斷表達式。

(4) ? :中的條件判斷表達式。

(5) 邏輯運算子 ||(邏輯或)和 &&(邏輯與)左邊的運算元(作為條件判斷表達式)。

以上情況中,非布林值會被隱式強制型別轉換為布林值,遵循前面介紹過的 ToBoolean 抽像運算規則。

更多程式相關知識,請造訪:程式設計入門! !

以上是javascript怎麼進行強制型別轉換的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn