欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javascript中常用類型的格式化方法小結(jié)

 更新時(shí)間:2016年12月26日 14:36:45   作者:iDom  
這篇文章主要給大家介紹了Javascript中常用類型的格式化方法,其中包括格式化浮點(diǎn)數(shù)、格式化有符號(hào)整數(shù)(int32)、格式化無(wú)符號(hào)整數(shù)(uint32)、格式化布爾值以及格式化字符串等,文中給出了詳細(xì)的示例代碼,有需要的朋友們可以參考借鑒,下面來一起看看吧。

前言

相信大家都知道因?yàn)镴avaScript是弱類型的語(yǔ)言,項(xiàng)目寫大了會(huì)非常難以把控,容易出各種問題。幸好有強(qiáng)類型的TypeScript可以很大程度上彌補(bǔ)這一缺陷,但TypeScript提供的強(qiáng)類型是編譯階段的,雖然絕大部分類型相關(guān)的問題在編譯階段都能被覆蓋到,但對(duì)于小部分在運(yùn)行時(shí)才會(huì)出錯(cuò)的錯(cuò)誤還是無(wú)能為力。

例如以下幾種常見的情況:

     1、定義為number的屬性,賦值的時(shí)候,如果賦值源沒有定義強(qiáng)類型,這樣就會(huì)繞過編譯檢查的階段,到運(yùn)行時(shí)發(fā)現(xiàn)可能傳進(jìn)來的是個(gè)字符串。類內(nèi)部再一頓加減乘除,很容易導(dǎo)致一大片數(shù)據(jù)全都被污染為NaN。

     2、定義boolean類型的屬性,經(jīng)常會(huì)賦值為一個(gè)對(duì)象,雖然運(yùn)行起來不會(huì)出明顯問題,但其實(shí)只想存儲(chǔ)一下對(duì)象是否為空的狀態(tài),卻有可能導(dǎo)致那個(gè)對(duì)象始終無(wú)法被回收。

     3、定義為整型的屬性,比如index。這點(diǎn)即使TS也無(wú)能為力,因?yàn)門S里也沒有int。很容易傳入一個(gè)浮點(diǎn)數(shù),導(dǎo)致從數(shù)組取索引時(shí)產(chǎn)生報(bào)錯(cuò)。

在JavaScript運(yùn)行時(shí),任何用法都有可能發(fā)生,如果要寫出強(qiáng)壯的組件或框架,類似這些問題,都是必須要考慮到的。解決方案就是對(duì)于任何來自于外部傳入的參數(shù)或變量進(jìn)行格式化,這樣只要格式化一次,組件和框架內(nèi)部就能高效地正常運(yùn)轉(zhuǎn),不用再各種特殊判斷。

下面列舉幾種常用類型的高性能格式化方法:

格式化浮點(diǎn)數(shù)

value = +value || 0;

測(cè)試輸出:

function test(value) {
 value = +value || 0;
 return value;
}

test("123"); //123
test("123.5"); //123.5
test(123); //123
test(123.5); //123.5
test("abc"); //0
test("123ab"); //0
test(NaN); //0
test(null); //0
test(undefined); //0

格式化有符號(hào)整數(shù)(int32)

value = +value | 0;

等價(jià)于:

value = ~~value;

測(cè)試輸出:

function test(value) {
 value = +value | 0;
 return value;
}

test("123"); //123
test("123.5"); //123
test(123); //123
test(123.5); //123
test("-123.5"); //-123
test("abc"); //0
test(NaN); //0
test(null); //0
test(undefined); //0

要特別注意一下:以上這種格式化方式只適用于32位有符號(hào)整型數(shù),也就類似其他語(yǔ)言里的int,正整數(shù)部分最大只能到2147483647(2^31-1) 。uint32或者更大的int64是不行的,會(huì)被截?cái)?。具體可以參考這里:按位操作符。通常在其他語(yǔ)言里,可以使用int的場(chǎng)景使用這種格式化方法都完全沒問題。

格式化無(wú)符號(hào)整數(shù)(uint32)

value = +value >>> 0;

測(cè)試輸出:

function test(value) {
 value = +value >>> 0;
 return value;
}

test("123"); //123
test("123.5"); //123
test(0xFFFFFFFF); //0xFFFFFFFF
test(0xFFFFFFFF+).5; //0xFFFFFFFF
test("-123.5"); //0xFFFFFF85
test("abc"); //0
test(NaN); //0
test(null); //0
test(undefined); //0

要注意一下:位移運(yùn)算符是三個(gè)箭頭>>>,有且只有這個(gè)運(yùn)算符是操作無(wú)符號(hào)整型,結(jié)果是一個(gè)uint32,范圍從0~4294967295(2^32-1),其他所有位移運(yùn)算符的結(jié)果都是有符號(hào)整型(int32),因此也沒法表示大于2147483647(2^31-1)的數(shù)字。

