日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

徹底搞懂 JS 類型轉換

來源: 責編: 時間:2024-01-03 11:35:49 223觀看
導讀1. 什么是類型轉換?Javascript 是一種弱類型語言,這意味著變量是沒有明確類型的,而是由 JavaScript 引擎在編譯時隱式完成。類型轉換就是將一種數據類型轉換為另一種數據類型,例如:20 + "twenty" // "20twenty""10" * "10"
1. 什么是類型轉換?

Javascript 是一種弱類型語言,這意味著變量是沒有明確類型的,而是由 JavaScript 引擎在編譯時隱式完成。類型轉換就是將一種數據類型轉換為另一種數據類型,例如:bnr28資訊網——每日最新資訊28at.com

20 + "twenty" // "20twenty""10" * "10"   //  100 2 - "x"

Javascript 使用嚴格相等(===)和寬松相等(==)來測試兩個值的相等性,類型轉換僅在使用寬松相等運算符時發生。當使用 === 測試嚴格相等時,要比較的變量的類型和值都必須相同,例如:bnr28資訊網——每日最新資訊28at.com

10 === 10     // trueNaN === NaN   // false

在上面的代碼中,10和10都是數字并且是完全相等的,所以正如預期的那樣返回了true,兩個 NaN 永遠不會相等。當使用 == 測試寬松相等時,可能會發生隱式轉換:bnr28資訊網——每日最新資訊28at.com

'20' == 20    // truefalse == 0    // true

對于任何數據類型,無論是原始類型還是對象,都可以進行類型轉換。盡管原始類型和對象的轉換邏輯各不相同,但是都只能轉換為三種類型:字符串(string)、數字(number)、布爾值(boolean)。bnr28資訊網——每日最新資訊28at.com

JavaScript 中的類型轉換有兩種方式:bnr28資訊網——每日最新資訊28at.com

隱式類型轉換: 由 JavaScript 編譯器完成的自動類型轉換。bnr28資訊網——每日最新資訊28at.com

顯式類型轉換: 由開發人員完成的手動類型轉換。bnr28資訊網——每日最新資訊28at.com

下面先來看看 JavaScript 中的顯式和隱式類型轉換。bnr28資訊網——每日最新資訊28at.com

(1)顯示類型轉換

我們可以通過 JavaScript 內置的一些 API 將一種類型轉換為另一種類型,這稱為顯式類型轉化。執行顯式類型轉換的最簡單方法是使用 Boolean()、Number() 和 String()、parseInt()等函數,例如:bnr28資訊網——每日最新資訊28at.com

String(2 - true);     // '1''56' === String(56);  // trueNumber('2350e-2');    // '23.5'Number('23') + 7;     // 30Boolean('');          // falseBoolean(2) === true;  //true

(2)隱式類型轉換

隱式類型轉換是將一種數據類型轉換為另一種數據類型(確保在相同數據類型之間完成操作)以使運算符或函數正常工作,這種轉換是由 JavaScript 編譯器自動完成的,隱式類型轉換也稱為類型強制。例如:bnr28資訊網——每日最新資訊28at.com

'25' + 15;          // '2515'23 * '2';           // 4623 - true;          // 22true - null;        // 1false + undefined;  // NaNconst arr = [];if(arr) { console.log('Hello World') };

下面這些常見的操作會觸發隱式地類型轉換,編寫代碼時要格外注意:bnr28資訊網——每日最新資訊28at.com

  • 運算相關的操作符:+、-、+=、++、* 、/、%、<<、& 等。
  • 數據比較相關的操作符: >、<、== 、<=、>=、===。
  • 邏輯判斷相關的操作符: &&、!、||、三目運算符。

① + 運算符

/* 一個操作數 */+ x // 將x轉化為數字, 如果不能轉化為數組將輸出NaN+ "1234string"   // NaN + 1              // 1+ '1'            // 1+ true           // 1+ undefined      // NaN+ null           // 0+ new Date()     // 1660493819396/* 兩個操作數 */a + b// 1. 如果其中任何一個是對象,則先將其轉換為原始類型{} + {}          // '[object Object][object Object]'[] + []          // ''[] + new Date()  // 'Mon Aug 15 2022 00:18:18 GMT+0800 (中國標準時間)'// 2. 如果一個是字符串,則將另一個轉換為字符串1 + ''           // '1''' + 1           // '1''' + true        // 'true'// 3. 否則,將兩者都轉換為數字1 + true         // 2true + true      // 2

