2016-03-30 8 views
0

)(_.someを理解明確化が必要:それは私が今朝ちょうど非常に意識がもうろうんだけど、これは<code>true</code>として返しますなぜ私は悩みの理解を抱えているのかもしれ

_.some([null, 0, 'yes', false]); // true 

私は_.some() trueを返しますことを知っています少なくとも1つの要素が述語テストを真としている場合。しかし、私の理解から、述語が提供されていなければ、_.identity()が使用されます。しかしconsole.log-ingこれらの要素のそれぞれを_.identity()で返すと、それらのいずれの場合でもtrueが返されませんでした。ではなぜそれは本当に戻ってくるのですか?

+5

「はい」は真実です。 – zwol

答えて

2

述語がない場合、someは、値自体を使用するidentityを使用し、'yes'は真実です。

the annotated sourceを迅速にダイビング(cbに特別な注意を払って、そこに欠けている述語の取扱い)は、基本的に、と彼らが行うときブール値への強制をあなたの葉:

if (predicate(obj[currentKey], currentKey, obj)) return true; 

ませ述語は、あなたがいることを意味しませんそこに元の値で作業していますので、if ('yes')、これは本当です。 _.identityはブール値にそれを強制するのではなく、値そのもの(そう'yes')を返しますので

は、あなたはそれらの値のいずれかのコンソールでtrueを見ていません。 !!'yes'(強制とダブルではありません)を行う場合は、trueと表示されます。

1

リテラル値trueを返す必要はありません。真値を返すだけです(ただし、常ににする必要がありますが、はブール値を返します)。

non-empty string 'yes' is truthyBoolean('yes')または!!'yes'でテストできます)。

2

'yes' truthyある:

_.some([null]) // false 
_.some([0])  // false 
_.some(['yes']) // true 
_.some([false]) // false 

the Truth, equality in javascript linkから:

構築(式)ステートメントが抽象メソッドToBooleanを使用してブール値を式の評価結果を強制するかどうかES5仕様では、次のアルゴリズムを定義しています。

:argu mentは空のString(長さはゼロ)です。そうでない場合、結果は真です。

関連する問題

 関連する問題