[英]Javascript assiging multiple values to `ternary` operator
如何為ternary
運算符分配多個值? 那不可能嗎? 我試過這樣,但得到錯誤:
size === 3 ? ( var val1=999, var val2=100; ) : 0;
和
size === 3 ? ( var val1=999; var val2=100; ) : 0;
以上兩種方法拋出錯誤。 如何設置var val1
和var val2
;
我可以直接申報。 但我想知道這里的三元運算符方法。
var size=3; var val1=null; var val2=null; size === 3 ? ( val1=999,val2=100 ) : 0; console.log(val1,val2)
它是一個語法錯誤。你可以使用這個單獨的調用
var size=3; var val1 = size === 3 ? 999 : 0; var val2 = size === 3 ? 100 : 0; console.log(val1,val2)
你可以這樣做
var val1 = 0, val2 = 0, size = 3; 3 === size ? function() { val1 = 999; val2 = 100 }() : 0; console.log(val1, val2);
這是我的嘗試:它適用於我:
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;
},
三元運算符的語法是
condition ? expr1 : expr2
var val1=999; var val2=100;
是一個有效的聲明 ( var val1=999, var val2=100;
不是),但不是 表達式 。 所以你不能像在代碼中那樣使用它們。 但是,您可以使用eval函數將其轉換為表達式,如下所示:
size === 3 ? eval('var val1=999; var val2=100;') : 0;
當然,正如其他人所指出的那樣。 使用eval
是一種錯誤的方法。 我告訴你如何回答你的問題。
使用if
語句。
var val1;
var val2;
if (size === 3) {
val1 = 999;
val2 = 100;
}
雖然D-reaper的答案回答了你的問題,但你的問題確實不是正確的問題。 (此外, eval
非常偶爾有用,但在其他方面被認為是“邪惡的”,因為它會阻止各種JavaScript引擎優化,並在存儲的用戶輸入數據上使用XSS等安全漏洞)。
當您使用三元運算符分配給另一個變量時,三元運算符很有用:
var val1 = size === 3 ? 999 : 0;
在您的示例中,您沒有進行賦值,第一個表達式不打算返回值,第二個值0
被忽略,因此冗余是一個非常強大的代碼味道,它們應該提醒您有更簡單的方法你想要什么。
我看到你要做什么,你可以使用Math.pow()
來生成數字而不是手動檢查size
。 我在下面列出了兩種方法: 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.