JavaScript類(lèi)型轉(zhuǎn)換方法及需要注意的問(wèn)題小結(jié)(挺全面)
更新時(shí)間:2010年11月11日 14:33:38 作者:
JavaScript類(lèi)型轉(zhuǎn)換方法及需要注意的問(wèn)題,在js中經(jīng)常需要對(duì)數(shù)據(jù)類(lèi)型的轉(zhuǎn)換操作,需要的朋友可以參考下。
一、類(lèi)型轉(zhuǎn)換的方法和應(yīng)該注意的問(wèn)題:
1.轉(zhuǎn)換為布爾型:
(1)用兩次非運(yùn)算(!):
!!5 ==> true
(2)用布爾型的構(gòu)造函數(shù):
new Boolean(5) == > true
值轉(zhuǎn)換為布爾類(lèi)型為false:
0,+0,-0,NaN,""(空字符串),undefined,null
除上面的值其他值在轉(zhuǎn)換以后為true,需要特別提到的是:
"0",new Object(),function(){}
2.轉(zhuǎn)換為字符串類(lèi)型:
(1)加上空字符串"":
123 + "" = "123"
(2)用字符串構(gòu)造函數(shù):
new String(123) = "123".
需要特別注意的轉(zhuǎn)化:
+0 ==> "0"
-0 ==> "0"
-Infinity ==>"-Infinity"
+Infinity ==>"+Infinity"
NaN ==> "NaN"
undefined ==> "undefined"
null ==> "null"
new Object() ==> "[object Object]"
function(){} ==> "function(){}"
3.轉(zhuǎn)換為數(shù)值型:
(1) 取正(+), 減零 (-0), 乘一,(*1),除以一(/1),取負(fù)(-,這個(gè)得到相反的值)。
+"123" = 123
+true = 1
(2)用構(gòu)造函數(shù)Number();
new Number("123") = 123
幾個(gè)需要特別注意的轉(zhuǎn)化:
""(空字符串) ==> 0
"010" ==> 10
"0x10"(16進(jìn)制) ==> 16
"-010" ==> -10
"-0x10" ==> NaN
undefined ==> NaN
null ==> 0
true ==> 1
false ==> 0
new Object() ==> NaN
new function(){} ==> NaN
二、隱式類(lèi)型轉(zhuǎn)換:
(1)二元加法運(yùn)算(+):如果兩個(gè)操作數(shù)中有一個(gè)是String類(lèi)型,將把兩個(gè)操作數(shù)轉(zhuǎn)換為String類(lèi)型再相加。
如果兩個(gè)操作數(shù)中沒(méi)有字符串類(lèi)型,那么將把兩個(gè)操作數(shù)轉(zhuǎn)換為數(shù)值類(lèi)型再做運(yùn)算。
舉例:
"123"+123 = "123123";
123+123 = 246
true + true = 2
true + undefined = NaN (因?yàn)?/SPAN>undefined轉(zhuǎn)換為數(shù)值為NaN,所有結(jié)果為NaN)
true + null = 1 (null轉(zhuǎn)換為數(shù)字是0)
"123" + null = "123null" (包含字符串將轉(zhuǎn)化為字符串相加)
"123" + undefined = "123undefined" (undefined同樣適用)
1 + 2 + "123" = "3123" (1+2是首先按照數(shù)值型計(jì)算的)
(2)二元減乘除運(yùn)算(-*/):因?yàn)橹挥袛?shù)值類(lèi)型才有 - * / 運(yùn)算,所以會(huì)先將兩個(gè)操作數(shù)轉(zhuǎn)換為數(shù)值型再做運(yùn)算。
"123"-123 = 0
(3)一元取正(+),取負(fù)運(yùn)算符(-):取正或者取負(fù)都是針對(duì)數(shù)值型的運(yùn)算,所以會(huì)將操作數(shù)轉(zhuǎn)換為數(shù)值型再做運(yùn)算。
+"123" = 123
-"123" = -123
+"123e" = NaN
+"123f" = NaN
+"123e-2" = 1.23
(4)一元非(!)運(yùn)算符:非運(yùn)算符需要將操作數(shù)轉(zhuǎn)化為布爾類(lèi)型。
!"123" = false
!!"123" = true
!123 = false
!!123 = true
(5)邏輯運(yùn)算符(&&)和(||):
在&&或者||的兩側(cè)被判斷的時(shí)候會(huì)被轉(zhuǎn)為布爾類(lèi)型進(jìn)行判斷,
但是我在測(cè)試的時(shí)候卻發(fā)現(xiàn)一個(gè)有趣的事情。
&&運(yùn)算符:如果有一個(gè)項(xiàng)為false,那么表達(dá)式返回false,如果所有的項(xiàng)都不為false,那么表達(dá)式返回最右邊一個(gè)項(xiàng)的原始值。
舉例:
123 && 23 && 45 返回 45,而不是我們想象中的true.
所以如果有 123 && 23 == true 那么應(yīng)該是false。
至于if(123 && 23) 認(rèn)為是true那應(yīng)該是把23轉(zhuǎn)換為布爾類(lèi)型了。
||運(yùn)算符:
對(duì) || 測(cè)試的結(jié)果也和我想象的不一樣,|| 返回第一個(gè)轉(zhuǎn)換以后不為false的值,如果都為false,它將返回最后一個(gè)為false的值(未進(jìn)行類(lèi)型轉(zhuǎn)化之前的值)。
舉例:
123 || 23 返回 123,而不是想象中的true.
false || null 返回null, 而不是想象中的false。
三、類(lèi)型轉(zhuǎn)換函數(shù)
1.parseFloat轉(zhuǎn)換為浮點(diǎn)數(shù):
字符解析函數(shù)獲取每一個(gè)字符直到遇到不屬于數(shù)值的字符,然后返回它已獲取的數(shù)值.
幾個(gè)需要特別注意的:
""(空字符串) ==> NaN
"123e-2" == > 1.23 (科學(xué)計(jì)算法是可以識(shí)別的)
"010" ==> 10 (8進(jìn)制不能識(shí)別)
"0x10"==> 0 (16進(jìn)制不識(shí)別)
"-010" ==> -10
null,undefined,true,false,new Object(),function(){} ==> NaN
2.parseInt轉(zhuǎn)換為有符號(hào)整數(shù):
跟parseFloat相似,但是他會(huì)把小數(shù)位舍掉(注意不是四舍五入,是完全舍棄,跟Math.floor處理方式一樣),而且他可以識(shí)別八進(jìn)制和16進(jìn)制表示方式:
123e-2 == > 1
"123e-2" ==> 123
"010" == > 8
"0x10" ==> 16
"-010" == > -8
"-0x10" ==> -16
null,undefined,true,false,new Object(),function(){},-Infinity +Infinity NaN ==> NaN
3.三個(gè)取整函數(shù)的區(qū)別:
(1)Math.ceil():“天花板”,很形象吧?就是取大于等于參數(shù)的最小整數(shù)。
8.7 == > 9
-8.7==> -8
(2)Math.floor():"地板",取小于等于參數(shù)的最小整數(shù)。
8.7 ==> 8
-8.7 ==> -9
(3)Math.round():"四舍五入"取整數(shù)。
1.轉(zhuǎn)換為布爾型:
(1)用兩次非運(yùn)算(!):
!!5 ==> true
(2)用布爾型的構(gòu)造函數(shù):
new Boolean(5) == > true
值轉(zhuǎn)換為布爾類(lèi)型為false:
0,+0,-0,NaN,""(空字符串),undefined,null
除上面的值其他值在轉(zhuǎn)換以后為true,需要特別提到的是:
"0",new Object(),function(){}
2.轉(zhuǎn)換為字符串類(lèi)型:
(1)加上空字符串"":
123 + "" = "123"
(2)用字符串構(gòu)造函數(shù):
new String(123) = "123".
需要特別注意的轉(zhuǎn)化:
+0 ==> "0"
-0 ==> "0"
-Infinity ==>"-Infinity"
+Infinity ==>"+Infinity"
NaN ==> "NaN"
undefined ==> "undefined"
null ==> "null"
new Object() ==> "[object Object]"
function(){} ==> "function(){}"
3.轉(zhuǎn)換為數(shù)值型:
(1) 取正(+), 減零 (-0), 乘一,(*1),除以一(/1),取負(fù)(-,這個(gè)得到相反的值)。
+"123" = 123
+true = 1
(2)用構(gòu)造函數(shù)Number();
new Number("123") = 123
幾個(gè)需要特別注意的轉(zhuǎn)化:
""(空字符串) ==> 0
"010" ==> 10
"0x10"(16進(jìn)制) ==> 16
"-010" ==> -10
"-0x10" ==> NaN
undefined ==> NaN
null ==> 0
true ==> 1
false ==> 0
new Object() ==> NaN
new function(){} ==> NaN
二、隱式類(lèi)型轉(zhuǎn)換:
(1)二元加法運(yùn)算(+):如果兩個(gè)操作數(shù)中有一個(gè)是String類(lèi)型,將把兩個(gè)操作數(shù)轉(zhuǎn)換為String類(lèi)型再相加。
如果兩個(gè)操作數(shù)中沒(méi)有字符串類(lèi)型,那么將把兩個(gè)操作數(shù)轉(zhuǎn)換為數(shù)值類(lèi)型再做運(yùn)算。
舉例:
"123"+123 = "123123";
123+123 = 246
true + true = 2
true + undefined = NaN (因?yàn)?/SPAN>undefined轉(zhuǎn)換為數(shù)值為NaN,所有結(jié)果為NaN)
true + null = 1 (null轉(zhuǎn)換為數(shù)字是0)
"123" + null = "123null" (包含字符串將轉(zhuǎn)化為字符串相加)
"123" + undefined = "123undefined" (undefined同樣適用)
1 + 2 + "123" = "3123" (1+2是首先按照數(shù)值型計(jì)算的)
(2)二元減乘除運(yùn)算(-*/):因?yàn)橹挥袛?shù)值類(lèi)型才有 - * / 運(yùn)算,所以會(huì)先將兩個(gè)操作數(shù)轉(zhuǎn)換為數(shù)值型再做運(yùn)算。
"123"-123 = 0
(3)一元取正(+),取負(fù)運(yùn)算符(-):取正或者取負(fù)都是針對(duì)數(shù)值型的運(yùn)算,所以會(huì)將操作數(shù)轉(zhuǎn)換為數(shù)值型再做運(yùn)算。
+"123" = 123
-"123" = -123
+"123e" = NaN
+"123f" = NaN
+"123e-2" = 1.23
(4)一元非(!)運(yùn)算符:非運(yùn)算符需要將操作數(shù)轉(zhuǎn)化為布爾類(lèi)型。
!"123" = false
!!"123" = true
!123 = false
!!123 = true
(5)邏輯運(yùn)算符(&&)和(||):
在&&或者||的兩側(cè)被判斷的時(shí)候會(huì)被轉(zhuǎn)為布爾類(lèi)型進(jìn)行判斷,
但是我在測(cè)試的時(shí)候卻發(fā)現(xiàn)一個(gè)有趣的事情。
&&運(yùn)算符:如果有一個(gè)項(xiàng)為false,那么表達(dá)式返回false,如果所有的項(xiàng)都不為false,那么表達(dá)式返回最右邊一個(gè)項(xiàng)的原始值。
舉例:
123 && 23 && 45 返回 45,而不是我們想象中的true.
所以如果有 123 && 23 == true 那么應(yīng)該是false。
至于if(123 && 23) 認(rèn)為是true那應(yīng)該是把23轉(zhuǎn)換為布爾類(lèi)型了。
||運(yùn)算符:
對(duì) || 測(cè)試的結(jié)果也和我想象的不一樣,|| 返回第一個(gè)轉(zhuǎn)換以后不為false的值,如果都為false,它將返回最后一個(gè)為false的值(未進(jìn)行類(lèi)型轉(zhuǎn)化之前的值)。
舉例:
123 || 23 返回 123,而不是想象中的true.
false || null 返回null, 而不是想象中的false。
三、類(lèi)型轉(zhuǎn)換函數(shù)
1.parseFloat轉(zhuǎn)換為浮點(diǎn)數(shù):
字符解析函數(shù)獲取每一個(gè)字符直到遇到不屬于數(shù)值的字符,然后返回它已獲取的數(shù)值.
幾個(gè)需要特別注意的:
""(空字符串) ==> NaN
"123e-2" == > 1.23 (科學(xué)計(jì)算法是可以識(shí)別的)
"010" ==> 10 (8進(jìn)制不能識(shí)別)
"0x10"==> 0 (16進(jìn)制不識(shí)別)
"-010" ==> -10
null,undefined,true,false,new Object(),function(){} ==> NaN
2.parseInt轉(zhuǎn)換為有符號(hào)整數(shù):
跟parseFloat相似,但是他會(huì)把小數(shù)位舍掉(注意不是四舍五入,是完全舍棄,跟Math.floor處理方式一樣),而且他可以識(shí)別八進(jìn)制和16進(jìn)制表示方式:
123e-2 == > 1
"123e-2" ==> 123
"010" == > 8
"0x10" ==> 16
"-010" == > -8
"-0x10" ==> -16
null,undefined,true,false,new Object(),function(){},-Infinity +Infinity NaN ==> NaN
3.三個(gè)取整函數(shù)的區(qū)別:
(1)Math.ceil():“天花板”,很形象吧?就是取大于等于參數(shù)的最小整數(shù)。
8.7 == > 9
-8.7==> -8
(2)Math.floor():"地板",取小于等于參數(shù)的最小整數(shù)。
8.7 ==> 8
-8.7 ==> -9
(3)Math.round():"四舍五入"取整數(shù)。
您可能感興趣的文章:
- javascript將浮點(diǎn)數(shù)轉(zhuǎn)換成整數(shù)的三個(gè)方法
- javascript不同類(lèi)型數(shù)據(jù)之間的運(yùn)算的轉(zhuǎn)換方法
- javascript類(lèi)型轉(zhuǎn)換使用方法
- JavaScript將數(shù)據(jù)轉(zhuǎn)換成整數(shù)的方法
- 使用javascript:將其它類(lèi)型值轉(zhuǎn)換成布爾類(lèi)型值的解決方法詳解
- javascript 日期時(shí)間 轉(zhuǎn)換的方法
- JavaScript轉(zhuǎn)換農(nóng)歷類(lèi)實(shí)現(xiàn)及調(diào)用方法
- JavaScript中將一個(gè)值轉(zhuǎn)換為字符串的方法分析[譯]
- Javascript 類(lèi)型轉(zhuǎn)換方法
- javascript將數(shù)字轉(zhuǎn)換整數(shù)金額大寫(xiě)的方法
相關(guān)文章
原生態(tài)js,鼠標(biāo)按下后,經(jīng)過(guò)了那些單元格的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇原生態(tài)js,鼠標(biāo)按下后,經(jīng)過(guò)了那些單元格的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08
前端開(kāi)發(fā)之JS生成32位隨機(jī)數(shù)的方法舉例
最近有個(gè)需求,是需要生成32位長(zhǎng)度的隨機(jī)數(shù),下面這篇文章主要給大家介紹了關(guān)于前端開(kāi)發(fā)之JS生成32位隨機(jī)數(shù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
詳解maxlength屬性在textarea里奇怪的表現(xiàn)
這篇文章主要介紹了maxlength屬性在textarea里奇怪的表現(xiàn)的相關(guān)資料,需要的朋友可以參考下2015-12-12
使用腳本控制網(wǎng)頁(yè)Table的顯示隱藏(全代碼)_AX
使用腳本控制網(wǎng)頁(yè)Table的顯示隱藏(全代碼)_AX...2006-12-12
前端本地文件獲取excel表格內(nèi)容并渲染在頁(yè)面的方法
這篇文章主要介紹了前端本地文件獲取excel表格內(nèi)容并渲染在頁(yè)面的方法,主要利用SheetJS插件用于處理Excel文件,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
如何將一維度數(shù)組轉(zhuǎn)換成三維數(shù)組結(jié)構(gòu)
在開(kāi)發(fā)過(guò)程中,可能會(huì)遇到需要將一維數(shù)組轉(zhuǎn)換為多維數(shù)組的情況,以滿足特定數(shù)據(jù)結(jié)構(gòu)的需求,文章介紹了如何將后端返回的一維列表數(shù)據(jù)通過(guò)編程方法轉(zhuǎn)換成三維數(shù)組結(jié)構(gòu),以適應(yīng)特定的UI展示需求,通過(guò)循環(huán)遍歷和數(shù)據(jù)重組的方式,可以有效地實(shí)現(xiàn)數(shù)組結(jié)構(gòu)的轉(zhuǎn)換2024-09-09

