JavaScript中有多个表达式的三元运算符?

问题描述:

the_styles ? the_styles.appendTo('head'); the_styles=null : the_styles = $('.stylesheet').detach(); 

很明显,这是无效的。注意“;”在appendTo()the_styles=null之间。我如何写1行,仍然有像这样的多个表达式?JavaScript中有多个表达式的三元运算符?

+0

只是一条建议:其他语言中的三元运算符不用于编写完整的语句,而只用于表达式部分(即'='符号的右侧部分)。在Java中,这首先无法编译。最好不要养成这种习惯。 – FK82 2010-07-04 10:41:37

使用逗号操作是这样的:

the_styles ? (the_styles.appendTo('head'), the_styles=null) : the_styles = $('.stylesheet').detach(); 

这里是Mozilla开发者中心写关于逗号操作:

当你想包括您可以用逗号需要单个表达式的位置中的多个表达式。该运算符最常用的用法是在for循环中提供多个参数。

在这里阅读更多:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/Comma_Operator

+0

这是一个非常整洁的形式,我也没有想到大括号会如此深刻地改变陈述的含义。我不认为我会写这个,即使偶然,但比较'var x = 1,y = 2,z = 3;'和'var x =(1,y = 2,z = 3);'。在第一种情况下,'x'设置为'1'。在第二种情况下,'x'设置为'3'。这真的很干净。 – Andrew 2010-07-04 09:48:42

the_styles ? (function() {the_styles.appendTo('head'); the_styles=null})() : <etc> 

只是包裹代码块中(function() {})()

现在的困难部分:为什么你想这样做?也许有更好的解决方案!

+1

是的,那是丑陋的,没关系。我只是喜欢三元的,因为它们很干净,只有一条线。 – 2010-07-02 18:25:16

+0

只要每个分支中的代码是单个“行”,他们就很好。否则...使用多行! – mcherm 2010-07-02 20:23:14

我同意glowcoder但如果你仍然想它:

the_styles ? function(){ the_styles.appendTo('head'); the_styles=null;}() : the_styles = $('.stylesheet').detach(); 
+0

是的,我现在也是,谢谢! – 2010-07-02 18:27:21

the_styles ? the_styles.appendTo('head') : the_styles = $('.stylesheet').detach(); 

你不需要空,如果您覆盖它!

+0

我需要null,因为如果不是,它会在初始点击后保持相同的值,我需要一个“off/on”函数。 – 2010-07-02 18:24:48

the_styles=the_styles || $('.stylesheet').detach(); the_styles.appendTo('head'); 
+0

不工作...... :( – 2010-07-02 18:26:46

谁需要三元运算符?

​the_styles = !the_styles && $('.stylesheet').detach()​​​​ || 
      the_styles.appendTo('head') && null;​ 

不得不切换周围另有所述第一表达将总是迫使第二表达.detach()null值的表达式来进行评估。

巧妙的代码唯一的事情是,一旦你在咖啡休息之后回到它,即使对你来说它也没有任何意义。所以这是更好的:

if(the_styles) { 
    the_styles.appendTo('head') 
    the_styles = null; 
} 
else { 
    the_styles = the_styles.detach('.stylesheet'); 
} 

对我来说,即使是上述简单版本没有任何意义。 什么部分是显而易见的,但为什么是这样做的?

+0

+1 - 我有类似的答案,但误读了意图。你是对的。 – user113716 2010-07-02 19:00:31

+1

@patrick - 我花了一段时间来评估短路,这总是一个尖叫的信号,不要试图聪明:) – Anurag 2010-07-02 19:15:43