underscore原始碼解析1
- _.noop()
不論傳遞給它的是什麼引數,返回的都是undefined。
_.noop()
=> undefined
//函式如果沒有return返回值的話,預設的就是返回undefined。
_.noop = function() {};
- _.random(min,max)
返回一個min和max之間的隨機整數。如果你只傳遞了一個引數,那麼將返回0和這個引數之間的整數。
_.random(0,100);
=> 42
_.random = function(min,max) {
//如果只傳了一個引數的話,就把max的值設定為這個引數,而min設為0
if (max == null) {
max = min;
min = 0;
}
return min + Math.floor(Math.random() * (max - min + 1));
};
Math.random()方法返回大於0小於1的一個隨機數。
Math.floor()方法執行向下舍入,即它總是將數值向下舍入為最接近的整數。
- _.now()
一個優化的方式來獲取一個當前時間的整數時間戳。可用於實現定時/動畫功能。
_.now();
=> 1503801043810
_.now = Date.now || function() {
return new Date().getTime();
}
Date.now是ES5提出來的方法,如果瀏覽器支援,就等於這個方法,表示呼叫這個方法時的日期和時間的毫秒數。
反之就使用new操作符和Date建構函式建立一個日期物件,在呼叫Date建構函式而不傳遞引數的情況下,新建立的物件自動獲得當前的日期和時間,再呼叫getTime方法,返回表示日期的毫秒數。
- _.uniqueId([prefix])
為需要的客戶端模型或DOM元素生成一個全域性唯一的id。如果prefix引數存在,id將附加給它。
.uniqueId('contact');
=> 'contact_1'
var idCounter = 0;
_.uniqueId = function(prefix) {
var id = ++idCounter + '';
return prefix ? prefix + id : id;
}
- noConflict
放棄Underscore的控制變數“_”。返回Underscore物件的引用。
var underscore = _.noConflict();
//‘this’是指向_的,準確的說是內部的_
var root = this;
var previousUnderscore = root._;
_.noConflict = function() {
root._ = previousUnderscore;
return this;
};
拿上面的例子來說,就是把這個控制變數"_"返回給了underscore;就像是jquery的“$”符號noConflict以後呼叫就要用jQuery('div')一樣的效果,避免全域性變數衝突。
- _.identity(value)
返回與傳入引數相等的值。相當於數學裡的:f(x) = x
這個函式看似無用,但是在Underscore裡被用作預設的迭代器iterator
var stooge = {name : 'moe'};
=> stooge === ._identity(stooge)
=> true
_.identity = function(value) {
return value
}
就是把傳入的引數返回
-
.constant(value)
建立一個函式,這個函式返回相同的值用來作為.constant的引數。
var stooge = {name: 'moe'};
stooge === _.constant(stooge)();
=> true
_.constant = function(value) {
return function() {
return value;
}
}
返回一個函式,這個函式再返回這個傳入的引數。(返回一個能返回引數本身的函式)
- _.isUndefined(value)
如果value是undefined,返回true。
_.isUndefined(window.missingVariable);
=> true
_.isUndefined = function(obj) {
return obj ===void 0;
}
學習參考:http://www.qdfuns.com/house/17398/note/class/id/bb6dc3cabae6651b94f69bbd562ff370/page/2.html
https://github.com/hanzichi/underscore-analysis/blob/master/underscore-1.8.3.js/underscore-1.8.3-analysis.js
http://www.css88.com/doc/underscore/#isEmpty
http://www.css88.com/doc/underscore/docs/underscore.html
相關文章
- underscore.js原始碼解析2JS原始碼
- 深入解析Underscore.js原始碼架構JS原始碼架構
- 1、ArrayList原始碼解析原始碼
- 窺探Underscore原始碼系列-開篇原始碼
- underscore 的原始碼該如何閱讀?原始碼
- UnderScore原始碼看防抖和節流原始碼
- Promise-Polyfill原始碼解析(1)Promise原始碼
- myBatis原始碼解析-日誌篇(1)MyBatis原始碼
- AFNetworking原始碼解析系列(1)原始碼
- LibRTMP原始碼分析 1:解析URL原始碼
- underscore 原始碼解讀之 bind 方法的實現原始碼
- js高手進階之路:underscore原始碼經典(完)JS原始碼
- js高手進階之路:underscore原始碼經典(二)JS原始碼
- js高手進階之路:underscore原始碼經典(一)JS原始碼
- js高手進階之路:underscore原始碼經典(三)JS原始碼
- FutureTask原始碼解析(1)——預備知識原始碼
- Fragment 知識梳理(1) Fragment 原始碼解析Fragment原始碼
- React原始碼解析(1):jsx語法是如何解析React原始碼JS
- vue2原始碼解析(重構版)(1)Vue原始碼
- SpringMVC原始碼解析(1)-啟動過程SpringMVC原始碼
- 【原始碼解析】- ArrayList原始碼解析,絕對詳細原始碼
- spring cloud gateway 原始碼解析(1)整體流程SpringCloudGateway原始碼
- Spark原始碼-SparkContext原始碼解析Spark原始碼Context
- CountDownLatch原始碼解析CountDownLatch原始碼
- LeakCanary原始碼解析原始碼
- vuex原始碼解析Vue原始碼
- ArrayBlockQueue原始碼解析BloC原始碼
- AsyncTask原始碼解析原始碼
- CopyOnWriteArrayList原始碼解析原始碼
- Express原始碼解析Express原始碼
- Observer原始碼解析Server原始碼
- SparseArray 原始碼解析原始碼
- RecyclerView原始碼解析View原始碼
- Promise 原始碼解析Promise原始碼
- Koa原始碼解析原始碼
- RateLimiter原始碼解析MIT原始碼
- redux原始碼解析Redux原始碼
- SDWebImage原始碼解析Web原始碼