2017-05-12 3 views
3

ternary演算子に複数の値を代入する方法はありますか?それは不可能ですか?私はこのようにしようとしたが、取得エラー:JavaScriptは `ternary`演算子に複数の値を割り当てます

size === 3 ? ( var val1=999, var val2=100;) : 0; 

size === 3 ? ( var val1=999; var val2=100;) : 0; 

両方のアプローチ上記でエラーが発生します。どのように設定するかvar val1var val2;

私は直接宣言できます。しかし私はここで三元演算子のアプローチを知りたいと思います。

+1

?また、 'var val1 = 999、var val2 = 100;'は不正な構文です – Rajesh

+0

[条件式の中で変数を宣言する(三項演算子)]の重複があります(http://stackoverflow.com/questions/19071803/declaring-a-variable -within-conditional-expression-ternary-operator) – Andreas

答えて

1

var size=3; 
 
var val1=null; 
 
var val2=null; 
 
size === 3 ? ( val1=999,val2=100) : 0; 
 
console.log(val1,val2)

+0

あなたは何を変更したのか、また他の誰も対処していないあなたの答えがこのページに追加される内容について説明を加えてください。あなたは読者に答えています – Rajesh

0

あなたはここでは、この

var val1 = 0, 
 
    val2 = 0, 
 
    size = 3; 
 
3 === size ? function() { 
 
    val1 = 999; 
 
    val2 = 100 
 
}() : 0; 
 
console.log(val1, val2);

+1

ここではIIFEは必要ありません – Rajesh

+0

正しく動作します(私はそう思わない)。 'val' = 999、val2 = 100)よりも冗長で、' if'文を使うよりももっと狂っています。 – AJP

0

のように行うことができますが、私の試みです:それは私のために正常に動作します:

createDigit : function(size) { 
       var val1, val2; 
       size === 3 ? ( val1=999, val2=100 ) : size === 2 ? ( val1=99, val2=10) : 0; 
       //generates only 3 digit values 
       return Math.floor(Math.random()*(val1-val2+1)) + val2; 
      }, 
+0

親愛なる友人、あなたが研究して他人を助ける何かを見つけたときに**あなた自身の質問に答えるだけです**。また、私の理解では、これは**三元演算子が何であるのではないのですか? – Rajesh

+0

@Rajeshこれは通常本当ですが、この場合は彼が求めていたものとは異なる質問に答えたので非常に役に立ちました。 – AJP

+0

@AJP三項演算は単一の値に適しています。それらに式を追加すると、より多くのものを行うことができますが、理想的ではありません。この状況では、if..else if else elseのはしごがさらに適合します。また、Andreasが共有するdupeがなぜ失敗するのか説明しています。だから私はまだ私のコメントに固執する – Rajesh

1

その。あなたは次のように使用することができ、構文エラー別途の電話

var size=3; 
 
var val1 = size === 3 ? 999 : 0; 
 
var val2 = size === 3 ? 100 : 0; 
 
console.log(val1,val2)

0

三項演算子の構文は

condition ? expr1 : expr2 

var val1=999; var val2=100;有効宣言var val1=999, var val2=100;ではない)が、ませ表現です。だからあなたはあなたのコードでそれをやったやり方で使うことはできません。もちろん

size === 3 ? eval('var val1=999; var val2=100;') : 0; 

を、他の人が指摘したように:しかし、あなたはそうのようなeval functionを使用して式にそれを作ることができます。 evalを使用するのは間違ったアプローチです。私はあなたの質問に答えるためにそれがどのようにできるのかをあなたに示しています。

+0

絶対に必要でない限り、evalを使用しないでください。この場合、必ずしも必要ではありません。 – AJP

+0

私の答えの一番下の部分は読んだことがありますか? –

+0

私は、あなたが誤ったアプローチをとっていると誰も指摘していなかったコメントの点で、三項式の内部に代入することに言及していると仮定しました。 – AJP

-1

私はあなたが何をしようとしているかを見て、sizeを手動でチェックするのではなく、Math.pow()を使って数字を生成することができます。私はcreateDigitは、Math.pow()を使用して与えられた任意のサイズの数字を生成することができる鉱山であり、createDigitBuggyはサイズ2と3の数値を生成し、残りはNaNになります。

// Improved version 
const createDigit = (size) => { 
    if (size > 0) { 
    const val1 = Math.pow(10, size) - 1 
    const val2 = Math.pow(10, size - 1) 
    return Math.floor(Math.random() * (val1 - val2 + 1)) + val2 
    } 
    return 0 
} 

// Old buggy version 
const createDigitBuggy = (size) => { 
    var val1, val2 
    size === 3 ? (val1 = 999, val2 = 100) : size === 2 ? (val1 = 99, val2 = 10) : 0 
    return Math.floor(Math.random() * (val1 - val2 + 1)) + val2 
} 


console.log(createDigitBuggy(1)) // prints NaN 
console.log(createDigitBuggy(2)) // prints number 
console.log(createDigitBuggy(3)) // prints number 
console.log(createDigitBuggy(4)) // prints NaN 


console.log(createDigit(1)) // prints number 
console.log(createDigit(2)) // prints number 
console.log(createDigit(3)) // prints number 
console.log(createDigit(4)) // prints number 
+0

downvoterを説明するケア! – Sikorski

+0

(申し訳ありませんが、単にコメントを入力しています)これは質問されたように質問に答えません。私は今OPが自分の "答え"を見ているが、実際に彼が求めているのは明らかかどうか分からないので、彼の質問を終わらせて投票した。あなたの答えはOKだと言っていたが、私はバグの実装を少なくとも取り除くだろう。 – AJP

+0

@AJPバグの実装はOPを比較するためにそこにあります、私はそのコードを使用すると言っていません。 – Sikorski

0

ifステートメントを使用してください。

var val1; 
var val2; 
if (size === 3) { 
    val1 = 999; 
    val2 = 100; 
} 

D-reaperの回答はあなたの質問に答えていますが、あなたの質問は本当に頼むべきことではありません。 (また、evalは非常に非常に便利ですが、さまざまなJavaScriptエンジンの最適化を防ぎ、格納されたユーザー入力データに使用する場合はXSSのようなセキュリティホールを開くため、「悪」とみなされます)。あなたの例では

var val1 = size === 3 ? 999 : 0; 

あなたは何の割り当てを行わないことを、最初の式が値を返すように意図していない:

三項演算子は、あなたのような別の変数をする割り当てるためにそれらを使用している場合に便利です0の第2の値は無視され、したがって冗長性は非常に強いコードの臭いあなたはあなたが望むことを行うより簡単な方法があることを警告する必要があります。 `if`を使用しないのはなぜ

関連する問題