如果JS包装器对象被认为是坏样式,那么使用lodash _.isString等进行类型检查也会被视为坏样式吗?

时间:2016-01-19 23:15:03

标签: javascript wrapper lodash primitive typeof

正如其他问题和答案已经指出的那样,Google和Douglas Crockford都认为JS包装器对象风格不好,不应该使用。

如果是这种情况,应该使用lodash _.isString,它适用于原始和对象包装的字符串,只是为了检查某些东西是否为字符串,也被视为坏样式?

在我看来,诸如此类的一些lodash功能主要被设计用于功能编程,例如, _.filter(myArray, _.isString),但是如果遵循仅使用原始字符串的最佳做法,那么简单的typeof检查就足以实现。

_.isString的lodash代码远不止于此:

 /**
     * 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方法没有对它们起作用?

1 个答案:

答案 0 :(得分:0)

我不认为使用任何下划线/ lodash类型检查方法是不好的做法或坏的风格。事实上,它们阅读得非常好,并且通常不会出现程序员错误。

使它适用于字符串对象和文字的动机是它只是必须。 Lodash是一个图书馆,因此应该支持javascript中存在的怪癖。

至于为什么你可以使用字符串对象。我能想到的一个原因是你可以将属性附加到字符串 例如:

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