如果 JS 包装器对象被认为是糟糕的风格,那么使用 lodash _.isString 等进行类型检查是否也被认为是糟糕

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

本文关键字:认为是 isString lodash 检查 是否 类型 对象 包装 JS 风格 如果      更新时间:2023-09-26

正如其他问题和答案已经指出的那样,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 方法对它们不起作用?

我不认为使用任何下划线/lodash类型检查方法是不好的做法或糟糕的风格。事实上,它们读起来非常好,而且通常不太容易出错。

使其适用于字符串对象和文字的动机是它只是必须。Lodash 是一个库,因此应该支持 JavaScript 中存在的任何怪癖。

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

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