② -、*、/、++、--

// 將一個或多個值轉換為數字 - '1'     // -1 [] - 1    // -1 [] - {}   // NaN

③ ==、!=

// 兩個操作數 a == b// 1. 如果一個是 `null` 而另一個是 `undefined`,它們是相等的null == undefined    // true// 2. 如果一個是數字,另一個是字符串,將字符串轉換為數字,再比較1 == '1'             // true// 3. 如果其中一個是布爾值,將其轉換為數字,再次比較true == 1            // truefalse == 0           // true// 4. 如果一個是對象,另一個是數字或字符串,將對象轉換為原始類型,再次比較[1] == 1             // true['1'] == '1'         // true

下圖是在使用 == 時,判斷兩個操作數是否相等的總結(綠色表示相等,白色表示不等):bnr28資訊網——每日最新資訊28at.com

圖片圖片bnr28資訊網——每日最新資訊28at.com

④ >、>=、<、<=

// 兩個操作數a > b// 1. 如果其中一個是對象,則將其轉換為原始類型,再次比較[2] > 1   // true// 2. 如果兩者都是字符串,使用字母順序比較它們'b' > 'a' // true// 3. 如果其中一個是數字,則將一個或兩個非數字轉換為數字'2' > 1   // true

⑤ in

/* 如果左操作數不是字符串,則將其轉換為字符串 */ a in b'1' in {1: ''}    // true 1 in {1: 'a'}    // true 1 in ['a', 'b']  // true

2. 常見類型轉換

(1)字符串轉換

將數據類型轉換為字符串稱為字符串轉換,可以使用 String() 函數將數據類型顯式轉換為字符串。當一個操作數是字符串時,可以通過使用 + 運算符來觸發隱式字符串轉換。bnr28資訊網——每日最新資訊28at.com

① 數字 => 字符串:

Number對象的 toString() 方法會返回指定 Number 對象的字符串表示形式。String()和 new String() 會把對象的值轉換為字符串。bnr28資訊網——每日最新資訊28at.com

String(20);           // '20'String(10 + 40);      // '50'(10 + 40).toString(); // '50'new String(10 + 20);  // '30'

② 布爾值 => 字符串:

String() 和 toString() 方法會將布爾值轉化為對應的字符串形式。bnr28資訊網——每日最新資訊28at.com

String(true);     // 'true'String(false);    // 'false'true.toString()   // 'true'false.toString()  // "false"

③ 數組 => 字符串:

String() 方法會將數組元素通過逗號連接起來,無論嵌套多少層,都會將其展開并返回元素拼接好的字符串。如果是空數字,會返回空字符串:bnr28資訊網——每日最新資訊28at.com

String([1, 2, 3]);                // '1,2,3'String([1, 2, 3, [4, [5]]]);      // '1,2,3,4,5'String([1, 2, 3, [4, [5, {}]]]);  // '1,2,3,4,5,[object Object]'String([]);                       // ''

④ 對象 => 字符串:

使用 String() 方法會將對象轉化為 '[object Object]',無論對象是否為空對象:bnr28資訊網——每日最新資訊28at.com

String({name: "Hello"});   // '[object Object]'

⑤ null / undefined / NaN => 字符串:

使用 String() 方法會將  null、undefined、NaN 轉化為其對應的字符串形式:bnr28資訊網——每日最新資訊28at.com

String(undefined);    // 'undefined'String(null);         // 'null'String(NaN);          // 'NaN'

⑥ 日期 => 字符串:

String(new Date('2022-08-20')) // 'Sat Aug 20 2022 08:00:00 GMT+0800 (中國標準時間)'

⑦ 隱式轉換

當任何數據類型使用+運算符與字符串連接時會發生到字符串的轉換(隱式轉換):bnr28資訊網——每日最新資訊28at.com

"25" + 56;              // '2556'"25" + null;            // '25null'"Hello " + undefined;   // 'Hello undefined'"25" + false;           // '25fasle'"25" + {};              // '25[object Object]'"25" + [10];            // '2510'

