JavaScript中有多个表达式的三元运算符?
the_styles ? the_styles.appendTo('head'); the_styles=null : the_styles = $('.stylesheet').detach();
很明显,这是无效的。注意“;”在appendTo()
和the_styles=null
之间。我如何写1行,仍然有像这样的多个表达式?JavaScript中有多个表达式的三元运算符?
使用逗号操作是这样的:
the_styles ? (the_styles.appendTo('head'), the_styles=null) : the_styles = $('.stylesheet').detach();
这里是Mozilla开发者中心写关于逗号操作:
当你想包括您可以用逗号需要单个表达式的位置中的多个表达式。该运算符最常用的用法是在for循环中提供多个参数。
这是一个非常整洁的形式,我也没有想到大括号会如此深刻地改变陈述的含义。我不认为我会写这个,即使偶然,但比较'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() {
和})()
。
现在的困难部分:为什么你想这样做?也许有更好的解决方案!
是的,那是丑陋的,没关系。我只是喜欢三元的,因为它们很干净,只有一条线。 – 2010-07-02 18:25:16
只要每个分支中的代码是单个“行”,他们就很好。否则...使用多行! – mcherm 2010-07-02 20:23:14
我同意glowcoder但如果你仍然想它:
the_styles ? function(){ the_styles.appendTo('head'); the_styles=null;}() : the_styles = $('.stylesheet').detach();
是的,我现在也是,谢谢! – 2010-07-02 18:27:21
the_styles ? the_styles.appendTo('head') : the_styles = $('.stylesheet').detach();
你不需要空,如果您覆盖它!
我需要null,因为如果不是,它会在初始点击后保持相同的值,我需要一个“off/on”函数。 – 2010-07-02 18:24:48
the_styles=the_styles || $('.stylesheet').detach(); the_styles.appendTo('head');
不工作...... :( – 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');
}
对我来说,即使是上述简单版本没有任何意义。 什么部分是显而易见的,但为什么是这样做的?
+1 - 我有类似的答案,但误读了意图。你是对的。 – user113716 2010-07-02 19:00:31
@patrick - 我花了一段时间来评估短路,这总是一个尖叫的信号,不要试图聪明:) – Anurag 2010-07-02 19:15:43
只是一条建议:其他语言中的三元运算符不用于编写完整的语句,而只用于表达式部分(即'='符号的右侧部分)。在Java中,这首先无法编译。最好不要养成这种习惯。 – FK82 2010-07-04 10:41:37