2011-05-20 22 views
4

如果我可以说:的的Javascript速记

var big = (x > 10) ? true : false; 

代替:

var big; 
if (x > 10) { 
    big = true; 
} 
else { 
    big = false; 
} 

如何让我这个类似短?

var now = new Date 

if (now.getHours() < 5) { 
    return "late night pick me up"; 
} 
else if (now.getHours() < 9) { 
    return "breakfast"; 
} 
else if (now.getHours() < 13) { 
    return "lunch"; 
} 
else if (now.getHours() < 17) { 
    return "afternoon snak"; 
} 
else { 
    return "dinner"; 
} 

感谢一大堆!

+1

这就是我thought..if您删除您的评论,并使它成为一个答案,我会剔你这里有一个小窍门速记好吗 – XGreen 2011-05-20 15:53:05

+0

,回答 – 2011-05-20 15:55:13

回答

4

你不能,没有一堆凌乱的嵌套三元运算符。三元运算符仅适用于一行。

+0

对不起大家。每个人都非常合适,所以第一个答案就是打勾。 – XGreen 2011-05-20 16:05:50

1

它看起来相当混乱:

return ((now.getHours() < 5)?"late night pick me up": 
     ((now.getHours() < 9)?"breakfast": 
      ((now.getHours() < 13)?"lunch": 
       ((now.getHours() < 17)?"afternoon snack": 
        "dinner" 
       ) 
      ) 
     ) 
     ); 

你要记住匹配括号。

+1

这就是我所说的,括号内涵。更多的级别和代码是在林博:-) – Satish 2011-05-20 15:55:37

+0

@Satish,我最后一次匹配括号是在'cLisp'类 – Neal 2011-05-20 15:56:51

1

你总是可以使用switch语句:

switch(true) 
{ 
case (now.getHours() < 5): 
    return "late night pick me up"; 
    break; 
case (now.getHours() < 9): 
    return "breakfast"; 
    break; //etc... 
default: 
    return "dinner"; 
} 
+0

刚刚写完全相同的东西。 – geekchic 2011-05-20 15:57:25

+3

在'case'语句中不能有'<',这是行不通的。 – 2011-05-20 16:06:22

+0

+1 - 感谢您的纠正,我做了编辑来解决这个问题。 – Kyle 2011-05-20 16:20:19

3

不能速记是特别的,我个人只是写这样的:

if (now.getHours() < 5) return "late night pick me up"; 
else if (now.getHours() < 9) return "breakfast"; 
else if (now.getHours() < 13) return "lunch"; 
else if (now.getHours() < 17) return "afternoon snak"; 
else return "dinner"; 

这不是太糟糕了?

+0

是的,它比我的更好 – XGreen 2011-05-20 15:55:09

+2

稍有不同:你可以完全放弃所有'elses',只留下'ifs',因为每一个都会产生一个return语句。除了较少的代码/较少的输入外,您的条件语句将全部垂直排列,使它们之间的视觉比较更加容易。 – Matt 2011-05-20 16:00:23

+0

在这种情况下是这样,特别是因为'返回'操作符,但有些人可能会认为'其他'帮助易读性,不应该丢失不一定 – cusimar9 2011-05-20 16:18:13

3

你可能不想,因为它可能会不太可读。但是,你可以简单地窝三元运算符,像这样:

var now = (now.getHours() < 5) ? "late night pick me up" : ((now.getHours() < 9) ? "breakfast" : ((now.getHours() < 13) ? "lunch" : ((now.getHours() < 17) ? "afternoon snack" : "dinner"))))); 

我希望你能明白为什么这不是一个好主意!

这样一个更长,更复杂的情况通常需要多条线和好的块分离才能容易理解 - 虽然您可以说可以添加换行符,但标准if-else块最终会成为赢家,意图。

+1

y我可以看到为什么:)它的可怕 – XGreen 2011-05-20 16:00:04

0

你总是可以用一个表来复制功能:

var now = new Date(); 
var meals = [ 
    "late night pick me up", 
    "breakfast", 
    "lunch", 
    "afernoon snack", 
    "dinner"]; 
return meals[parseInt(now.getHours()-4)/4]; 
+0

我也喜欢这个,但它更像是一个替代表示法,缩短了它的缩短 – XGreen 2011-05-20 15:58:26

+1

,如果'now.getHours()== 13',则不能在数组中使用小数点键('hours [9/4]') – Neal 2011-05-20 15:58:39

+1

忘记JS的分工行为。更新和修复。 – yan 2011-05-20 16:00:43

2

首先,尝试的var big = x > 10;代替var big = (x > 10) ? true : false;

其次,如果其他当你有回报,你不需要。

//looks a little confusing, but you can move the return to line after ifs 
var now = new Date 
if (now.getHours() < 5) return "late night pick me up"; 
if (now.getHours() < 9) return "breakfast"; 
if (now.getHours() < 13) return "lunch"; 
if (now.getHours() < 17) return "afternoon snak"; 
return "dinner"; 
10
var now = new Date().getHours(); 

return now < 5 ? "late night pick me up" : 
     now < 9 ? "breakfast" : 
     now < 13 ? "lunch" : 
     now < 17 ? "afternoon snak" : "dinner"; 
+0

为什么这不被投票? 这是这类问题最简单的速记,使用起来很简单。即使你发现三元操作符可以被链接,如果你没有使用它,它可能不会发生,括号可以从''a? b:(c?d:e)''。 – KalEl 2013-07-01 19:00:05

1

我碰到这在寻找别的东西绊倒了。使用逻辑运算符和滥用的事实字符串文字truthy =]

var hr = new Date().getHours(); 

return hr < 5 && 'late night pick me up' 
    || hr < 9 && 'breakfast' 
    || hr < 13 && 'lunch' 
    || hr < 17 && 'afternoon snack' 
    || 'dinner';