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...