js避坑歷險記


代碼改變世界,世界改變碼農,碼農改變代碼!

我就是我,我就是一個碼農的武林。

前方JS巨坑出沒,請注意集中力!

巨坑1:js精度問題

前段時間去一家物流公司面試,做了一個js題,印象尤為深刻:

var one=0.1;
var two=0.2;
var six=0.6;
var eight=0.8;
console.log([two-one==one,eight-six==two]);

 當時的我是反應速度極快的,這是考數學嗎,當然全true啊?回頭再電腦上一試,發現是[true,false]。坑爹啊!玩我呢!

碼農大人我馬上速查百度,才發現js確實是有精度一說,瀏覽器處理不了太大的數據,范圍是2的平方到52次方之間;例如16個9是和10000000000000001相等,懵逼了吧!

同時,瀏覽器也存在處理小數不准確的事實。這是因為計算機只識別二進制數據,而且只能顯示一定的有限長度。

小數精度常見場景:購物車里物品的價格計算與顯示,在不同瀏覽器或設備上顯示價格不一樣,可能就是精度的問題。

解決方案:toFixed后再Number一下就可以了。

巨坑2:js的計算問題

console.log("9"+-3);

  第一眼覺得應該是寫錯了,運行應該報錯嘛!但是,不對,現實很殘忍!瀏覽器控制台顯示為6。對於此,我只能呵呵,對於這兩種運算,js的內部處理邏輯是不太一樣的。而且不加括號也是可以運算的。要避免這種坑,除了書寫規范外,咱們最好先isNaN后再Number一下,再來進行運算。

巨坑3:js的字符比較問題

console.log("37">"8");

 腦洞還是限制了我的想象力,答案竟然是false。細查,發現js中對於字符串的比較,是按位從左到右的相同位置來做比較的。避坑指南:忍忍吧,還是先Number一下再做比較哦,字符串跟數字一定要分清楚哦!

巨坑4:js中undefined做比較的情況

console.log(undefined==true);//false
console.log(undefined==false);//false

if(!undefined)console.log(false);//輸出了false

   上面的是什么梗?undefined和true或false做比較都是false!沒天理啊,為啥?碼農大人我也不知道,姑且死記硬背吧,注意undefined作為條件來判斷是false。

以上的坑,你們都碰到過么?嘻嘻,如果你還碰到其他的坑,歡迎分享和留言。小生在此獻丑了。

 


免責聲明!

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



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