強制轉換主要指使用number()、string()、boolean()三個函式,手動將各種型別的值,分別轉換成數字、字串或者布林值。
使用number()函式,可以將任意型別的值轉化成數值。
// 數值:轉換後還是原來的值
number(324) // 324
// 字串:如果可以被解析為數值,則轉換為相應的數值
number("324") // 324
// 字串:如果不可以被解析為數值,返回nan
number("324abc") // nan
// 空字串轉為0
number("") // 0
// 布林值:true轉成1,false轉成0
number(true) // 1
number(false) // 0
// undefined:轉成nan
number(undefined) // nan
// null:轉成0
number(null) // 0
number()將字串轉為數值,要比parseint()嚴格很多。基本上只要有乙個字元無法轉成數值,整個字串就會被轉成nan。
parseint("42 cats") // 42
number("42 cats") // nan
上面**中,parseint逐個解析字元,而number函式整體轉換字串的型別。另外,parseint和number函式都會自動過濾乙個字串前導和字尾的空格。
number() // nan
number([1, 2, 3]) // nan
number([4]) // 4
之所以會這樣,是因為number背後的轉換規則比較複雜。
第一步,呼叫物件自身的valueof方法。如果返回原始型別的值,則直接對該值使用number函式,不再進行後續步驟。
第二步,如果valueof返回的還是物件,則改為呼叫物件自身的tostring方法。如果tostring方法返回原始型別的值,則對該值使用number函式,不再進行後續步驟。
第三步,如果tostring方法返回的是物件,就報錯。
var obj = ;
},tostring : function() ;
}};number(obj) // typeerror: cannot convert object to primitive value
string函式可以將任意型別的值轉化為字串,轉換規則如下。
(1)原始型別值
string() // "[object object]"
string([1, 2, 3]) // "1,2,3"
string轉換規則:
1、先呼叫物件自身的tostring方法。如果返回原始型別的值,則對該值使用string函式,不再進行以下步驟。
2、如果tostring方法返回原始型別的值,則對該值使用string函式,不再進行以下步驟。
3、如果valueof方法返回的是物件,就報錯。
boolean函式將任意型別的值轉為布林值。
它的轉換規則相對簡單:除了以下五個值得轉換結果為false,其他的值全部為true。
以下三種情況,j**ascript會自動轉換資料型別。
第一種情況,不同型別的資料互相運算。
123 + "abc" // "123abc"
第二種情況,對非布林值型別的資料求布林值。
第三種情況,對非數值型別的值使用一元運算子(即+和-)
+ // nan
- [1, 2, 3] // nan
自動轉換的規則是這樣的:預期什麼型別的值,就呼叫該型別的轉換函式。比如,某個位置預期為字串,就呼叫string函式進行轉換。如果該位置即可以是字串,也可能是數值,那麼預設轉為數值。 資料型別 型別轉換
這樣的語句將報錯,因為char型別精度低於int型別,編譯器無法將其自動轉換,只能進行強制轉換 int x 65 char ch char x 舉例1 int age 19 char 女 char result age int 不可以自動轉換成char 精度損失 舉例2 int a 10 int b...
Objective C資料型別 資料型別轉換
資料型別 1.objective c資料型別可以分為 基本資料型別 物件資料型別和id型別。2.基本資料型別有 int float double和char型別。3.物件型別就是類或協議所宣告的指標型別,例如 nsautoreleasepool pool 其中,nsautoreleasepool是乙個...
資料型別的轉換
資料型別的轉換 剛接觸vc程式設計的朋友往往對許多資料型別的轉換感到迷惑不解,本文將介紹一些常用資料型別的使用。我們先定義一些常見型別變數藉以說明 int i 100 long l 2001 float f 300.2 double d 12345.119 char username 女俠程佩君 c...