js避坑歷險記

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

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

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

巨坑1:js精度問題瀏覽器

前段時間去一家物流公司面試,作了一個js題,印象尤其深入:spa

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]。坑爹啊!玩我呢!blog

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

同時,瀏覽器也存在處理小數不許確的事實。這是由於計算機只識別二進制數據,並且只能顯示必定的有限長度。字符串

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

解決方案:toFixed後再Number一下就能夠了。console

巨坑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。

以上的坑,大家都碰到過麼?嘻嘻,若是你還碰到其餘的坑,歡迎分享和留言。小生在此獻醜了。

相關文章
相關標籤/搜索