Javascript将多个值分配给`ternary`运算符

时间:2017-05-12 05:48:49

标签: javascript

如何为ternary运营商分配多个值?那不可能吗?我试过这样,但得到错误:

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

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

以上两种方法都会抛出错误。如何设置var val1var val2;

我可以直接宣布它。但我想知道这里的三元算子方法。

7 个答案:

答案 0 :(得分:4)



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




答案 1 :(得分:1)

它是一个语法错误。你可以使用这个单独的调用



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




答案 2 :(得分:0)

你可以这样做



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




答案 3 :(得分: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;
            },

答案 4 :(得分:0)

三元运算符的语法是

condition ? expr1 : expr2 

var val1=999; var val2=100;是有效的声明var val1=999, var val2=100;不是),但 表达。因此,您无法按照自己在代码中的方式使用它们。但是,您可以使用eval function这样表达式:

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

当然,正如其他人所指出的那样。使用eval是错误的方法。我告诉你如何回答你的问题。

答案 5 :(得分:0)

使用if声明。

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

虽然D-reaper的回答回答了你的问题,但你的问题确实不是正确的问题。 (另外eval非常偶尔有用,但另外被认为是“邪恶的”#34;因为它会阻止各种JavaScript引擎优化,并在存储的用户输入数据上使用XSS等安全漏洞。

当您使用三元运算符分配另一个变量时,三元运算符非常有用:

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

在您的示例中,您没有赋值,第一个表达式不打算返回值,而0的第二个值被忽略,因此冗余是一个非常强大的代码气味他们应该提醒你有更好的方式做你想做的事。

答案 6 :(得分:-1)

我看到您要执行的操作,您可以使用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