格式化布爾值

value = !!value;

測(cè)試輸出:

function test(value) {
 value = !!value;
 return value;
}

test(true); //true
test(123); //true
test(123.5); //true
test({}); //true
test([]); //true
test("abc"); //true
test(""); //false
test(false); //false
test(NaN); //false
test(null); //false
test(undefined); //false

格式化字符串

字符串的格式化沒有那么固定的需求,一般情況下避免null就行了,因?yàn)槠渌麑?duì)字符串變量的操作,比如加號(hào),都會(huì)自動(dòng)轉(zhuǎn)換類型。

value = value || "";

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用Javascript能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • 一文探索執(zhí)行JavaScript函數(shù)的多種方法

    一文探索執(zhí)行JavaScript函數(shù)的多種方法

    在前端開發(fā)中,動(dòng)態(tài)執(zhí)行?JavaScript?函數(shù)是一種強(qiáng)大的能力,能夠幫助開發(fā)者實(shí)現(xiàn)靈活的邏輯控制,本文將和大家探討一下幾種常用的執(zhí)行方法,需要的可以了解下
    2025-01-01
  • JS父頁(yè)面與子頁(yè)面相互傳值方法

    JS父頁(yè)面與子頁(yè)面相互傳值方法

    這篇文章主要介紹了使用JS在父頁(yè)面和子頁(yè)面間相互傳值方法,子頁(yè)面可以是window.open彈出的,也可以是iframe框架中的頁(yè)面,需要的朋友可以參考下
    2014-03-03
  • 詳解JavaScript函數(shù)對(duì)象

    詳解JavaScript函數(shù)對(duì)象

    函數(shù)是由事件驅(qū)動(dòng)的或者當(dāng)它被調(diào)用時(shí)執(zhí)行的可重復(fù)使用的代碼塊,JavaScript 中的所有事物都是對(duì)象:字符串、數(shù)值、數(shù)組、函數(shù),下面通過本文給大家介紹JavaScript函數(shù)對(duì)象,感興趣的朋友一起學(xué)習(xí)吧
    2015-11-11
  • JavaScritp添加url參數(shù)并將參數(shù)加入到url中及更改url參數(shù)的方法

    JavaScritp添加url參數(shù)并將參數(shù)加入到url中及更改url參數(shù)的方法

    這篇文章給大家介紹javascript添加url參數(shù)方法,將參數(shù)加入到url中,涉及到url添加參數(shù)的相關(guān)知識(shí),關(guān)于js添加url參數(shù)感興趣的朋友可以參考下本篇文章
    2015-10-10
  • JS預(yù)覽圖像將本地圖片顯示到瀏覽器上

    JS預(yù)覽圖像將本地圖片顯示到瀏覽器上

    本代碼從file域獲取本地圖片url并將本地圖片顯示到瀏覽器上,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下,希望對(duì)大家有所幫助
    2013-08-08
  • js與jquery獲取父級(jí)元素,子級(jí)元素,兄弟元素的實(shí)現(xiàn)方法

    js與jquery獲取父級(jí)元素,子級(jí)元素,兄弟元素的實(shí)現(xiàn)方法

    本篇文章主要是對(duì)js與jquery獲取父級(jí)元素,子級(jí)元素,兄弟元素的實(shí)現(xiàn)方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-01-01
  • javascript變量聲明實(shí)例分析

    javascript變量聲明實(shí)例分析

    這篇文章主要介紹了javascript變量聲明,實(shí)例分析了javascript變量聲明的相關(guān)使用技巧,需要的朋友可以參考下
    2015-04-04
  • Sourcemap源代碼映射詳細(xì)介紹

    Sourcemap源代碼映射詳細(xì)介紹

    這篇文章主要為大家介紹了Sourcemap源代碼映射介紹及示例詳解解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-04-04
  • js獲取html參數(shù)及向swf傳遞參數(shù)應(yīng)用介紹

    js獲取html參數(shù)及向swf傳遞參數(shù)應(yīng)用介紹

    HTML頁(yè)面是在客戶端執(zhí)行的,這樣要獲取參數(shù)必須使用客戶端腳本如JavaScript,在這點(diǎn)上與服務(wù)器端腳本獲取參數(shù)方式有所不同接下來將詳細(xì)介紹下感興趣的你可不要錯(cuò)過了哈
    2013-02-02
  • JS勻速運(yùn)動(dòng)演示示例代碼

    JS勻速運(yùn)動(dòng)演示示例代碼

    勻速運(yùn)動(dòng)的效果想必大家都有見到過吧,在本文為大家介紹下使用JS是如何實(shí)現(xiàn)的,感興趣的朋友不要錯(cuò)過
    2013-11-11

最新評(píng)論