国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

那些不起眼的小工具?

ChanceWong / 383人閱讀

摘要:直接看源碼如果原生支持就用原生的,否知自己實現(xiàn)一個結(jié)尾暫時就介紹這些看起來并不起眼的工具函數(shù),在以后的文章和源碼分析中遇到其他的會陸續(xù)更新到這篇文章中來。

前言

原文鏈接

源碼地址

今天想寫一篇關(guān)于下劃線這個庫中一些小工具函數(shù)的故事,我們都聽過一句話,一個成功的男人背后一定有一個了不起的女人(?,其實也不一定,也許還有男人呢),那么一個經(jīng)久不衰,為程序猿們所稱道的庫,框架的背后自然也有不少看起來不起眼,甚至你都懶得正眼瞧他的"小工具"存在。正是這些背后的無名英雄為類庫和框架的形成,貢獻了不可磨滅的力量。

第一篇文章說了undefined,那我們也從undefined開始。

_.isUndefined(obj)

判斷obj等于undefined與否,是就返回true,反之false。

示例

let a = null
let b = window.b
let c = () => {}
let d = undefined
let e = void 0
let f = "qianlongo"
let g

console.log(_.isUndefined(a)) // false
console.log(_.isUndefined(b)) // true
console.log(_.isUndefined(c())) // true
console.log(_.isUndefined(d)) // true
console.log(_.isUndefined(e)) // true
console.log(_.isUndefined(f)) // false
console.log(_.isUndefined(g)) // true

對于一個對象上不存在的屬性

對于一個沒有返回值的函數(shù)

對于聲明和卻沒有賦值的標(biāo)量

對于直接賦值為undefined(非ie8以下)或者void 0

_.isUndefined都會返回true,其他情況全都是返回false

需要特別注意的是,有時候我們會這樣判斷一個變量是都存在,a = null
a = undefined都可以通難過判斷。

if (a == null) { 

}

但是_.isUndefined用的是三等強制判斷,所以null是通過不了的

_.isUndefined = function(obj) {
  return obj === void 0;
}
_.isNull(obj)

判斷obj等于null與否,是就返回true,反之false。

這個沒啥說的,只有obj輸入null,結(jié)果輸出才為true,因為內(nèi)部判斷也是用的三等判斷,不僅值要相等,類型也要相同。

_.noConflict()

防止全局變量沖突的一種常見解決方案,將_的使用權(quán)交換給上一個占用_坑位的人。

示例




console.log(_)

遇見重名的事不新鮮對吧,全國有多少個小明啊,我們從小到大課本里到處都是小明和小紅。

這里后面引入的underscore.js把lodash.js給覆蓋了,因為兩個庫都想占用全局的_,結(jié)果后來者居上。

如果不想lodash被覆蓋怎么辦,總的有個先來后到啊。只需要調(diào)用noConflict方法便將占著的_坑位重新歸還給了lodash,而之后我們用my_即可訪問所有underscore.js的方法。

let my_ = _.noConflict()

接下來我們看下源碼怎么實現(xiàn)的

var previousUnderscore = _ // 在源碼的頂部,保存了前一個占著_坑位的人
 _.noConflict = function() {
    root._ = previousUnderscore; // 將_重新賦值給前一個占著_坑位的人
    return this; // 并將_返回以供后續(xù)使用
  };
_.identity(value)

返回與傳入的參數(shù)value一樣的值

這個函數(shù)看起來沒有什么軟用,但是在后面能夠起非常大的作用,也正體現(xiàn)了,工具雖小,能量卻大

我們先來簡單地看下它的應(yīng)用,在后續(xù)的源碼分析中遇到再仔細講解。

過濾一個數(shù)組中為"真"的值

let arr = ["a", "b", null, "false", 0, "c", "", false, {}]
let arr2 = arr.filter(_.identity) // ["a", "b", "false", "c", {}]

復(fù)制數(shù)組

let arr = ["a", "b", null, "false", 0, "c", "", false, {}]
let arr2 = arr.map(_.identity) // ["a", "b", null, "false", 0, "c", "", false, {}]
_.constant(value)

返回一個函數(shù)fn,fn執(zhí)行之后再返回當(dāng)初傳進來的value

我們來看一段github上關(guān)于下劃線的一個issue,挺有意思的。也許我們比較難列舉出這個函數(shù)的應(yīng)用,但是至少下面這個例子是比較好的。

let age = 18
let cacheAge = _.constant(age)

age += 10
console.log(cacheAge()) // 18

為什么可以緩存住18,我們看下源碼大概就知道了,源碼創(chuàng)建了常見的閉包,閉包常見的作用之一就是讓外面通過函數(shù)調(diào)用的形式去訪問內(nèi)部的變量,以及在一定的生命周期內(nèi),緩存住變量。

 _.constant = function(value) {
    return function() {
      return value;
    };
  };
_.noop()

一個空函數(shù),啥也不干,調(diào)用了就返回undefined給你,可以作為默認(rèn)的回調(diào)參數(shù)

又是一個看起來啥用都沒有的函數(shù),然而事實真的是這樣嗎?請移步以下幾個鏈接

What is the use of jQuery.noop() function?

What is the JavaScript convention for no operation?

例子不用多,總結(jié)一下

1. 給一個變量賦值為一個空函數(shù),在后續(xù)的調(diào)用中你不需要去檢測他是不是undefined

2. 為什么不給需要的變量重新設(shè)置一個空函數(shù)? _.noop已經(jīng)創(chuàng)建了一個函數(shù)空間,讓其他變量也指向這個函數(shù),可以減少js中不必要的花銷

_.times(n, iteratee, context)

