1. 程式人生 > >js 型別轉變

js 型別轉變

在絕大部分情況下,操作符和函式可以自動將一個值轉換成正確的資料型別。這被稱為”型別轉變(type conversion)”。

舉個例子,alert 自動轉變任何型別的引數為字串型別,並顯示該字串。數學操作符轉變引數為數值型別並進行操作。

但在某些情況下,為了獲得正確的操作結果,需要開發者自己明確地轉變引數為正確型別。

暫時不涉及 object 型別

在本章節中,我們先不涉及 object 型別。此處,我們先學習原始型別。在我們學習了 object 型別之後,我們將在 [物件到原始型別的轉變] 中學習 object 轉變到原始型別的更多細節。

ToString
當需要一個值的字串形式的時候,字串轉變就會發生。

舉個例子,alert(value) 在顯示結果之前,就會完成值到字串形式的轉變。

為了達到同樣的功能(字串轉變),我們也可以執行一個 String(value) 呼叫:

let value = true;
alert(typeof value); // boolean

value = String(value); // now value is a string "true"
alert(typeof value); // string

字串轉變是非常明顯的,一個 false 變成了一個 “false”,null 變成了一個"null" 等。

ToNumber
在數學函式和表示式中,數值轉變會自動發生。

舉個例子,當除法 / 操作符應用於非數值時:

alert( "6" / "2" ); // 3, strings are converted to numbers

此外,開發者可以使用一個 Number(value) 函式來明確地轉換該value:

let str = "123";
alert(typeof str); // string
let num = Number(str); // becomes a number 123
alert(typeof num); // number

如果從一個基於字串的資料來源,比如一個文字域,讀取變數,而且,我們開發者又期望讀入的是一個數值。此時,開發者很可能就需要明確地進行數值轉變。

如果此時輸入的字串不是一個合法的數值,整個的轉變結果就是一個 NaN,舉個例子:

let age = Number("an arbitrary string instead of a number");	
alert(age); // NaN, conversion failed

變數的轉變規則如下:

引數 結果
undefined NaN
null 0
true and false 1 and 0
string 開頭和結尾的空白符被去除。然後,如果剩餘字串為空,結果就為 0。否則,結果就為字串中讀取到的值。如果出錯,結果就為 NaN。
舉個例子:

alert( Number("   123   ") ); // 123
alert( Number("123z") );      // NaN (error reading a number at "z")
alert( Number(true) );        // 1
alert( Number(false) );       // 0

注意:在轉變為數值時,null 和 undefined 需要區別對待:null 轉變成 0, undefined 轉變成 NaN。

加號“+” 連線字串

幾乎所有的數學操作符都會把引數轉變成數值。但是,加號“+” 是一個需要區別對待特例。如果加號操作的某一個引數為 string,那麼另一個引數也會被轉變為 string。然後,它們就會被連線起來:

alert( 1 + '2' ); // '12' (string to the right)
alert( '1' + 2 ); // '12' (string to the left)

注意:這隻在加號操作的兩個引數中至少有一個是 string 時才發生。否則的話,引數會被轉變成數值型別,並執行數學加法操作。

ToBoolean
布林轉變是最簡單的轉變。

它會自動發生於邏輯操作(我們將學習到條件測試和其他型別的邏輯操作)中,但是,也可以通過呼叫 Boolean(value) 來手動執行布林轉變。

布林轉變的規則如下:

那些直觀上為空的值,比如0,空字串,null,undefined和 NaN 等,就轉變成 false。
其他的值轉變成 true。
引數 結果
0,null,undefined,NaN,"" false
任何其他值 true
舉個例子:

alert( Boolean(1) ); // true
alert( Boolean(0) ); // false

alert( Boolean("hello") ); // true
alert( Boolean("") ); // false
字串“0” 的布林值為true

某些語言(比如 PHP)把字串“0” 看待為false。但在 JavaScript 中,任何非空的字串都是 true。

alert( Boolean("0") ); // true
alert( Boolean(" ") ); // spaces, also true (any non-empty string is true)

總結
在 JavaScript 中,存在三個被廣泛使用的型別轉變:字串轉變、數值轉變、布林轉變。

ToString——當我們需要輸出某些東西時,也可以通過String(value)顯式執行。原始型別變數的字串轉變是非常簡單和明顯的。

ToNumber——當在數學操作符和表示式中發生,也可以通過Number(value)顯式執行。

ToBoolean——當在邏輯操作中發生,也可以通過Boolean(value)顯式執行。

絕大部分的轉換規則都是非常容易理解和記憶的。一般的,開發者最容易犯錯、最值得注意的異常情況是:

undefined 進行數值轉換,轉成 NaN,而不是0。
“0” 和僅含有空白字元的字串" " 進行布林轉換,轉成 true。
關於 object 的轉變內容,我們將在物件轉變 一節中進行詳細講解。那是,我們將已經學習了更多 JavaScript 的物件知識。

任務
型別轉變
importance:5

下列表達式的運算結果是什麼?

"" + 1 + 0
"" - 1 + 0
true + false
6 / "3"
"2" * "3"
4 + 5 + "px"
"$" + 4 + 5
"4" - 2
"4px" - 2
7 / 0
"  -9\n" + 5
"  -9\n" - 5
null + 1
undefined + 1

仔細思考後,寫下你的答案,並且和程式的實際執行結果進行比較。

轉自:http://www.tiantianbianma.com/type-convert.html/