2016-06-24 4 views
1

私はちょうどJavascriptの学習を始めました。私は以下の特定のコードについて具体的な質問があります。 Eclquent Javascriptの第4章のライカントロフのログの一部です。私の質問の特異性のために、私はこの問題に関連する他のコードをすべて含んでいないので、私の質問に答える必要はないと信じています。indexOf!= -1はブール値を返しますか?

これが「悪い習慣」とみなされているかどうか教えてください。私はこの背景および/または今後の投稿を訂正して、より多くの背景を示すようにしてください。

下のコードでは、2行目にリターンが表示されています。これまでのところ、indexOfは、渡されたものの出現を検出した場合にのみ、正の数またはゼロを返します。発生していない場合は-1を返します。

この場合、!= -1が続きます。これは「マイナス1に等しくない」と理解しています。それは私には明らかです。

私が完全に理解していないのは、2行目の実際のリターンが終わるところです。 trueかfalseのいずれかのブール値を返しますか?それとも、「イベント」が見つかった実際のインデックスを返しますか?

さらに、最初のifステートメントでは、hasEvent変数が再び表示されます。私はhasEvent(イベント、エントリが)、インデックスに1を加えtrueの場合

。」として、この文を読んで、私はこの権利を 『読み』と確かに2行目の戻りブールあるだろうか?

function hasEvent (event, entry) { 
    return entry.events.indexOf(event) != -1; 
} 

function tableFor (event, journal) { 
var table = [0, 0, 0, 0]; 
for (var i=0; i < journal.length; i++) { 
    var entry = journal[i] , index = 0; 
    if (hasEvent(event, entry)) index += 1; 
    if (entry.squirrel) index += 2; 
    table [index] += 1; 
} 
return table; 
} 

はあなたの助けをありがとう、私は違ったこの質問を述べているかどうかを教えてください!私は私が上に移動する前に、私は物事を理解していることを確認しようとしています!

+0

比較の結果を返します。これはブール値です。 – pawel

+0

['typeof(indexOf()!= -1)'](https://developer.mozilla.org/en/US/docs/Web/JavaScript/Reference/Operators/typeof) –

答えて

4

イエップ。 hasEventからブール値を返すブール式で=====!!==!=>>=<または<=結果を、使用しました。

6

!=オペレータは常にブール結果を持っています。

return文の後に式を続けると、式の値が返されるので、その関数の戻り値はtrueまたはfalseのいずれかになります。

+0

さらに、 '!= = 'と' === ' – Tushar

+0

@Tusharこの場合、 '.indexOf()'は常に数値を返すので、違いはありません。 – Pointy

+0

その説明をありがとうございます。だから、論理的に最初のif文は、hasEvent値がtrueに戻ったときに実際に1を追加しますか? –

1

Comparison operatorsはすべてブール値に評価されます。

さらにこのコードでは、関数名の後ろにある比較を抽象化しています。値をもたらす操作または操作の集合は、その値を返す関数に置くことができます。これは、機能の名前が実行される操作に直感的な意味を与えることができるため、コードをより読みやすく分かりやすくするための共通のリファクタリングです。あなたは、このことができます

if (a == b) { 

} 

ので、代わりにこのような何か

if (someCondition(a, b)) { 

} 

をだからあなたは(当然のsomeConditionよりも意味の)操作に意味のある名前を与えることができます。その関数が置き換えるコードと同じ値を返す限り、論理的には違いはありません。

関連する問題