2017-01-09 4 views
1

このコードはかなりわかりやすいですが、私は実際にそのほとんどを理解していますが、私を混乱させる部分はif文です。 nullの私が読んだものから、ヌルは値であるかスタンド・インになります。なぜこの場合にnullを使用するのですか?コードに混乱している、具体的にはnull:Eloquent Javascriptの練習

function range(start, end, step) { 
    if (step == null) step = 1; 
    var array = []; 

    if (step > 0) { 
    for (var i = start; i <= end; i += step) 
     array.push(i); 
    } else { 
    for (var i = start; i >= end; i += step) 
     array.push(i); 
    } 
    return array; 
} 

function sum(array) { 
    var total = 0; 
    for (var i = 0; i < array.length; i++) 
    total += array[i]; 
    return total; 
} 

console.log(range(1, 10)) 
// → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
console.log(range(5, 2, -1)); 
// → [5, 4, 3, 2] 
console.log(sum(range(1, 10))); 
// → 55 

答えて

0

機能は、それがデフォルトで1に設定しますstepパラメータなしで呼び出された場合。

ので、ここで:

console.log(range(1, 10) 
/→ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

が含まれない「ステップ」はありません..しかし、出力ステップは、その値が代わりに使用されるようにステップが含まれている、以下の実施例では1に設定されている示しています。範囲のコールのうち、左の場合

+0

これは私が探していた答えでした、ありがとうございます。私は空白を見つめてかなりの時間を費やした後にそれを実現しました。 –

1

stepは未定義になり、これが機能する理由は弱いため、比較null == undefinedである事実であるが、私たちはすなわちnull === undefined厳しい評価を使用している場合、我々は偽得ます。

+0

良い説明はここで見つけることができますhttp://stackoverflow.com/questions/12715157/checking-for-missing-parameter-in-function – domenicr

0

JavaScriptの機能では、特定のパラメータが指定されていない場合は定義されていません。ここでは、コードでそれが

if (step === undefined) step = 1; 

する必要があります常に厳密な比較を使用するためのより良い方法です。 null==undefinedundefined== nullなので、コードは機能します。前述のようにコードを変更する必要があります。

+0

ありがとう@ Ouroborus –

+0

私は厳密な比較を使用することが常にベストプラクティスであることに同意します。 nullの可能性がある別の場所から値を渡すことがあるか、またはnullチェックの使用が実質的に短いために、パラメーターがnullまたは未定義のいずれかを受け入れることが必要な場合があります。 (1つのcharは===の代わりに標準==で保存され、5つの文字は未定義の代わりにnullで保存されています)はい、ポジティブはマイナーですがネガもそうです。違いを最初に学んだことは別として、 "== null"チェックだけで問題は一度も発生しませんでした。どちらにしても問題ありません。 – Venryx

関連する問題