js中數(shù)據(jù)類型分為兩種,第一種基本的數(shù)據(jù)類型:Number醉者,String但狭,Boolean,Null撬即,Undefiend立磁;
第二種是復(fù)雜的數(shù)據(jù)類型,統(tǒng)稱object(引用類型)剥槐。
簡單說一下基本數(shù)據(jù)類型唱歧,不詳細(xì)介紹了
js中的number
JavaScript不區(qū)分整數(shù)和浮點數(shù),統(tǒng)一用Number表示粒竖,例如:
1 ?//整數(shù)1
3.1415926 ?//小數(shù)
-12312 //負(fù)數(shù)
1.23798e12 ?//科學(xué)計數(shù)法
特殊的number類型
NaN //NaN表示Not a Number颅崩,當(dāng)無法計算結(jié)果時用NaN表示
Infinity ?// Infinity表示無限大,當(dāng)數(shù)值超過了JavaScript的Number所能表示的最大值時蕊苗,就表示為Infinity
js中的string
"sdadasd" //字符串sdadasfd沿后,用單引號或者雙引號包裹起來
js中的boolean
true //true,正確
false ?//false , 錯誤
js中的null和undifined
null ?//空值
undifined ?//未定義
下面介紹一下強(qiáng)制類型轉(zhuǎn)換
Number(obj) ?// 把obj轉(zhuǎn)化為number,如果沒辦法轉(zhuǎn)為number岁歉,則返回NaN得运,parseInt()和parseFloat()也是這樣膝蜈,下文有詳細(xì)介紹
toString(obj) ?// 把obj轉(zhuǎn)化為字符串
Boolean(obj) ?//把obj轉(zhuǎn)化為布爾值
轉(zhuǎn)換規(guī)則
Boolean(undefined):false
Number(undefined):NaN
String(undefined):'undefined'
Boolean(null):false
Number(null):0
String(null):'null'
Number(true): 1 || Number(false) : 0
String(true):'true' || String(false):'false'
Boolean(undefined):false
Boolean(null):false
Boolean(非空對象包括空數(shù)組[]和空對象{}):true
Boolean(非0): true || Boolean(0和NaN):false
Boolean(非空包括空格字符串):true || Boolean(''):false
Number(true):1 || Number(false):0
Number(各種進(jìn)制的數(shù)字):運算后的十進(jìn)制的數(shù)字,如1.0或1.或01會以1輸出
Number(undefined):NaN
Number(null):0
Number(字符串):
Number(只包含數(shù)字的十進(jìn)制和十六進(jìn)制的字符串):運算后的十進(jìn)制的數(shù)字
[注意]字符串中不識別八進(jìn)制熔掺,按照十進(jìn)制數(shù)字處理
Number(''和' '):0
Number(其他情況的字符串):NaN
Number(對象):
Number([]和[0]和[-0]):0
Number([數(shù)字]):運算后的數(shù)字
Number([1,2]和{}和其他對象):NaN
下面看一些表達(dá)式計算結(jié)果
3>2 ?//false
'2'!==2 ?//false
'2'!===2 ?//true
Infinity==Infinity //true
NaN==NaN ?//false
null==undefined ?//true
null===undefined ?//false
1==true ?//true
1===true //false
'1'==true ?//true
'1'===true ?//false
js中的運算
js中的運算符優(yōu)先級
運算符 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 說明
.[ ] ( ) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 字段訪問饱搏、數(shù)組索引、函數(shù)調(diào)用和表達(dá)式分組
++ — – ~ ! ? ? ? ? ? ? ?delete new typeof void一元運算符置逻、返回數(shù)據(jù)類型推沸、對象創(chuàng)建、未定義的值
* / % ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 相乘券坞、相除鬓催、求余數(shù)
+ – + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?相加、相減恨锚、字符串串聯(lián)
<< >> >>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?移位
< <= > >= instanceof ? ? 小于宇驾、小于或等于、大于猴伶、大于或等于课舍、是否為特定類的實例
== != === !== ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?相等、不相等他挎、全等筝尾,不全等
& ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 按位“與”
^ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?按位“異或”
| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?按位“或”
&& ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 邏輯“與”
|| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?邏輯“或”
?: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?條件運算
= OP= ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?賦值、賦值運算(如 += 和 &=)
, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?多個計算
js中的隱式轉(zhuǎn)換
console.log("-------以下乘法---------");
console.log(5*"5");//25
console.log(5*"a");//nan
console.log(5*NaN);//nan
console.log(5*null);//0
console.log(5*undefined);//nan
console.log(5*5);//25
console.log("-------以上乘法---------");
// 1办桨、如果2個數(shù)值都是數(shù)字筹淫,那么直接進(jìn)行乘法運算,(相信大家都會的呢撞,和小學(xué)數(shù)學(xué)一樣损姜,同時要注意數(shù)字的符號),如果乘積數(shù)值超過了ECMAscript的數(shù)值表示范圍殊霞,則返回Infinity(正無窮)或者-Infinity(負(fù)無窮)
//? 2薛匪、如果一個數(shù)是NaN,那么結(jié)果就是NaN
// 3、如果Infinity與0相乘脓鹃,結(jié)果是NaN
// 4、假如一個操作符是數(shù)字古沥,另外一個不是數(shù)值瘸右,那么先用Number()函數(shù),將其進(jìn)行轉(zhuǎn)化岩齿,將轉(zhuǎn)化出來的值與數(shù)字進(jìn)行相乘太颤。假如轉(zhuǎn)換出來的結(jié)果出現(xiàn)NaN,那么結(jié)果就是NaN盹沈。
//除法
console.log("-------以下除法---------");
console.log(5/"5");//1
console.log(5/"a");//nan
console.log(5/NaN);//nan
console.log(5/null);//in
console.log(null/5);//0
console.log(5/undefined);//nan
console.log(5/5);//1
console.log(5/0);//in
console.log(0/5);//0
console.log(0/0);//nan
console.log("-------以上除法---------");
// 和乘法類似龄章,唯一多的一條就是0/0結(jié)果是NaN
//取余吃谣、求模
console.log("-------以下取余、求模--------");
console.log(16%"5");//1
console.log(5%"a");//nan
console.log(5%NaN);//nan
console.log(5%null);//nan
console.log(null%5);//0
console.log(5%undefined);//nan
console.log(5%5);//0
console.log(5%0);//nan
console.log(0%5);//0
console.log(0%0);//nan
console.log("-------以上取余做裙、求模---------");
// 1岗憋、被除數(shù)是無窮大,除數(shù)是有限大的值锚贱,那么結(jié)果是NaN
// 2仔戈、被除數(shù)是有限大的值,除數(shù)是0拧廊,那么結(jié)果是NaN
// 3监徘、Infinity%Infinity結(jié)果是NaN
// 4、被除數(shù)是有限大的值吧碾,除數(shù)是無窮大的值凰盔,結(jié)果是被除數(shù)。
// 5倦春、被除數(shù)是0户敬,結(jié)果是0
//加法
console.log("-------以下加法--------");
console.log(16+"5");//165
console.log(5+"a");//5a
console.log(5+NaN);//nan
console.log("5"+null);//
console.log(5+undefined);//nan
console.log(5+5);//10
console.log("兩個數(shù)的和是"+5+5);//55
console.log("兩個數(shù)的和是"+(5+5));//10
console.log("-------以上加法--------");
//? 1、有一個是字符串溅漾,那么另外一個也會轉(zhuǎn)換為字符串進(jìn)行拼接山叮。假如一個是字符串,另外一個是null或者undefined添履,那么相加屁倔,null或者undefined就會調(diào)用String()方法,獲得字符串“null”或者“undefined”暮胧,然后進(jìn)行拼接锐借。
// 2、假如一個數(shù)字加null或者undefined往衷,那么還是把null或者undefined進(jìn)行Number()轉(zhuǎn)換之后再相加钞翔。
// 3、剩下的原則和其他的差不多席舍,就不多說了布轿。
//減法
console.log("-------以下減法--------");
console.log(16-"5");//11
console.log(typeof 16-"5");
console.log(5-"a");//nan
console.log(5-NaN);//nan
console.log(5-null);//5
console.log(5-undefined);//nan
console.log(5-5);//0
console.log(5-true);//4
console.log(5-"true");//nan
console.log(5-"");//5
//alert(Number('sds'));nan
// alert(Number(''));//0
console.log("兩個數(shù)的差是"+5-5);//nan
console.log("兩個數(shù)的差是"+(5-5));//shi0
console.log("-------以上減法--------");
// 1、Infinity-Infinity結(jié)果是NaN
// 2来颤、-Infinity-Infinity結(jié)果是-Infinity
// 3汰扭、一個數(shù)字減Infinity結(jié)果是-Infinity
// 4、Infinity-(-Infinity)結(jié)果是Infinity
// 5福铅、如果操作數(shù)是對象萝毛,則調(diào)用對象valueOf方法,如果結(jié)果是NaN那么結(jié)果就是NaN滑黔。如果沒有valueOf方法笆包,那么調(diào)用toString()方法环揽,并將得到的字符串轉(zhuǎn)換為數(shù)值。
總結(jié)
js隱式轉(zhuǎn)化有很多坑庵佣,盡量用===替代==