可能是我今天早上非常昏昏欲睡,但我很难理解为什么这会以true的形式返回
_.some([null, 0, 'yes', false]); // true我知道,如果至少有一个元素通过谓词测试,_.some()返回true。但据我理解,如果没有提供谓词,则使用_.identity()。但是,使用_.identity()单独记录这些元素时,不会返回其中任何一个元素的true。那么为什么它会返回true呢?
发布于 2016-03-30 17:15:29
没有谓词,some使用identity,它使用值本身,而'yes'是真实的。
快速浏览注释源 (特别注意cb和处理缺少的谓词)本质上给您留下了一种强制执行布尔值的方法:
if (predicate(obj[currentKey], currentKey, obj)) return true;没有谓词意味着您使用的是原始值,所以是if ('yes'),这是真的。
您不会在控制台中看到其中任何一个值的true,因为_.identity将返回值本身(所以是'yes'),而不是将其强制为布尔值。如果您要执行!!'yes' (强制和双不要),您将看到true。
发布于 2016-03-30 17:15:50
'yes'是真实的:
_.some([null]) // false
_.some([0]) // false
_.some(['yes']) // true
_.some([false]) // false构造if (表达式)语句将强制使用抽象方法ToBoolean将表达式的计算结果转换为布尔值,ES5规范对该方法定义了以下算法:
string:如果参数是空字符串(其长度为零),则结果为false;否则,结果为true。
发布于 2016-03-30 17:15:05
它不需要返回文字值true,它只需要返回一个真实的值(尽管您总是应该只返回布尔值)。
是真实的 (您可以通过Boolean('yes')或!!'yes'进行测试)。
https://stackoverflow.com/questions/36315413
复制相似问题