Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中具有多个表达式的三元运算符?_Javascript_Jquery_Conditional_Ternary Operator - Fatal编程技术网

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

JavaScript中具有多个表达式的三元运算符?,javascript,jquery,conditional,ternary-operator,Javascript,Jquery,Conditional,Ternary Operator,显然,这是无效的。请注意appendTo()和之间的“;”\u styles=null。如何在一行中编写它,并且仍然有多个这样的表达式?这些样式?(function(){the_styles.appendTo('head');the_styles=null})(: the_styles ? the_styles.appendTo('head'); the_styles=null : the_styles = $('.stylesheet').detach(); 只需将代码块包装到(funct

显然,这是无效的。请注意
appendTo()
之间的“;”\u styles=null
。如何在一行中编写它,并且仍然有多个这样的表达式?

这些样式?(function(){the_styles.appendTo('head');the_styles=null})(:
the_styles ? the_styles.appendTo('head'); the_styles=null : the_styles = $('.stylesheet').detach();
只需将代码块包装到
(function(){
})(


现在来看最难的部分:为什么要这样做?也许有更好的解决办法

我同意glowcoder,但如果您仍然需要它:

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

如果您要覆盖它,则不需要将其设为空

按以下方式使用逗号运算符:

the_styles ? the_styles.appendTo('head') : the_styles = $('.stylesheet').detach();
the_styles=the_styles || $('.stylesheet').detach(); the_styles.appendTo('head');
以下是Mozilla开发者中心对逗号运算符的描述:

如果要在需要单个表达式的位置包含多个表达式,可以使用逗号运算符。此运算符最常见的用法是在for循环中提供多个参数

请在此处阅读更多信息:


谁需要三元运算符

the_styles ? (the_styles.appendTo('head'), the_styles=null) : the_styles =  $('.stylesheet').detach();
必须切换表达式,否则第一个表达式的
null
值将始终强制计算第二个表达式
.detach()

关于聪明的代码,唯一的一点是,一旦你在喝咖啡休息后回到它,它甚至对你来说都没有任何意义。所以这更好:

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

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

我需要空值,因为如果不是空值,它在初次单击后保持相同的值,我需要一个“开/关”功能。是的,这很难看,没关系。我喜欢三元的,因为它们很干净,只有一行。只要每个分支中的代码是一行,它们就很好。否则。。。使用多行+1-我有一个类似的答案,但误解了意图。你说得对。@patrick-我花了一段时间来评估短路,短路总是一个尖叫信号,告诉我不要试图变得聪明:)这是一个非常巧妙的形式。我也没想到大括号会如此深刻地改变这句话的意思。我不认为我会偶然写下这个,但是比较
varx=1,y=2,z=3
变量x=(1,y=2,z=3)。在第一种情况下,
x
设置为
1
。在第二种情况下,
x
设置为
3
。这真的很好。只是一条建议:其他一些语言中的三元运算符不用于编写完整的语句,而仅用于表达式部分(即“=”符号右侧的部分)。在Java中,这首先将无法编译。最好不要养成这种习惯。
​the_styles = !the_styles && $('.stylesheet').detach()​​​​ ||
             the_styles.appendTo('head') && null;​
if(the_styles) {
    the_styles.appendTo('head')
    the_styles = null;
}
else {
    the_styles = the_styles.detach('.stylesheet');
}