所以,當我們想要創建一個操作并且操作數類型之一是字符串時,應該小心使用類型強制轉換。bnr28資訊網——每日最新資訊28at.com

⑧ 總結

下面是 ECMAScript 規范中將數據類型轉換為字符串的規則:bnr28資訊網——每日最新資訊28at.com

圖片圖片bnr28資訊網——每日最新資訊28at.com

ECMAScript 規范:https://262.ecma-international.org/5.1/#sec-9.8bnr28資訊網——每日最新資訊28at.com

(2)布爾轉換

將數據類型轉換為布爾值稱為布爾轉換。這種轉換既可以由 Boolean() 函數顯式完成,也可以在邏輯上下文中隱式完成(如if/else )或通過使用邏輯運算符( ||、&&、! )觸發。bnr28資訊網——每日最新資訊28at.com

① 字符串 => 布爾值:

使用 Boolean() 方法轉化字符串時,只有當字符串為空時會返回false,其他情況都會返回 true:bnr28資訊網——每日最新資訊28at.com

Boolean('hello'); // true Boolean(' ');     // true Boolean('');      // false

② 數字 => 布爾值:

使用 Boolean() 方法轉化數字時,只有 0、-0 或 NaN 會轉化為 false,其他情況會返回 true:bnr28資訊網——每日最新資訊28at.com

Boolean(-123); // true Boolean(123);  // true Boolean(0);    // falseBoolean(-0);   // falseBoolean(NaN);  // false

③ 數組 / 對象 => 布爾值:

使用 Boolean() 方法轉化數組或對象時,無論數組和對象是否有內容,都會返回true:bnr28資訊網——每日最新資訊28at.com

Boolean([1, 2, 3]); // trueBoolean([]);        // trueBoolean({});  // trueBoolean({'hello': 'world'});  // true

④ null / undefined => 布爾值:

使用 Boolean() 方法轉化null或undefined時,都始終返回 false:bnr28資訊網——每日最新資訊28at.com

Boolean(undefined);  // false Boolean(null);       // false

⑤ 隱式轉換

在數學運算中,true 轉換為 1,false 轉換為 0:bnr28資訊網——每日最新資訊28at.com

true + 5;    // 6false + 5;   // 55 - true;    // 55 - false;   // 4

⑥ 邏輯運算符、邏輯上下文

// 如果其中一個不是布爾值,則將其轉換為布爾值Boolean( null || undefined || 0 || -0 || NaN || '' )    // falseBoolean( 1 && 'a' && { } && [] && [0] && function(){} ) // truetrue && false // falsetrue && true // truetrue || false // truetrue || !false // true

注意,邏輯運算符,例如 || 或 && 內部進行布爾轉換,但實際上返回原始操作數的值,即使它們不是布爾值。bnr28資訊網——每日最新資訊28at.com

'hello' && 123;   // 123

可以使用雙感嘆號(!!)來將變量轉為為布爾值:bnr28資訊網——每日最新資訊28at.com

!!0    // false!!""   // false!!" "  // true!!{}   // true!![]   // true!!true // true

if、else if、while、do/while 和 for 使用與 &&、||、! 相同的隱式類型轉換方式(邏輯表達式)。bnr28資訊網——每日最新資訊28at.com

下面是在 if 語句(邏輯上下文)中的隱式轉換規則(綠色為true,白色為false):bnr28資訊網——每日最新資訊28at.com

圖片圖片bnr28資訊網——每日最新資訊28at.com

⑦ 總結

除了下面這些之外的所有其他值都是真值,包括對象、數組、日期等。甚至所有Symbol、空對象和數組都是真值。bnr28資訊網——每日最新資訊28at.com

Boolean('');        // falseBoolean(0);         // false     Boolean(-0);        // falseBoolean(NaN);       // falseBoolean(null);      // falseBoolean(undefined); // falseBoolean(false);     // false
Boolean({})             // trueBoolean([])             // trueBoolean(Symbol())       // trueBoolean(function() {})  // true

可以通過以下方式來過濾數組中的假值:bnr28資訊網——每日最新資訊28at.com

[0, "", " ", null, undefined, NaN].map(Boolean); // 輸出結果:[false, false, true, false, false, false]

我們可以會遇到一種情況,當使用 5 == true 時,結果為false,而使用if(5) {}時,則 5 被認為是 true 并進入if/else語句:bnr28資訊網——每日最新資訊28at.com

