为什么这个表达式返回条件中的实际字符串文字?

时间:2013-08-06 21:14:01

标签: javascript

为什么这个return语句会为每个有效条件返回相应的字符串?是否有关于&&&运营商?它实际上返回“刚刚”或“1分钟前”字符串或代码块中的任何其他字符串,我只是想知道原因是什么。

return day_diff == 0 && ( diff < 60 && "just now" ||
                          diff < 120 && "1 minute ago" ||
                  diff < 3600 && Math.floor( diff / 60 ) +  " minutes ago" ||
                  diff < 7200 && "1 hour ago" ||
                  diff < 86400 && Math.floor( diff / 3600 ) + " hours ago" ) ||
        day_diff == 1 && "Yesterday" ||
        day_diff < 7 && day_diff + " days ago" ||
        day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks ago";

2 个答案:

答案 0 :(得分:1)

&&运算符返回int或C ++返回bool的C不同,&&的JS版本不返回布尔值等效值,如果左手操作数为“truthy”,它只返回右手操作数未修改

正如评论中所指出的,如果左手操作数为“falsy”,则该操作数将直接返回,而不会转换为任何其他类型。

答案 1 :(得分:0)

查看JavaScript逻辑AND(&&)运算符的某些documentation。如果第一个操作数可以转换为true,则&&返回第二个操作数。