簡體   English   中英

Javascript將多個值分配給`ternary`運算符

[英]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 val1var 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM