2016-12-05 5 views
1

次のJavaScriptコードでは、私はそれが何をしたいかを正確に行います。私はミスを犯したので流行のコード:なぜ機能するのですか?

function setDistances() { 
var distances = []; 
    //get values of ten numeric HTML fields 
for (var i = 0; i < 10; i++) { 
    var thiswide = document.getElementById("dist"+i).value; 
     //This value is a string, despite coming from a numeric field. 
    if (thiswide = Number(thiswide)){  //excluding blanks 
     distances.push(thiswide);  //putting value in an array 
}} } 

これはのみ動作します。 if (thiswide == Number(thiswide))を書いたのであれば、エラーに気付いた後に見つけたように、javascriptは "0"と等しいと扱われるので、空白を除外することはできません。

したがって、if (thiswide = Number(thiswide))は空白をどのように除外しますか?

+1

として解釈さif(0)あります結果はthiswideに割り当てられ、偽です –

+0

'this'はキーワードであり、特定のプロパティを持っています。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/this/ http://www.quirksmode.org/js/this.html – jeff

+0

@jeff、実際のコードを読んでください:p ifそれは 'これは広い'だったので、構文エラーがあり、javscriptはまったく動かないでしょう –

答えて

1

if (thiswide == Number(thiswide))Number(thiswide)の結果を比較します。 ''の場合:Number('')は0に、0 == ''になるのは、緩い等価(==)が型変換を許可するためです。 if (thiswide = Number(thiswide))

を(0 === ''がfalseを返すことになる)、Number(thiswide)は、計算され、その結果が変数thiswideに割り当てられ、その変数(番号)がboolifiedされます。数値の場合、0は偽(つまり、NaN)で、他のすべての値は真です。したがって、0に解析されたものはすべて追加されません。 Number( '')== 0であるため、ifはfalseと評価されます。

ステップ:0の数字( '')の結果、thiswideは値0を取得し、残りの評価はthiswideが空白である場合、 `番号(thiswide)は`、0であるif(false)

関連する問題