正如其他问题和答案已经指出的那样,Google和Douglas Crockford都认为JS包装器对象风格不好,不应该使用。
如果是这种情况,应该使用lodash _.isString
,它适用于原始和对象包装的字符串,只是为了检查某些东西是否为字符串,也被视为坏样式?
_.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方法没有对它们起作用?
答案 0 :(得分:0)
我不认为使用任何下划线/ lodash类型检查方法是不好的做法或坏的风格。事实上,它们阅读得非常好,并且通常不会出现程序员错误。
使它适用于字符串对象和文字的动机是它只是必须。 Lodash是一个图书馆,因此应该支持javascript中存在的怪癖。
至于为什么你可以使用字符串对象。我能想到的一个原因是你可以将属性附加到字符串 例如:
var a = new String('foo bar');
a.b = 'baz';