珍愛生命,遠離JS=>JS避坑記


JavaScript避坑記

轉載請注明源地址: http://www.cnblogs.com/funnyzpc/p/8407952.html

上圖=>

  有意思的漫畫,不知大家看懂了沒,這里我想說的是以上這些坑我都碰過,當然包含且不僅限於此, 遂這次借漫畫將之前寫前端時掉過的坑一一羅列哈(雖然不夠完整。。。)。

第一回合:js運算精度問題=>

1 輸入>0.1+0.2==0.3
2 返回>false
3 
4 輸入>0.1+0.2
5 返回>0.30000000000000004

  很怪,經常會在前端計算的時候碰到這個問題,所以如果是多個變量相運算切勿兩兩預算后再將其值和其余變量運算,這樣很容易掉坑,如果實在不行的話,我支一招,請看->

1 輸入>var num=0.1+0.2; 2 輸入>var num2=num.toFixed(2); 3 輸入>num2 4 返回>"0.30"
5 輸入>Number(num2); 6 返回>0.3

  思路很簡單,先賦給個變量,用toFixed(保留小數位);函數四舍五入,但是這樣還不夠,如果處理的值還需要參與運算的話,需要用Number(值/變量);函數轉換為數字類型,因為js屬於腳本語言,這個問題也時常會被忽略,各位一定要小心謹慎才是呀~

 

第二回合:js變量運算問題,請看=>

1 輸入>"2"-3
2 返回>-1
3 
4 輸入>"2"+3
5 返回>"23"
6 
7 輸入>"2"+-3
8 返回>"2-3"

  額,我想說的是。。。你得繞道走。。。,為什么,因為兩種類型之間的運算,運算方式走的內部邏輯不一樣,有時候java也會碰到這個問題,但是java有巨多處理函數來避坑,對於js處理以上類別問題,能通過其他方式避免更好,如不能還是給個解決思路吧,額,具體點兒就是:將所有的運算參數先轉成Number類型再運算,如果是變量類型,切需要注意你的變量是否包含數字,如果不包含就更麻煩了,需要用isNaN(變量);函數來處理后再行Number函數處理后運算之->

1 輸入>Number("2")-Number("3") 2 返回>-1
3 
4 輸入>Number("2")+Number("3") 5 返回>5
6 
7 輸入>Number("2")+-Number("3") 8 返回>-1

 

第三回合:數字字符串比較大小問題=>

1 輸入>"1">"2"
2 返回>false
3 
4 輸入>"11">"9"
5 返回>false

  這個問題,怎么說呢,如果需要比較的是數字,請將比較兩邊的字符串數字轉換成數字后再行比較的好(Number(變量);函數),如果比較的是字符串的話,需要說的是如果比較兩邊都是字符的話,實際比較是按相同位置上的數字大小來比較的,所以看起來會有寫怪怪的,如果比較的兩邊都是一位數的數字的話都是沒有問題的,但是僅限於此;額~,需要再啰嗦的是如果兩邊的值的類型不一致的話一定要轉換成一致類型的變量比較才會准確(數字和數字字符串比較也是坑。。。),這里就不給解葯,大家看看以上兩回合就知道具體解決辦法啦。

 

第四回合:js中true、false與undefined的問題=>

1 輸入>undefined==true
2 返回>false
3 
4 輸入>undefined==false
5 返回>false
6 
7 輸入>if(!undefined) console.log(false); 8 返回>false

  看起來更加怪異,對不,額。。。,我想說的是:這個無解。。。(讓我先哭會兒...)。。。;對於此只能死記硬背了,簡單總結就是:undefined這個東東不等於false也不等於true,但是,但是,敲黑板=>在判斷語句中它是false

現在是:2018-02-03 23:31:31,夜深了,狼來了,躲被窩

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM