三目(三元)运算符??::的形式

三目运算符相信大家都很熟悉了:

foo ? ‘foo == true‘ : ‘foo == false‘

而三目运算符?:?:?.....的调用方式大家也不陌生, 就相当于一堆if - else if语句:

foo ? ‘foo == true‘ : bar ? ‘bar == true‘ : ‘bar == false‘

但是在zepto.js里有一段代码:

1 slice.call(
2         isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn‘t have getElementsByClassName/TagName
3           maybeClass ? element.getElementsByClassName(nameOnly) : // If it‘s simple, it could be a class
4           element.getElementsByTagName(selector) : // Or a tag
5           element.querySelectorAll(selector) // Or it‘s not simple, and we need to query all
6       )

这里的三目运算符用的是??::的形式,我搞不太懂,所以打算做个实验搞懂它:

var bool1 = true, bool2 = true, val1 = ‘val1‘, val2 = ‘val2‘, val3 = ‘val3‘;
  console.log(bool1 ? bool2 ? val1 : val2 : val3);

用表格记录下4个不同点情况:

bool1 bool2
true true val1
true false val2
false true val3
false false val3

可以看出上面的代码等价于:

console.log(bool1 ? ( bool2 ? val1 : val2 ) : val3);

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Conditional_Operator上说三目运算符具有右结合性,根据以上两个例子,我总结三目运算符右结合性的意思是:

从最右边取":", 然后看它左边相邻的符号,如果是"?",那么它和这个"?"结合起来,可以用一个()把它俩包住;如果左边相邻的符号是":",那么取左边的":",再重复这个判断.

比如:

?:?:?:?:?:

可以取为

?:(?:(?:(?:(?:))))

???:::

可以取为

?(?(?:):):

然后根据你加上的括号,可以写出等价的if判断语句,这样就能理解复杂三目运算符所包含的意义了。

注意,三目运算符中"?"和":"是成对出现的,最起码数量上,有几个"?"就会有几个":".

时间: 2024-08-06 13:34:28

三目(三元)运算符??::的形式的相关文章

三元(三目)运算符

三元运算符,它和if-else语句类似,语法如下: 判断条件 ? 表达式1 : 表达式2 例如求两个数x.y中的较大者,如果用if-else语句来实现,具体代码如下: int x = 0; int y = 1; int max; if (x > y) { max = x; } else { max = y; } 上面的代码运行之后,变量max的值为1.其中3-8行的代码可以使用下面的三元运算来替换. int max = x > y ? x : y; 例: //比较两个数的大小 public c

JAVA-初步认识-第三章-三元运算符

一. 概述 三元运算符就是三个元素参与运算的操作符. 三元运算符有特定的符号和表达形式,(条件表达式)?表达式1:表达式2; 依照条件表达式的结果是true还是false, 来决定运行表达式1还是2. 我们开始对三元运算符进行一个演示: DOS显示在编译的过程中出现了错误.第一个错误就交代了语法有错误,一个错误的出现,导致了后续一系类的错误. 当将源程序改动后,DOS就显示正常. 我又重新换了一种书写方式,DOS结果又显示错误. 上面的种种错误都显示出,我们对于三元运算符的认识和运用不熟悉. 二

三目(元)运算符的 前台 应用,妙用!!!

简单描述:今天看老大提交的代码了,看到页面的时候,有一个地方使我眼前一亮,琢磨了一小下下,觉得真的是很巧妙了,老大NB,老大带我开飞机,^_^,废话不多说了,直接上代码: 代码: <tr th:each="xxx : ${list}"> <td th:text="${xxx.xxxName}">XX名称</td> <td th:text="${xxx.xxxCode}">XX编码</td>

python 三元运算符、推导式、递归、匿名函数、内置函数

三目运算符 # 三目(元)运算符:就是 if...else...语法糖 # 前提:简化if...else...结构,且两个分支有且只有一条语句 # 注:三元运算符的结果不一定要与条件直接性关系 cmd = input('cmd: ') print('可以转化为数字') if cmd.isdigit() else print('不可以转化为数字') a = 20 b = 30 res = a if a > b else b # 求大值 print(res) res = 'b为小值' if a >

三元运算(三目运算)

if 1==1: name = "yzy" else: name = "ycj" 转化为三元运算的形式 name = "yzy"  if 1==1  else  "ycj" 如果1==1成立的话  赋值"yzy", 如果不成立的话就赋值 "ycj" 这个运算就针对简单的if判断 原文地址:https://www.cnblogs.com/ychj/p/9459735.html

JavaScript的位运算符、赋值运算符、其他运算符、三元运算符、运算符优先级

一. 位运算符 在一般的应用中,我们基本上用不到位运算符.虽然,它比较基于底层,性能和速度会非常好,而就是因为比较底层,使用的难度也很大,底层运算是转换成二进制进行运算的. 位运算符有七种,分别是:位非 NOT(~).位与 AND(&).位或 OR(|).位异或 XOR(^).左移(<<).有符号右移(>>).无符号右移(>>>). var box = ~25; //-26 var box = 25 & 3; //1 var box = 25 |

三元运算符用法详解

三元运算符用法详解: 此运算符是一种非常常用的元素符号,如果使用得当可以省却不少代码.三元运算符也可以称作为条件运算符,可以说是if...else语句的一种简化形式,下面就结合实例简单介绍一下如何实现次运算符,先看一下运算符的语法结构: 表达式一?表达式二:表达式三 三元运算符之所以称作三元,就是因为具有三个操作数.当表达式一的返回值为true的时候,则返回表达式二的值,否则返回表达式三的值.下面看一段代码实例: <!DOCTYPE HTML> <html> <head>

JAVA三元运算符

/* 三元(三目)运算符 格式 布尔类型表达式 ?  表达式1 : 表达式2 ; 执行流程: 先判断布尔类型表达式的值 true   执行表达式1 false  执行表达式2 表达式1 或 表达式2 最终是有一个结果 一般来说是一个数据 案例:获取两个数的最大值  ? 分析: 1:判断两个数大小 要用 > a , b a>b  如果 结果是true  a大 结果是false b大 a>b  ?  a : b ; */ class OperatorDemo{ public static v

Java 关键字、标识符、注释、常量与变量、数据类型,算术、赋值、比较、逻辑、位、三元运算符和流程控制【3】

关键字 关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 用于定义数据类型的关键字 class interface byte short int long float double char boolean void         用于定义数据类型值的关键字 true false null     用于定义流程控制的关键字 if else switch case default while do for break continue return  

JAVA-初步认识-第三章-比较运算符逻辑运算符

一. 运算符的总类 先列举所有的运算符类型:算术运算符,赋值运算符,比较运算符,逻辑运算符,位运算符,三元运算符. 命名为什么叫运算符,英文叫operator, 难道说这是对操作的符号化表示?可以着一些英文的原版书籍来看. 本节将讨论比较运算符和逻辑运算符,这些仍旧属于java语言基础.等到讲完语法,函数,和数组之后,才是真正进入java语言的研究. 二. 在探讨比较运算符之前,先将视频中遇到的一个问题再重新学习一下.这里DOS报的错是没有找到主类,产生这样问题的原因只有两个:java运行的类名