成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從用 void 0 代替 undefined 說起

Cc_2011 / 1886人閱讀

摘要:最近開始看源碼,并將源碼解讀放在了我的計(jì)劃中。相對(duì)于其他源碼解讀的文章,基本都會(huì)從整體設(shè)計(jì)開始講起,樓主覺得這個(gè)庫有點(diǎn)特殊,決定按照自己的思路,從用代替說起。源碼沒有出現(xiàn)注意,其實(shí)有出現(xiàn)一處,是為,而不是,而用代替之。

Why underscore

最近開始看 underscore源碼,并將 underscore源碼解讀 放在了我的 2016計(jì)劃 中。

閱讀一些著名框架類庫的源碼,就好像和一個(gè)個(gè)大師對(duì)話,你會(huì)學(xué)到很多。為什么是 underscore?最主要的原因是 underscore 簡短精悍(約 1.5k 行),封裝了 100 多個(gè)有用的方法,耦合度低,非常適合逐個(gè)方法閱讀,適合樓主這樣的 JavaScript 初學(xué)者。從中,你不僅可以學(xué)到用 void 0 代替 undefined 避免 undefined 被重寫等一些小技巧 ,也可以學(xué)到變量類型判斷、函數(shù)節(jié)流&函數(shù)去抖等常用的方法,還可以學(xué)到很多瀏覽器兼容的 hack,更可以學(xué)到作者的整體設(shè)計(jì)思路以及 API 設(shè)計(jì)的原理(向后兼容)。

之后樓主會(huì)寫一系列的文章跟大家分享在源碼閱讀中學(xué)習(xí)到的知識(shí)。

underscore-1.8.3 源碼全文注釋 https://github.com/hanzichi/underscore-analysis/blob/master/underscore-1.8.3-analysis.js

underscore-1.8.3 源碼解讀項(xiàng)目地址 https://github.com/hanzichi/underscore-analysis

歡迎圍觀~ (如果有興趣,歡迎 star & watch~)您的關(guān)注是樓主繼續(xù)寫作的動(dòng)力

Why does void 0 replace undefined

說來慚愧,underscore 源碼解讀這個(gè) Repo 放在 Github 都已經(jīng) 20 天沒有更新了,要不是今天 "不小心" 注意到,我居然都快忘了(是不是 lu 多了),所以今晚無論如何都要 lu 出第一篇(畢竟萬事開頭難)。相對(duì)于其他源碼解讀的文章,基本都會(huì)從整體設(shè)計(jì)開始講起,樓主覺得 underscore 這個(gè)庫有點(diǎn)特殊,so 決定按照自己的思路,從用 void 0 代替 undefined 說起。

underscore 源碼沒有出現(xiàn) undefined(注意,其實(shí)有出現(xiàn)一處,是為 "undefined",而不是 undefined),而用 void 0 代替之。為什么要這么做?我們可以從兩部分解讀,其一是 undefined 哪里不好了,你非得找個(gè)替代品?其二就是替代品為毛要找 void 0?

我們先看第一點(diǎn),答案很簡單,undefined 并不是保留詞(reserved word),它只是全局對(duì)象的一個(gè)屬性,在低版本 IE 中能被重寫。

var undefined = 10;

// undefined -- chrome
// 10 -- IE 8
alert(undefined);

事實(shí)上,undefined 在 ES5 中已經(jīng)是全局對(duì)象的一個(gè)只讀(read-only)屬性了,它不能被重寫。但是在局部作用域中,還是可以被重寫的。

(function() {
  var undefined = 10;

  // 10 -- chrome
  alert(undefined);
})();

(function() {
  undefined = 10;

  // undefined -- chrome
  alert(undefined);
})();

接下來思考第二個(gè)問題,為毛找的替代品是 void 0?

我們來看看 MDN 的解釋:

The void operator evaluates the given expression and then returns undefined.

意思是說 void 運(yùn)算符能對(duì)給定的表達(dá)式進(jìn)行求值,然后返回 undefined。也就是說,void 后面你隨便跟上一個(gè)表達(dá)式,返回的都是 undefined,都能完美代替 undefined!那么,這其中最短的是什么呢?毫無疑問就是 void 0 了。其實(shí)用 void 1,void (1+1),void (0) 或者 void "hello",void (new Date()) 等等,都是一樣的效果。更重要的前提是,void 是不能被重寫的(cannot be overidden)。

