簡體   English   中英

如果JS包裝器對象被認為是不良樣式,是否使用lodash _.isString等進行類型檢查也被視為不良樣式?

[英]if JS wrapper objects are considered bad style, is type-checking with lodash _.isString etc. considered bad style as well?

正如其他問題和答案已經指出的那樣,Google和Douglas Crockford都認為JS包裝器對象的樣式不好,因此不應使用。

如果是這樣,是否應該使用lodash _.isString ,它適用於原始和對象包裝的字符串,只是為了檢查某個東西是否是字符串,是否也被認為是不好的樣式?

在我看來,諸如此類的lodash函數主要設計用於函數式編程,例如_.filter(myArray, _.isString) ,但是如果遵循僅使用原始字符串的最佳實踐,則將進行簡單的typeof檢查足以實現。

但是_.isString的lodash代碼的作用遠不止_.isString

 /**
     * Checks if `value` is classified as a `String` primitive or object.
     *
     * @static
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
     * @example
     *
     * _.isString('abc');
     * // => true
     *
     * _.isString(1);
     * // => false
     */
    function isString(value) {
      return typeof value == 'string' ||
        (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);
    }

這樣做的動機是什么? 使用對象包裝的用戶抱怨lodash方法對他們不起作用?

我認為使用任何下划線/破折號類型檢查方法都不是壞習慣或不好的風格。 實際上,它們讀起來非常好,通常不易出現程序員錯誤。

使它適用於字符串對象和文字的動機是,它只是必須的。 Lodash是一個庫,在這種庫中應該支持javascript中存在的古怪之處。

至於為什么可以使用字符串對象代替。 我能想到的一個原因是,您可以將屬性附加到字符串ex:

var a = new String('foo bar');
a.b = 'baz';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM