2015-09-11 20 views
18

隨着節點v4.0.0發佈。此版本的節點已棄用許多功能,如util.isArrayutil.isRegEx,util。 isDateutil.isBoolean等等。爲什麼在node.js v4.0.0中已經棄用了很多util.is *函數?

我想知道爲什麼這發生在節點?

在ES6中有這些東西的本機支持嗎?

抑或節點提供任何更好的解決方案,而不是這些事情?

+0

如果看到[changelog](https://github.com/nodejs/node/blob/v4.0.0/CHANGELOG.md#20140501-version-01113-unstable)'util:made util.isArray一個直接別名爲Array.isArray(埃文卡羅爾)'。節點直接調用JS函數,所以不需要保留別名,直接調用本地函數 – Tushar

回答

23

決定棄用util.is*()函數最初是在2015年4月在Node.js技術指導委員會(TSC)進行的。那麼,在那個時候,它仍然是io.js,但現在是同一個委員會Node.js TSC和他們正在討論的代碼庫就是Node.js 4.0.0。

minutes from the meeting是否在線。所以你可以自己閱讀,看看被稱重的利弊。在這些分問題的最清楚的闡述可能是從伯特Belder:

我們要棄用這些的原因是,我們並不真正想解決這個問題,因爲這將是向後不兼容的,所以這是真的太大而不能成爲核心。

(不幸的是,似乎是在幾分鐘缺少一些情況下,我會看看我能挖了從其他渠道更多一些情況下,如果我發現任何有用的,我會更新這個答案。)

UPDATE:某些TSC minutes from Februarydiscussion in a pull request from the same month來看,這似乎是推理是這樣的:

嘿,看起來像util.isObject()回報false的功能。這是不正確的。函數是一個對象。它應該返回true。但是,這種改變可能會破壞Node生態系統的大部分。想想那些可能依賴於這種行爲的npm上的所有模塊。爲了不冒險以令人驚訝的方式破壞生態系統,我們不得不以某種方式讓很多人查看他們的代碼。而突破性的變化將完全向後兼容。所有這些都是爲了便利的功能,甚至不屬於核心功能,並且很容易由用戶級模塊提供。 (例如,請參閱core-util-is。)與其引入一個破壞性更改和一個semver主要碰撞來修復util.isObject(),讓我們先做本來應該做的事情,甚至沒有在覈心中做。

我覺得有可能也已經有很可能其他角落的情況下潛伏在util.is*()功能感。

該項目的哲學總體上是有一個最小的核心。所有的東西都是平等的,如果用戶模塊提供的東西沒有太多的麻煩,它應該存在於userland模塊中,而不是核心模塊。

好的,這是我從一些文本中抽取了很多推論,但我認爲這或多或少與棄用有關。

1

不是node.js專家,但這些功能(如果他們做什麼名字說)可以很容易地通過

[] instanceof Array; // true 
/* or */ Array.isArray([]); // true 

(/(?:)/g) instanceof RegExp; // true 

new Date() instanceof Date; // true 

new Boolean(true) instanceof Boolean; // true 
/* or */ typeof false == 'boolean'; 
/* or even */ var bool1 = true, bool2 = false; 
!!bool1 === bool1; // true 
!!bool2 === bool2; // true 

更換據the changelog

util.is*()功能已被棄用,從本發行版文檔中的棄用警告開始,鼓勵用戶在npm註冊表中尋找更強大的替代方案。

他們鏈接此pull request含有一些導致this dialog,陳述理由的:

我們要棄用這些的原因是,我們並不真正想解決這個問題,因爲這會落後不相容,所以這實在太大而不能成爲核心。

總之,這些功能均在某種意義上馬車而不是去修復的錯誤,打破向後兼容性,他們決定棄用他們,而不是。

如果你真的需要檢查這些東西往往不夠,你可以寫你自己的功能爲,如果你想。

+2

我認爲你沒有回答真正的問題。 '爲什麼在新版本v4.0.0中使用util的許多函數? – Tushar

+0

@Tushar是的,但它是一個部分答案,回答_「ES6中有這些東西的本機支持嗎?」_,這是[okay](http ://stackoverflow.com/help/how-to-answer)。你可以隨時編輯我的答案或貢獻你自己的答案。我的回答絕不是錯誤或不好,只是因爲它不完整。 – Xufox

+0

您可以添加此http://toddmotto.com/understanding-javascript-types-and-reliable-type-checking/進行類型檢查。滾動到底部 – Tushar

相關問題