underscore相關記錄

2022-03-06 02:04:19 字數 1772 閱讀 7805

在很多框架的原始碼以及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...