5 == true;  // falseif (5) {    console.log('5');  // 5};

這種情況下,即一個值和數字進行比較時,JavaScript 會試圖將這個值轉換為數字。所以,當比較5 == true 時,JavaScript 傾向于將true轉換為1,因為 1不等于5,因此結果為 false。而在if(5) {}的情況下,5 被轉換為布爾值,而 5 是一個真值,所以它進入if塊。在這種情況下,可以選擇顯式轉換以避免錯誤,因為 5 是一個真值,可以執行Boolean(5) == true,這樣就會返回true了。bnr28資訊網——每日最新資訊28at.com

下面是 ECMAScript 規范中將數據類型轉換為布爾值的規則:bnr28資訊網——每日最新資訊28at.com

圖片圖片bnr28資訊網——每日最新資訊28at.com

ECMAScript 規范:https://262.ecma-international.org/5.1/#sec-9.2bnr28資訊網——每日最新資訊28at.com

(3)數字轉換

將數據類型轉換為數字稱為數字轉換,可以使用Number()、parseInt()、parseFloat()等方法將數據類型顯式轉換為數字。當一個值不能被強制轉換為一個數字時,就會返回 NaN。bnr28資訊網——每日最新資訊28at.com

① 字符串 => 數字:

當把字符串轉換為數字時,JavaScript 引擎首先會修剪前導和后置空格、/n、/t 字符,如果修剪后的字符串不代表有效數字,則返回 NaN。 如果字符串為空,則返回 0。bnr28資訊網——每日最新資訊28at.com

Number('123');            // 123Number("-12.34")          // -12.34Number("12s");            // NaNNumber("/n")              // 0parseInt(' 203px');       // 203 parseInt('10.000')        // 10   parseInt('10.20')         // 10 parseFloat('203.212px');  // 203.212parseFloat('10.20')       // 10.2parseFloat('10.81')       // 10.81

可以看到,parseInt 函數會從字符串中讀取一個數字并刪除它后面所有字符,但是如果數字前面有字符(空格除外),那么它將輸出 NaN。bnr28資訊網——每日最新資訊28at.com

② 布爾值 => 數字:

當使用 Number() 將布爾值轉化為數字時,true 會轉化為 1,false 會轉化為 0。bnr28資訊網——每日最新資訊28at.com

Number(true);  // 1Number(false); // 0

③ null  => 數字:

當使用 Number() 將 null 轉化為數字時,會返回 0:bnr28資訊網——每日最新資訊28at.com

Number(null); // 0null + 5; // 5

④ undefined / 數組 / 對象 / NaN => 數字:

當使用 Number() 將 undefined、數組、對象、NaN 轉化為數字時,會返回 NaN:bnr28資訊網——每日最新資訊28at.com

Number(undefined);  // NaNNumber([1, 2, 3])   // NaNNumber({})          // NaNNumber(NaN)         // NaN

⑤ 數組元素

可以使用map遍歷數組元素,并使用需要的類型來進行類型轉換:bnr28資訊網——每日最新資訊28at.com

["1", "9", "-9", "0.003", "yes"].map(Number);// 輸出結果:[1, 9, -9, 0.003, NaN]

⑥ 特殊規則

在表達式中,當我們將 == 運算符應用于 null 或 undefined 時,不會發生數字轉換。 此外,null 只等于 null 或 undefined,不能等于其他任何值:bnr28資訊網——每日最新資訊28at.com

null == null;           // true null == 0;              // falsenull == undefined;      // trueundefined == undefined  // true

根據運算符優先級,+ 運算符具有從左到右的關聯性,因此如果有一個表達式 2 + 3 + '4' + 'number' ,則操作按以下方式完成:bnr28資訊網——每日最新資訊28at.com

2 + 3 + '4' + 'number'==> 5 + '4' + 'number'// 數字 5 被隱式轉換為字符串,然后連接起來==> '54' + 'number'==> '54number'

NaN 不等于任何其他類型,甚至它本身:bnr28資訊網——每日最新資訊28at.com

NaN == NaN  // false

⑦ 總結

