2016-04-27 6 views
0

重複が可能かどうかわかりません。これはエラーと理由はない理由(a = 1)が真の場合

var a = 0; 
if(a = 1) console.log('true'); 

わからない。:

は、このコードを考えてみましょう:私のコードをテストし、時々私は私が条件場合に=なく==または===を入れているためと間違っていました条件(a = 1)を返す 変数は1に代入されていると思いますが、なぜこれは真であると評価され、エラーはないのですか?

+2

「a = 1」が「a」になると、この式(「1」)の結果は条件として評価され、「1」は真理値である。 –

+1

これがなぜ起こっているのかの答えが伝わってきました。私はちょうどこれがWordPressとSymfonyコーディング標準が[yoda条件](https://en.m.wikipedia.org/wiki/Yoda_conditions)を主張している理由であると指摘したいと思います。条件の中で物事の通常の順序を逆にすることによって、エラーを投げる状況を作り出します。あなたの例では、 'a = 1' *の代わりに' 1 = a'を使うと、リテラル番号に値を代入することができないので、エラーが発生します。しかし、コードを読みにくくすることができるので、ヨーダの条件が気に入らない多くの開発者がいます。 –

答えて

3

をaに設定し、結果の真実性をチェックしています。 JavaScriptのゼロ以外の数字は真であるので、あなたが見るものを得ることができます。

数学の場合と同様に、物事は左から右に評価され、括弧が最初に使われます。

1

それは言われたとおり、それはあなたの変数に割り当てないとミスのこれらの種類を回避する方法は、テストを変更することです0

以外のすべての値に対してtrueを返します。ここで

if(3 == a) 

あなたは(3 = a)を書く場合は、エラーを持っているでしょう。

+0

'は、0以外のすべての値に対してtrueを返します。正しくありません。' false'、 ''''(空文字列)、 'undefined'、' NaN'も偽の値です –

+0

数字を言う! –

+0

それは正しいです、私は私の答えを書いていたが、それを修正するために戻ったことはありませんでした。私はそれを修正します。 – Ouss4

関連する問題