那么,ES5 大環(huán)境下,void 0 就沒有用武之地了嗎?答案是否定的,用 void 0 代替 undefined 能節(jié)省不少字節(jié)的大小,事實(shí)上,不少 JavaScript 壓縮工具在壓縮過程中,正是將 undefined 用 void 0 代替掉了。

一篇不長的文章寫了兩個(gè)小時(shí),心累,不點(diǎn)個(gè)贊、不關(guān)注下樓主的 Repo 你覺得好意思嗎?https://github.com/hanzichi/underscore-analysis

Read More

void MDN

What does void 0 mean?

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79472.html

相關(guān)文章

  • 從用 AngularJS 開發(fā) PC 客戶端說起

    摘要:你們說能不能就用的開發(fā)模式來實(shí)現(xiàn)客戶端啊這樣版版版就都有了。有道云筆記可能就是最貼近我們想法的產(chǎn)品,有客戶端,有版。這個(gè)項(xiàng)目由發(fā)起和維護(hù)。 最近一個(gè)多月一直在用 AngularJS 做公司的一個(gè)項(xiàng)目(還沒有做完),我之前主要是用 PHP 開發(fā)服務(wù)端的,AngularJS 也是現(xiàn)學(xué)現(xiàn)賣,整個(gè)過程還是比較有意義的,覺得很有必要寫篇文章記錄一下。 緣起 事情是這樣的……我們團(tuán)隊(duì)的產(chǎn)品是一款 ...

    waltr 評(píng)論0 收藏0
  • 從用 AngularJS 開發(fā) PC 客戶端說起

    摘要:你們說能不能就用的開發(fā)模式來實(shí)現(xiàn)客戶端啊這樣版版版就都有了。有道云筆記可能就是最貼近我們想法的產(chǎn)品,有客戶端,有版。這個(gè)項(xiàng)目由發(fā)起和維護(hù)。 最近一個(gè)多月一直在用 AngularJS 做公司的一個(gè)項(xiàng)目(還沒有做完),我之前主要是用 PHP 開發(fā)服務(wù)端的,AngularJS 也是現(xiàn)學(xué)現(xiàn)賣,整個(gè)過程還是比較有意義的,覺得很有必要寫篇文章記錄一下。 緣起 事情是這樣的……我們團(tuán)隊(duì)的產(chǎn)品是一款 ...

    Reducto 評(píng)論0 收藏0
  • void 0 代替 undefined

    摘要:在閱讀一些框架源碼時(shí),發(fā)現(xiàn)都是用的代替,簡單的了一下運(yùn)算符運(yùn)算符對(duì)給定的表達(dá)式進(jìn)行求值,然后返回。在之前,給賦值會(huì)覆蓋該屬性。但是由于不是保留字,依然可以在局部作用域中聲明一個(gè)的變量,并改變它的值。 在閱讀一些框架源碼時(shí),發(fā)現(xiàn)都是用的 void 0 代替 undefined,簡單的 Google 了一下: void 運(yùn)算符 void 運(yùn)算符 對(duì)給定的表達(dá)式進(jìn)行求值,然后返回 undef...

    leanote 評(píng)論0 收藏0
  • (void 0)與undefined之間的小九九

    摘要:又是啥是原始類型值之一,也是全局對(duì)象的屬性,在部分低級(jí)別的瀏覽器中可以被修改,在局部作用域中也可以被修改。所以常見的解決方法是在這個(gè)問題中提到用去替代標(biāo)簽的空屬性會(huì)減少頁面請(qǐng)求是否屬實(shí)有待考證結(jié)尾第一篇暫時(shí)寫完了,歡迎大家吐槽和提意見。 前言 原文鏈接 源碼地址 這是underscore.js源碼分析的第一篇文章,為什么選擇寫這篇文章呢?其實(shí)主要有兩點(diǎn) 下劃線源碼中通篇可見這樣的判斷...

    novo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<