在很多框架的原始碼以及webpack打包出來的bundle.js中,我們都可以看到void 0的身影,如下:
function generaterandomkey()seenkeys[key] = true;
return
key;
}
module.exports =function shallowequal(obja, objb, compare, comparecontext)
在瀏覽器中執行,可以發現,void 0的返回值就是undefined,即通過這種方式將某個變數賦值為 undefined,但是為什麼不直接賦值呢? 為什麼需要使用 void 0 這種方式呢?我認為有以下幾點原因:
比如判斷陣列可以使用下面的方法:
function isarray(a)
其中 array.isarray() 方法是es5內建的判斷陣列的方法,如果支援就使用;如果不支援,就使用通用的 object.prototype.tostring.call() 。 因為前者更為簡潔,效率更高,後者更為通用。
當判斷物件時,我們可以認為function也是物件,但是null一般需要排除掉,那麼判斷的方式可以是下面這樣的:
_.isobject =function(obj) ;
可以看到,比較通用的方式就是使用 typeof,之所以陣列不這麼使用,是因為陣列使用 typeof 得到的也是物件,所以才需要通過一些其他方法。
類似的,如果我們希望判斷 'arguments', 'function', 'string', 'number', 'date', 'regexp', 'error' 這些型別時,也都可以通過使用 object.prototype.tostring.call() 這種比較通用的方式進行判斷,使用understore的方式如下:
_.each(['arguments
', '
function
', '
string
', '
number
', '
date
', '
regexp
', '
error
'], function(name) ;
});
其中,_each就是underscore中對each方法的乙個封裝,而tostring.call()實際上就是object.prototype.tostring.call()方法。
而在ie9以下的瀏覽器中,對於argument我們得到的時[object object],所以,我們還需要再新增一層判斷,就是是否具有callee屬性。
另外,如果我們希望判斷dom元素時,只需要知道這個元素不是空的,並且其nodetype為1即可,如下所示:
_.iselement =function(obj) ;
那麼如何判斷nan型別呢? 通過object.prototype.tostring.call(),我們可以判斷出來nan型別得到的時[object number], 而nan又是number中唯一乙個自己不等於自己的數,所以:
isnan =function(obj) ;
另外我們是可以首先判斷是否支援 isnan() 方法,如果支援,就可以先用 isnan 來判斷,然後再使用上面的方法。
underscore 常用的方法
參考文件 collection map 類似array.map 但是返回的是物件 filter 返回陣列,對於nodelist 返回的是document 節點 every 返回boolean 迭代的列表每個都是true才會返回 true some 返回boolean 迭代的列表有乙個為true 就返...
underscore的簡單了解
1.underscore 乙個封裝好的js工具庫,它提供了一整套函式式程式設計的使用功能,但是沒有擴充套件任何js內建物件。它解決了這個問題 如果我面對乙個空白的html,並希望立即開始工作,我需要什麼?2.zip var require underscore 演示 var names 張三 李四 ...
Oracle Sql相關記錄
1.批量增加資料 insert into fasp t carolemenu guid,roleguid,menuguid select sys guid guid,43b3bf934c324381892fe59f3d244629 from fasp t carole where length pr...