需要澄清理解 _.some()
Need clarification understanding _.some()
可能是我今天早上很昏昏沉沉,但我很难理解为什么 return 会变成 true
:
_.some([null, 0, 'yes', false]); // true
我知道 _.some()
return 如果至少有一个元素通过谓词测试为真,则为真。但据我了解,如果没有提供谓词,则使用 _.identity()
。但是 console.log 使用 _.identity()
单独处理每个元素并没有 return true
任何一个。那为什么 return 是真的?
它不需要return字面值true
,它只需要return一个真值(虽然你总是应该 return 只有布尔值)。
non-empty string 'yes'
is truthy(可以按Boolean('yes')
或!!'yes'
测试)。
没有谓词,some
使用 identity
,它使用值本身,而 'yes'
是真实的。
快速浏览 the annotated source(特别注意 cb
和那里缺少的谓词的处理),从本质上讲,当它们这样做时,您会强制转换为布尔值:
if (predicate(obj[currentKey], currentKey, obj)) return true;
没有谓词意味着您正在使用那里的原始值,所以 if ('yes')
,这是真的。
您没有在控制台中看到任何这些值的 true
,因为 _.identity
将 return 值本身(因此 'yes'
)而不是强制它一个布尔值。如果您要执行 !!'yes'
(强制和双重不),您将看到 true
.
'yes'
是真的:
_.some([null]) // false
_.some([0]) // false
_.some(['yes']) // true
_.some([false]) // false
来自the Truth, equality in javascript link:
构造 if ( Expression ) 语句将使用抽象方法 ToBoolean
将表达式的计算结果强制转换为布尔值,ES5 规范为其定义了以下内容算法:
string
:如果参数为空字符串(其长度为零),则结果为假;否则结果为真。
可能是我今天早上很昏昏沉沉,但我很难理解为什么 return 会变成 true
:
_.some([null, 0, 'yes', false]); // true
我知道 _.some()
return 如果至少有一个元素通过谓词测试为真,则为真。但据我了解,如果没有提供谓词,则使用 _.identity()
。但是 console.log 使用 _.identity()
单独处理每个元素并没有 return true
任何一个。那为什么 return 是真的?
它不需要return字面值true
,它只需要return一个真值(虽然你总是应该 return 只有布尔值)。
non-empty string 'yes'
is truthy(可以按Boolean('yes')
或!!'yes'
测试)。
没有谓词,some
使用 identity
,它使用值本身,而 'yes'
是真实的。
快速浏览 the annotated source(特别注意 cb
和那里缺少的谓词的处理),从本质上讲,当它们这样做时,您会强制转换为布尔值:
if (predicate(obj[currentKey], currentKey, obj)) return true;
没有谓词意味着您正在使用那里的原始值,所以 if ('yes')
,这是真的。
您没有在控制台中看到任何这些值的 true
,因为 _.identity
将 return 值本身(因此 'yes'
)而不是强制它一个布尔值。如果您要执行 !!'yes'
(强制和双重不),您将看到 true
.
'yes'
是真的:
_.some([null]) // false
_.some([0]) // false
_.some(['yes']) // true
_.some([false]) // false
来自the Truth, equality in javascript link:
构造 if ( Expression ) 语句将使用抽象方法 ToBoolean
将表达式的计算结果强制转换为布尔值,ES5 规范为其定义了以下内容算法:
string
:如果参数为空字符串(其长度为零),则结果为假;否则结果为真。