調(diào)用給定的iteratee迭代函數(shù)n次,iteratee每次都接收一個索引值index,最后返回一個數(shù)組,數(shù)組中存著這幾次iteratee的回調(diào)結(jié)果

示例

let count = 0
let result = _.times(6, (i) => {
  console.log(++count)
  return `hello:${i}`
})

console.log(result) // ["hello:0", "hello:1", "hello:2", "hello:3", "hello:4", "hello:5"]

console.log(count) // 6

可以看到傳進去的函數(shù)執(zhí)行執(zhí)行了6次,并將對應(yīng)的每次執(zhí)行的結(jié)果存在了數(shù)組中返回。

_.random(min, max)

返回一個[min, max]之間的隨機整數(shù),如果沒有傳max,則區(qū)間是[0, min]

示例

let num1 = _.random(10, 20) // maybe 13 or other
let num2 = _.random(10) // maybe 6 or other

源碼

_.random = function(min, max) {
  if (max == null) { // 如果只有一個參數(shù)
    max = min; // 就把第一個參數(shù)當(dāng)最大值
    min = 0; // 0作為最小值
  }
  return min + Math.floor(Math.random() * (max - min + 1));
  // 試想我們要求取[4, 10)之間的某個整數(shù)
  // (min) 就是保證最小值可以取到4
  // (max - min + 1) => (10 - 4 + 1) => 7
  // Math.random() * 7 => [0, 1) * 7 => [0, 7)
  // Math.floor([0, 7)) => 最小取0, 最大取6
  // 最后變成 4 + [0, 6] => [4, 10]
};

當(dāng)然啦,如果你傳入非整數(shù),或者max < min的數(shù),那結(jié)果就有可能不能按照預(yù)期出現(xiàn)了

_.uniqueId(prefix)

生成唯一的id,如果prefix不存在則直接將數(shù)字id返回,這個函數(shù)在給dom添加唯一的id的時候比較有用。

let pre = "qianlongo"
let id1 = _.uniqueId() // 1
let id2 = _.uniqueId(pre) // qianlongo2

源碼

var idCounter = 0;
_.uniqueId = function(prefix) {
  var id = ++idCounter + ""; // 轉(zhuǎn)成字符串
  return prefix ? prefix + id : id;
};
_.now()

一個優(yōu)化的方式來獲得一個當(dāng)前時間的整數(shù)時間戳。

直接看源碼

_.now = Date.now || function() { // 如果原生支持now就用原生的,否知自己實現(xiàn)一個
  return new Date().getTime();
};

結(jié)尾

暫時就介紹這些看起來并不起眼的工具函數(shù),在以后的文章和源碼分析中遇到其他的會陸續(xù)更新到這篇文章中來。寫一篇文章真夠耗費時間的,陸陸續(xù)續(xù)用了好幾個小時才寫這么點。

不介意的話,在文章開頭的源碼地址那里點一個小星星吧?

不介意的話,在文章開頭的源碼地址那里點一個小星星吧?

不介意的話,在文章開頭的源碼地址那里點一個小星星吧?

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/50743.html

相關(guān)文章

  • 那些起眼的小工具

    摘要:直接看源碼如果原生支持就用原生的,否知自己實現(xiàn)一個結(jié)尾暫時就介紹這些看起來并不起眼的工具函數(shù),在以后的文章和源碼分析中遇到其他的會陸續(xù)更新到這篇文章中來。 前言 原文鏈接 源碼地址 今天想寫一篇關(guān)于下劃線這個庫中一些小工具函數(shù)的故事,我們都聽過一句話,一個成功的男人背后一定有一個了不起的女人(?,其實也不一定,也許還有男人呢),那么一個經(jīng)久不衰,為程序猿們所稱道的庫,框架的背后自然也有...

    tanglijun 評論0 收藏0
  • 那些起眼的小工具

    摘要:直接看源碼如果原生支持就用原生的,否知自己實現(xiàn)一個結(jié)尾暫時就介紹這些看起來并不起眼的工具函數(shù),在以后的文章和源碼分析中遇到其他的會陸續(xù)更新到這篇文章中來。 前言 原文鏈接 源碼地址 今天想寫一篇關(guān)于下劃線這個庫中一些小工具函數(shù)的故事,我們都聽過一句話,一個成功的男人背后一定有一個了不起的女人(?,其實也不一定,也許還有男人呢),那么一個經(jīng)久不衰,為程序猿們所稱道的庫,框架的背后自然也有...

    muddyway 評論0 收藏0
  • Flutter — 加快開發(fā)速度的 IDE 快捷操作#yyds干貨盤點#

    摘要:夏天加快開發(fā)速度的快捷操作干貨盤點快捷方式你可以用做更多神奇的事情選項返回這是您在中加快開發(fā)速度的魔杖。加快開發(fā)速度的快捷操作干貨盤點選項卡不喜歡小部件用魔術(shù)棒取下它。 Flutter — 加快開發(fā)速度的 IDE 快捷方式上一個關(guān)于??vscode 的插件??推薦大家看的過癮不,今天繼續(xù)給大家?guī)硪恍╆P(guān)于android s...

    番茄西紅柿 評論0 收藏2637
  • Eruda 一個可能被人遺忘的調(diào)試神器

    摘要:引言日常工作中再牛逼的大佬都不敢說自己的代碼是完全沒有問題的,既然有問題,那就也就有調(diào)試,說到調(diào)試工具,大家可能對于還有遠程調(diào)試等比較熟悉,甚至有些是我可能也沒有用過的這里噴一句吧,誰都別給我提啊,那個不叫調(diào)試工具,那叫坑爹神器,話說最近不 showImg(https://segmentfault.com/img/bVbk8zn?w=1008&h=298); 引言 ?  日常工作中再牛...

    mingzhong 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<