上面的例子中,可以清楚地看到一些意想不到的結果:將 null 轉換為數字時返回了 0,而將 undefined 轉換為數字返回了 NaN。兩個操作都應該返回 NaN,因為這兩種值類型顯然都不是有效的數字,將空字符串轉換為數字時也返回了 0。bnr28資訊網——每日最新資訊28at.com

下面是 ECMAScript 規范中將數據類型轉換為字符串的規則,清楚的解釋了上面的異常現象:bnr28資訊網——每日最新資訊28at.com

圖片圖片bnr28資訊網——每日最新資訊28at.com

另外,在 ECMAScript 規范中,還提到一點:bnr28資訊網——每日最新資訊28at.com

圖片圖片bnr28資訊網——每日最新資訊28at.com

意思就是:為空或僅包含空格的 StringNumericLiteral 將轉換為 +0。這也就解釋了為什么將空字符串轉換為數字時也返回了 0。bnr28資訊網——每日最新資訊28at.com

ECMAScript 規范:https://262.ecma-international.org/5.1/#sec-9.3bnr28資訊網——每日最新資訊28at.com

3. Symbol 類型轉換

Symbol  只能進行顯式轉換,不能進行隱式轉換。也就是說,Symbol不能被強制轉換為字符串或數字,這樣它們就不會被意外地用作本來應該表現為 Symbol 的屬性。bnr28資訊網——每日最新資訊28at.com

const mySymbol = Symbol.for("mySymbol");const str = String(mySymbol);console.log(str);  // 'Symbol(mySymbol)'

當使用 console.log() 來打印 symbol 時,它之所以有效,是因為 console.log() 在 symbol 上調用了 String() 方法以創建可用的結果。bnr28資訊網——每日最新資訊28at.com

如果嘗試直接使用字符串連接 symbol,它將拋出TypeError:bnr28資訊網——每日最新資訊28at.com

const mySymbol = Symbol.for("mySymbol");const sum = mySymbol + "";console.log(sum);   // Uncaught TypeError: Cannot convert a Symbol value to a string

將 mySymbol 連接到字符串需要首先將 mySymbol 轉換為字符串,并且在檢測到強制轉換時會拋出錯誤,從而阻止以這種方式使用它。bnr28資訊網——每日最新資訊28at.com

同樣,我們不能將 symbol 強制轉換為數字,所有數學運算符在與符號一起使用時都會引發錯誤:bnr28資訊網——每日最新資訊28at.com

const mySymbol = Symbol.for("mySymbol");const factor = mySymbol / 2;console.log(factor);   // Uncaught TypeError: Cannot convert a Symbol value to a number

4. 對象類型轉換

介紹完了基本數組類型的轉化,下面來看看對象類型的轉化。例如,當執行 obj_1 + obj_2 或者 obj_1 - obj_2時,都會先將對象轉換為原始類型,然后將其轉換為最終類型。當然,這里的轉化仍然只有三種類型:數字、字符串和布爾值。bnr28資訊網——每日最新資訊28at.com

對象通過內部的 ToPrimitive 方法將其轉換為原始類型,該算法允許我們根據使用對象的上下文來選擇應如何轉換對象。從概念上講,ToPrimitive 算法可以分為兩部分:Hints 和 Object-to-primitive 轉換方法。bnr28資訊網——每日最新資訊28at.com

圖片圖片bnr28資訊網——每日最新資訊28at.com

(1)Hints

Hints 是 ToPrimitive 算法用于確定對象在特定上下文中應轉換為什么的信號。有三種情況:bnr28資訊網——每日最新資訊28at.com

  • string:在操作需要字符串的上下文中,如果可以轉換為字符串,例如 alert() 或內置 String() 函數:
alert(obj);String(obj)// 使用對象作為屬性key值anotherObj[obj] = 1000;
  • number:如果可以進行這種轉換,則在操作需要數字的上下文中:
// 顯示轉換let num = Number(obj);// 數學(二進制加號除外)let x = +obj; // 一元加let difference = Date1 - Date2; // 日期對象// 對象大小比較let less = Obj1 < obj2;
  • default:在極少數情況下發生,不確定需要什么類型。例如,二元 + 運算符既適用于字符串(連接它們)也適用于數字(添加它們)。在這種情況下,對象可以轉換為字符串或數字。 或者當使用寬松相等 == 運算符將對象與字符串、數字或 symbol 進行比較時。
