国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Javascript中常用類型的格式化方法小結

2019-11-19 18:15:39
字體:
來源:轉載
供稿:網友

前言

相信大家都知道因為JavaScript是弱類型的語言,項目寫大了會非常難以把控,容易出各種問題。幸好有強類型的TypeScript可以很大程度上彌補這一缺陷,但TypeScript提供的強類型是編譯階段的,雖然絕大部分類型相關的問題在編譯階段都能被覆蓋到,但對于小部分在運行時才會出錯的錯誤還是無能為力。

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

     1、定義為number的屬性,賦值的時候,如果賦值源沒有定義強類型,這樣就會繞過編譯檢查的階段,到運行時發現可能傳進來的是個字符串。類內部再一頓加減乘除,很容易導致一大片數據全都被污染為NaN。

     2、定義boolean類型的屬性,經常會賦值為一個對象,雖然運行起來不會出明顯問題,但其實只想存儲一下對象是否為空的狀態,卻有可能導致那個對象始終無法被回收。

     3、定義為整型的屬性,比如index。這點即使TS也無能為力,因為TS里也沒有int。很容易傳入一個浮點數,導致從數組取索引時產生報錯。

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

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

格式化浮點數

value = +value || 0;

測試輸出:

function test(value) { value = +value || 0; return value;}test("123"); //123test("123.5"); //123.5test(123); //123test(123.5); //123.5test("abc"); //0test("123ab"); //0test(NaN); //0test(null); //0test(undefined); //0

格式化有符號整數(int32)

value = +value | 0;

等價于:

value = ~~value;

測試輸出:

function test(value) { value = +value | 0; return value;}test("123"); //123test("123.5"); //123test(123); //123test(123.5); //123test("-123.5"); //-123test("abc"); //0test(NaN); //0test(null); //0test(undefined); //0

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

格式化無符號整數(uint32)

value = +value >>> 0;

測試輸出:

function test(value) { value = +value >>> 0; return value;}test("123"); //123test("123.5"); //123test(0xFFFFFFFF); //0xFFFFFFFFtest(0xFFFFFFFF+).5; //0xFFFFFFFFtest("-123.5"); //0xFFFFFF85test("abc"); //0test(NaN); //0test(null); //0test(undefined); //0

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

格式化布爾值

value = !!value;

測試輸出:

function test(value) { value = !!value; return value;}test(true); //truetest(123); //truetest(123.5); //truetest({}); //truetest([]); //truetest("abc"); //truetest(""); //falsetest(false); //falsetest(NaN); //falsetest(null); //falsetest(undefined); //false

格式化字符串

字符串的格式化沒有那么固定的需求,一般情況下避免null就行了,因為其他對字符串變量的操作,比如加號,都會自動轉換類型。

value = value || "";

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家學習或者使用Javascript能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙陵县| 德清县| 洛南县| 平武县| 闽侯县| 惠东县| 绥芬河市| 沙坪坝区| 南皮县| 深圳市| 内江市| 柞水县| 那坡县| 安丘市| 大丰市| 上栗县| 滦南县| 长子县| 潼关县| 繁昌县| 泸水县| 大同市| 兴仁县| 新沂市| 平原县| 铜鼓县| 湘潭市| 山丹县| 成安县| 临桂县| 永德县| 玉林市| 大石桥市| 板桥市| 泾川县| 安徽省| 永州市| 富宁县| 永州市| 衡水市| 华坪县|