【问题标题】:How to write nested ternary operator in more optimized way如何以更优化的方式编写嵌套三元运算符
【发布时间】:2014-03-07 14:45:11
【问题描述】:

我正在从后端获取一些大的json 数据,并且我必须检查数据两次,然后才能使用该数据。在嵌套的if 中,我的代码工作正常,我想将其更改为嵌套的ternary 条件。以下是我的代码 (Fiddle)

JS:

var x = /* Some big JSON data */,fx,yy;
if(x){
    yy = $.parseJSON(decodeURIComponent(x));
    yy ? fx = yy.products.length : fx =0;
}else{
    fx = yy = 0;
}

这是我尝试过的(不工作):

x ? ($.parseJSON(decodeURIComponent(x)),(yy ? fx = yy.products.length : fx =0;)) : (fx = yy = 0);

这是Fiddle

【问题讨论】:

  • 你正试图用一些你理解的东西来代替你理解的东西,因为它是如此复杂以至于你无法很好地理解它来编写它。请问,您为什么认为这是个好主意?
  • 遇到困难和复杂的情况,最好使用if else而不是ternary
  • 为什么你认为把所有东西放在一条线上就意味着它是“优化的”?
  • @Jon 我认为将它写在一行中会更容易,第二件事是我相信三元比 if 和 else 执行得更快
  • @BharatSoni:三元运算符绝对不会比 if-else 快。如果编译正确,两者都应该给出相同的字节码。不要为了过早的微优化而牺牲可读性,尤其是对于无用的微优化。

标签: javascript optimization ternary-operator


【解决方案1】:

坦率地说,这样写会更好

var x = /* whatever */, fx = 0, yy = 0;

if (x && yy = $.parseJSON(decodeURIComponent(x))) {
    fx = yy.products.length;
}

这对读者来说一目了然。

另一种使用惯用 Javascript(仍然没有三元运算符)编写它的方法是

var x = /* whatever */, yy, fx;
yy = $.parseJSON(decodeURIComponent(x)) || 0;
fx = (yy && yy.products.length) || 0;

您也可以通过将yyfx 的声明与分配结合起来写成一行。这比三元运算符少一个语句,所以如果您要“优化”语句计数,为什么不这样做呢?

【讨论】:

  • 0 || 不是惯用语,可以省略。你的意思是|| 0
猜你喜欢
  • 2021-12-22
  • 2011-10-29
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 2013-08-19
相关资源
最近更新 更多