2017-12-01 4 views
1

フィルタに渡された述語でエラーが発生し、不思議な結果が得られました。もちろん私はemp.gender === "F"と書かれているはずです。それにもかかわらず、undefinedが虚偽であることを考えると、femaleEmployeesは空の配列になるはずです。ただし、元の配列のすべてのメンバーが含まれます。Array.prototype.filterで定義されていないものがfalseでないのはなぜですか?

var employees = [ 
    { name: "bob", gender: "M" }, 
    { name: "lisa", gender: "F" }, 
    { name: "vera", gender: "F" } 
]; 
var femaleEmployees = employees.filter(emp => emp.gender = "F"); 

私はそれがこれとは何かを持っている疑いがあるが、私はどのように完全にはよく分からない:あなたが代わりにシンボル=を割り当てるの値を比較する=====を使用する必要がWhy does "undefined equals false" return false?

+0

は確かにあなたはそこにタイプミスを持っていませんか?あなたの投稿では 'emp.gender =" F "'と読みます。それはチェックではありません – entio

+0

'emp.gender =" F "'それは常に真です( "F"は真実です)。変数を代入しているのであれば、代わりにそれを比較したかったでしょう。 – briosheje

+0

各繰り返しの戻り値は "F"であり、これは真です。 –

答えて

1

。空でない文字列は真理値であるため、結果には真実である"F"が常に返されます(つまり、genderプロパティを"F"として更新し、次に"F"のプロパティ値を返す)。

var femaleEmployees = employees.filter(emp => emp.gender === "F"); 

参照してください:Which equals operator (== vs ===) should be used in JavaScript comparisons?

関連する問題