立即執(zhí)行函數(shù),通常也可作閉包,能夠構(gòu)造一個函數(shù)級別的變量作用域。一般寫法如下:
(function () { // code })();
但是這中寫法容易造成一些問題,如上面的代碼如果沒有分號結(jié)尾的話:
var a = 1 (function () { // Uncaught TypeError: 1 is not a function })()
那么應該這樣寫:
void function () { // code }();
或者:
!function () { // code }();
;(function(){ //code })()
選擇哪種看個人喜好,現(xiàn)在js中有個規(guī)范叫standardjs規(guī)范, 提倡省略行尾的分號(個人不太習慣),需要改變這個習慣。
從JS誕生以來,賦予了null為Object類型,可以說是JS的一個終生bug,從未、以后也不會改變。
null不具備作為對象的基本特征,屬于原始數(shù)據(jù)類型。我想說明的是在判斷一個變量是否是對象之前,應該先判斷其是否為null。
if (opt!== null && typeof opt=== 'object') { // opt是一個對象 }
在做小數(shù)之間的計算時候,注意浮點數(shù)之前的精度問題。
如:0.1+0.2是否等于0.3? 答案是:0.1+0.2=0.30000000000000004
類似:0.4-0.3=0.10000000000000003
如果存在此類計算,那么先把小數(shù)轉(zhuǎn)為字符串,使用toFixed去小數(shù)若干位進行比較:
(0.1 + 0.2).toFixed(2) === '0.30'
注意:兩個數(shù)的差值小到一定范圍的時候,即可以認為他們是相等的。
Math.abs(0.1+0.2 - 0.3) <= 1e-10 // true
一說到NaN,那么有個特性大伙應該都會想起,NaN !==NaN。對,就這么屌。
如果你需要判斷一個變量是否為NaN,只需要把它跟它自己比較,如果不相等,那么就是NaN。
判斷一個數(shù)字是否為NaN,可以使用isNaN()方法。但是如果不知道某個變量的具體數(shù)據(jù)類型的時候,不要輕易用該方法來判斷,因為isNaN有個詭異特性:它會先把要判斷的變量先轉(zhuǎn)換成數(shù)值來計算。
isNaN('abc') // true isNaN('123') // false isNaN('') // false isNaN([]) // false isNaN({}) // true
那么這時候會對你的判斷結(jié)果造成意外。
還有一個注意點就是,永遠不要拿任何變量跟NaN來比較,如:opt===NaN。
相信你會看到很多文章、規(guī)范都會說盡量使用===和!==,不使用==和!=,原因在于后者會進行強制類型轉(zhuǎn)換(造成難以查找的bug)。
先看一下:
'true' == true // => false 'true' == false // => false [] == {} // => false [] == [] // => false
如果你對以上判斷存在疑惑,那就記住一個規(guī)則:
null == null // => true undefined == undefined // => true null == undefined // => true undefined == null // => true x == null // => false (x 非 null 或 undefined) x == undefined // => false (x 非 null 或 undefined)
也即是判斷x是否為null或者undefined,那么就用==,否則,永遠不要使用。
給一個變量設置一個默認值,相信入坑多年的JS開發(fā)者都會這樣寫:
page = page || 0; data = data || '你好';
解釋下arg1 || arg2的意思是如果arg1能夠轉(zhuǎn)換為true,那么就取arg1,否則取arg2。
那么我們先看一下不可以轉(zhuǎn)化為true的值有哪些?
1.undefined
2.null
3.NaN
4.整數(shù)0
5.空字符串 “ ”
所以如果當用戶傳給arg1的參數(shù)是0或者為空字符串“”的時候,那么最終的值就會取默認的(||后面)值是不是?好,問題來了。如果用戶傳給后臺的查詢關(guān)鍵字data(上面代碼)是空字符串“”,那么就應該按照空字符串“”去后臺數(shù)據(jù)庫查詢,而結(jié)果傳給后臺的卻是“你好”,顯然查詢結(jié)果也就不對。
好,回到主題,實際上只有undefined才應該被認為是用戶沒有指定其具體值,我曾看過有人這樣理解(null
表示 用戶讓你給他把這個位置空著
;而 undefined
表示 用戶沒發(fā)表意見
)
so :
page = page !== undefined ? page : 0; data = data !== undefined ? data :'你好';
只需判斷undefined即可。
個人理解如果有需求,可以把null加進去判斷。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com