// 二元加let sum = obj1 + obj2;// obj == string/number/symbolif (obj == 10 ) { ... };

所有內置對象(日期除外)都將default認為是number,Date 日期對象將default認為是string。bnr28資訊網——每日最新資訊28at.com

(2)Methods

在 ToPrimitive 算法根據 Hints 確定對象應轉換為的原始值類型之后。 然后使用 Object-to-primitive 轉換方法將對象轉換為原始值。有三種情況:bnr28資訊網——每日最新資訊28at.com

  • toString/valueOf:toString() 和 valueOf() 被 JavaScript 中的所有對象繼承。 它們僅用于對象到原始值的轉換。 ToPrimitive 算法首先會嘗試 toString() 方法。 如果定義了方法,它返回一個原始值,那么 JavaScript 使用原始值(即使它不是字符串)。 如果toString() 返回一個對象或不存在,那么 JavaScript 會嘗試使用 valueOf() 方法,如果該方法存在并返回一個原始值,JavaScript 將使用該值。 否則,轉換失敗并提示 TypeError。
  • toString -> valueOf:用于 Hints 為string 的情況。
  • valueOf -> toString:其他情況。
let Person = {  name: "Mary",  age: 22,  // hint 是 "string"  toString() {    return `{name: "${this.name}"}`;  },  // hint 是 "number" 或 "default"  valueOf() {    return this.age;  }};alert(Person);      // toString -> {name: "Mary"}alert(+Person);     // valueOf -> 22alert(Person + 10); // valueOf -> 32

在上面的代碼中,Person 變成了一個對象字符串或數字,具體取決于轉換上下文。 toString() 方法用于 Hints = "string" 的轉換,valueOf() 用于其他情況(Hints 為“number”或“default”)。bnr28資訊網——每日最新資訊28at.com

你可能希望在一個地方處理所有轉換。 在這種情況下,只能像這樣實現 toString() 方法:bnr28資訊網——每日最新資訊28at.com

let Person = {  name: "Mary",  toString() {    return this.name;  }};alert(Person); // toString -> Maryalert(Person + 1000); // toString -> Mary1000

Symbol.toPrimitive:與 toString() 和 valueOf() 方法不同,Symbol.toPrimitive 允許覆蓋 JavaScript 中的默認對象到原始值的轉換(其中 toString() 和 valueOf 方法由 ToPrimitive 算法使用)并定義我們希望如何將對象轉換為原始類型的值。 為此,需要使用此 Symbol 名稱定義一個方法,如下所示:bnr28資訊網——每日最新資訊28at.com

obj[Symbol.toPrimitive] = function(hint) {  // 返回原始類型值  // hint 等于 "string", "number", "default" 中的一個}

例如,這里的 Person 對象使用 Symbol.toPrimitive 執行與上面相同的操作:bnr28資訊網——每日最新資訊28at.com

let Person = {  name: "Mary",  age: 22,  [Symbol.toPrimitive](hint) {    alert(`hint: ${hint}`);    return hint == "string" ? `{name: "${this.name}"}` : this.age;  }};alert(Person);       // hint: string -> {name: "Mary"}alert(+Person);      // hint: number -> 22alert(Person + 10);  // hint: default -> 32

可以看到,單個方法 Person[Symbol.toPrimitive] 處理了所有轉換情況。需要注意,在沒有 Symbol.toPrimitive 和 valueOf() 的情況下,toString() 將處理所有原始類型轉換。bnr28資訊網——每日最新資訊28at.com

下面是將對象轉化為布爾值、字符串、數字時的執行過程:bnr28資訊網——每日最新資訊28at.com

(1)對象到布爾值的轉換bnr28資訊網——每日最新資訊28at.com

Javascript 中的所有對象都轉換為 true,包括包裝對象 new Boolean(false) 和空數組。 對象到布爾值的轉換不需要對象到原始類型算法。bnr28資訊網——每日最新資訊28at.com

(2)對象到字符串的轉換bnr28資訊網——每日最新資訊28at.com

當需要將對象轉換為字符串時,Javascript 首先使用 ToPrimitive 算法(Hints = “string”)將其轉換為原始類型,然后將派生的原始類型轉換為字符串。例如,如果將對象傳遞給 String() 這樣的內置函數,或者在模板字符串中插入對象時。bnr28資訊網——每日最新資訊28at.com

(3)對象到數字的轉換bnr28資訊網——每日最新資訊28at.com

當需要將對象轉換為數字時,Javascript 首先使用  ToPrimitive  算法(Hints = “number”)將其轉換為原始類型,然后將派生的原始類型轉換為數字。 期望數字參數的內置 Javascript 函數和方法以這種方式將對象參數轉換為數字,例如 Math()。bnr28資訊網——每日最新資訊28at.com

(3)特殊情況

當某些 Javascript 運算符的操作數是對象時,也會發生類型轉換:bnr28資訊網——每日最新資訊28at.com

  • + 運算符: 此運算符可以用于執行數字加法和字符串連接。如果其中任何一個操作數是對象,則使用  ToPrimitive 算法(Hints = “default”)將它們轉換為原始值。一旦將它們轉換為原始值,就會檢查它們的類型。如果任一參數是字符串,則將另一個參數轉換為字符串并連接字符串。否則,它將兩個參數都轉換為數字并將它們相加。
  • == 和 !== 運算符: 這些運算符以寬松方式執行相等和不相等測試。如果一個操作數是一個對象而另一個是一個原始值,這些運算符使用  ToPrimitive  算法(Hints = “default”)將對象轉換為原始值,然后比較兩個原始值。
  • <,<=,> 和 >= 關系運算符: 關系運算符用于比較兩個值之間的關系,可用于比較數字和字符串。如果任一操作數是對象,則使用 ToPrimitive 算法將其轉換為原始值(Hints = “number”)。但是,與對象到數字的轉換不同,返回的原始值不會轉換為數字(因為它們被比較并且不被使用)。

本文鏈接:http://www.www897cc.com/showinfo-26-56593-0.html徹底搞懂 JS 類型轉換

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何用Java實現自動化測試和質量控制?

下一篇: Kubernetes 從提交 deployment 到 pod 運行的全過程

標簽:
  • 熱門焦點
  • 7月安卓手機性能榜:紅魔8S Pro再奪榜首

    7月份的手機市場風平浪靜,除了紅魔和努比亞帶來了兩款搭載驍龍8Gen2領先版處理器的新機之外,別的也想不到有什么新品了,這也正常,通常6月7月都是手機廠商修整的時間,進入8月份之
  • 6月iOS設備好評榜:第一蟬聯榜首近一年

    作為安兔兔各種榜單里變化最小的那個,2023年6月的iOS好評榜和上個月相比沒有任何排名上的變化,僅僅是部分設備好評率的下降,長年累月的用戶評價和逐漸退出市場的老款機器讓這
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領先
  • 如何使用JavaScript創建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經瀏覽過購物網站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區域,以便瀏覽。結合這個小小的重要功能可以大大改善您網站的用戶體驗
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 10天營收超1億美元,《星鐵》比《原神》差在哪?

    來源:伯虎財經作者:陳平安即便你沒玩過《原神》,你一定聽說過的它的大名。恨它的人把《原神》開服那天稱作是中國游戲史上最黑暗的一天,有粉絲因為索尼在PS平臺上線《原神》,怒而
  • 騰訊VS網易,最卷游戲暑期檔,誰能笑到最后?

    作者:無銹缽來源:財經無忌7月16日晚,上海1862時尚藝術中心。伴隨著幻象的精準命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰隊以絕對的優勢戰勝了BLG戰隊,拿下了總決
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業發布的ESG報告。ESG是&ldquo;環境保
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學的小東加入了一個大學生兼職QQ群。群主&ldquo;七王&rdquo;在群里介紹一些刷單賺
Top 主站蜘蛛池模板: 辽中县| 桃园市| 巴中市| 余姚市| 弋阳县| 山东| 天气| 神农架林区| 西宁市| 台州市| 弋阳县| 阜新| 招远市| 灵寿县| 汉源县| 德清县| 色达县| 永安市| 林州市| 南江县| 武汉市| 蒙自县| 达孜县| 苍溪县| 静宁县| 琼中| 精河县| 塔河县| 义乌市| 福海县| 德州市| 湛江市| 阳高县| 安塞县| 定西市| 西丰县| 江华| 枣强县| 百色市| 隆化县| 东明县|