js之資料型別轉換

2021-09-11 05:51:41 字數 4251 閱讀 6180

js中的資料型別分為以下兩種型別。

基本資料型別:數字 number,字串 string,布林 boolean,空 null,未定義 undefined

引用資料型別:

物件 object:普通物件,陣列物件 (array),正則物件 (regexp),日期物件 (date),數學函式 (math

函式 function

真實專案中,根據需求,我們往往需要把資料型別之間進行轉換,比較來進行相關操作。

需要轉換資料的情況:

1,isnan(argument):當檢測的資料不是數字型別的時候,會使用number()將其轉化成數字,然後再進行nan檢測。

2,parseint/parsefloat/number():手動的將資料轉化成數字型別。前兩個分別是對資料進行解析轉換,前者是整數,後者是浮點數。他們解析的原則是從前往後進行解析,盡其所能。若存在有能識別的數字就解析,如果第一位就不是數字則返回nan.number則是對整體進行判斷,是數字返回數字,否則nan.

3,運算子操作:"+ - * / "在"+"的運算中,不僅僅會有數學的加法運算,還可能包括字串拼接。

'2' - 1 =>2

// number('2') -> 2

// 2-1=2

'3px' - 1 => nan

'3px' + 1 => '3px1'

let i = '0';

i=i+1;=> '01'

i+=1; => '01'

i++; => 1 //i++是單純的數**算,摒棄了字串拼接

4,在做 == 比較的時候,有可能把其他值轉化成number型別。文章末尾會講。

轉換規律:number()瀏覽器,自行轉換都是基於這個方法的。

基本型別:

string:

number('') => 0,

number(' ') => 0,

number('\n') => 0 換行符

number('\t') => 0製表符

number('89') => 89

number('89p') => nan

布林型別:

number(true) => 1

number(false) => 0

null:

number(null) => 0

undefined:

number(undefined) => nan

引用型別的資料,在進行轉化的時候,會先呼叫tostring(),然後再number();

object:

number({}) => nan

//({}).tostring() => '[object object]' => nan

number() => 0

//.tostring() => "" => 0

number([1]) => 1

number([1,2]) => nan

//[1,2].tostring() => "1,2" => nan

需要轉換的情況:

1,基於alert/confirm/prompt/document.write()等方法輸出的時候,會把值預設轉成字串,然後在進行輸出。

2,基於 "+"  進行字串拼接的時候

3,把引用型別的資料轉化成數字的時候,會首先轉化成字串,再轉化成數字。

4,給隊形設定屬性名的時候,如果不是字串,會首先轉換乘字串,然後在當做屬性存到物件中(物件的屬性,只能是數字或者字串。在類陣列中,屬性就是數字,只有當屬性名不是數字和字串的時候,才會將該屬性名轉化成字串再存到物件中)

5,手動呼叫tostring/tofixed/join/string等方法的時候,也是轉換成字串

let arr = [1,3]

arr.tostring() => "1,3"

math.pi.tofixed(4) => "3.1416"

arr.join('-') => "1-3"

string(arr) => "1,3"

轉化規律:

number型別:

1 => '1'

布林型別:

string(true) => 'true'

string(false) => 'false'

null:

string(null) => 'null'

undefined:

string(undefined) => 'undefined'

陣列: string() => ''

string([1]) => '1'

string([1,3]) => "1,3"

物件: => '[object object]'

{} => '[object object]'

//不管是啥樣的普通物件,最後結果都一樣

需要轉換的情況:

1,基於!/!!/boolean()等方法轉換

2,條件判斷中的條件都會轉換成布林型別。

if(n) {}

//把n的值轉換成布林然後再驗證真假

if('3px' + 3) {}

//'3px3' => true => 執行

轉換規律:只有  " 0/nan/null/undefined/空字串 "這五個字會轉換成false,其餘都是true

1,數**算和字串拼接符合  "+":當表示式**現字串,就是字串拼接,否則就是數**算。

1+true =>2 數**算

'1'+true =>'1true' 字串拼接

[12]+10 =>'1210' 雖然現在沒看見字串,但是引用型別轉換為數字,首先會轉換為字串,所以變為了字串拼接

({})+10 =>"[object object]10"

+10 =>"10"

{}+10 =>10 這個和以上說的沒有半毛錢關係,因為它根本就不是數**算,也不是字串拼接,它是兩部分**

{} 代表乙個**塊(塊級作用域)

+10 才是我們的操作

嚴格寫法:{}; +10;

思考題:

12+true+false+null+undefined++'珠峰'+null+undefined++true

=>'nan珠峰nullundefinedtrue'

2,在進行 "==" 進行資料比較的時候,如果左右兩邊的資料型別不一樣,則先轉換成相同的資料型別再進行比較。

(1)不同資料情況下的比較,都是把其他資料型別的值,轉換成數字再進行比較。

物件==數字:把物件轉換為數字

物件==布林:把物件轉換為數字,把布林也轉換為數字

物件==字串:把物件轉換為數字,把字串也轉換為數字

字串==數字:字串轉換為數字

字串==布林:都轉換為數字

布林==數字:把布林轉換為數字

== =>false

== =>false

var obj1={};

var obj2=obj1;

obj1==obj2 =>true

(3)特殊記憶的地方。

null==undefined:true

null===undefined:false

null&&undefined和其它值都不相等

nan==nan:false

nan和誰都不相等包括自己

例子:

1==true =>true

1==false =>false

2==true =>false 規律不要混淆,這裡是把true變為數字1

==true:false 都轉換為數字 0==1

!==true:false

==false:true 都轉換為數字 0==0

!==false:true 先算!,把陣列轉換為布林取反=>false =>false==false

JS學習之資料型別轉換

doctype html utf 8 資料型別轉換 title 轉化為字元型 1.把數字型轉換為字元型 變數.tostring var num 10 var str num.tostring console.log str console.log typeof str 2.利用string 函式 c...

JS資料型別轉換

js var blue alert scolor.length outputs 4 js varfalse alert bfound.tostring outputs false js varvar outputs 10 js var outputs a js var var var var ret...

JS 資料型別轉換

js 資料型別轉換 方法主要有三種 轉換函式 強制型別轉換 利用js變數弱型別轉換。1.轉換函式 js提供了parseint 和parsefloat 兩個轉換函式。前者把值轉換成整數,後者把值轉換成浮點數。只有對string型別呼叫這些方法,這兩個函式才能正確執行 對其他型別返回的都是nan not...