2016-07-08 2 views
0

文字列が空白であるか、9桁以下であるか、または最大10桁であるかどうかを確認しようとしています。しかし、それは常にelse if (str.length <= 9)に従います。=(1つの等号)を使った等価比較が正しく機能しないのはなぜですか?

if (str = ''){ 
    console.log("The string cannot be blank"); 
} else if (str.length <= 9) { 
    console.log("The string must be at least 9 characters long"); 
} else if (str.length <= 10) { 
    console.log("The string is long enough."); 
} 

私が何を入れても、私はいつもThe string must be at least 9 characters longを得ます。どうして?

+2

私は確信しています... –

+1

@ T.J.Crowder - おそらく、私はそれらのいずれかがこのようなタイトルを持っていれば驚くでしょう。ほとんど彼らは "私のコードは機能しませんし、私は理由を知らない"としています。 – Quentin

+0

@Quentin:うん。私はこれを1つに編集しています。 :-) –

答えて

7

=は常に割り当てられます。等価比較は==(緩い、一致を試みるための強制的な型)または===(型強制なし)です。

ですから、あなたがif (str = '')を行うとどうなり

if (str === ''){ 
// -----^^^ 

ない

// NOT THIS 
if (str = ''){ 
// -----^ 

をしたいが効果的に、割り当てstr = ''が行われ、次いで得られた値('')がテストされていることですこのように(いくつかの詳細を無視すると):

str = ''; 
if (str) { 

''で、JavaScriptではfalsyという値であるため、このチェックは偽になり、else if (str.length <= 9)のステップに進みます。その時点でstr.length0なので、それはコードにかかる経路です。

関連する問題