资讯专栏INFORMATION COLUMN

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

Yangyang / 2859人阅读

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

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

foo ? "foo == true" : "foo == false"

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

foo ? "foo == true" : bar ? "bar == true" : "bar == false"

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

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

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

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);

条件(三元)运算符 -mdn上说三目运算符具有右结合性,根据以上两个例子,我总结三目运算符右结合性的意思是:

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

比如:

?:?:?:?:?:

可以取为

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

???:::

可以取为

?(?(?:):):

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82352.html

相关文章

  • JavaScript面向对象

    摘要:布尔,值为或数字,值为任何整数或浮点数数字符串,值为由单引号或双引号括出的单个字符或连续字符空类型,其仅有一个值未定义,其仅有一个值原始类型的值是直接保存在变量中,用进行验证。 数据类型 在JavaScript中,数据类型有两种类型: 1.原始类型:值直接保存在变量本地的数据类型。 boolean:布尔,值为true或false number:数字,值为任何整数或浮点数数 string...

    yy13818512006 评论0 收藏0
  • Java知识点总结 (基本语法)

    摘要:强制类型转换下标运算符变量与常量常量是在程序中的不会变化的数据变量其实就是内存中的一个存储空间,用于存储数据。表示结束本次循环,继续下次循环。 Java知识点总结 (基本语法) @(Java知识点总结)[Java, Java基本语法] @(Java开发)[Java基本语法] [toc] Java特点 简单自然平台可移植性支持函数式编程JIT 编译更好的并发编程健壮安全 执行方式 编译...

    tuantuan 评论0 收藏0
  • JAVA 三目运算时遇到

    摘要:但是,三目运算符也是有一定的语言规范的。一三目运算符对于条件表达式,先计算条件,然后进行判断。那么,这段代码为什么会自动拆箱呢这其实是三目运算符的语法规范。所以,结果就是由于使用了三目运算符,并且第二第三位操作数分别是基本类型和对象。 三目运算符是我们经常在代码中使用的,a= (b==null?0:1);这样一行代码可以代替一个if-else,可以使代码变得清爽易读。 但是,三目运算符...

    jasperyang 评论0 收藏0
  • 一道三目运算测试题引发思考

    摘要:因为加法的优先级比条件运算符高,所以先运算加号,是字符串拼接,结果是非空字符串,在中字符串的布尔类型为。知识点三目运算为真执行为假执行运算优先级在中布尔类型只有以下种情况为假,其他都为真。 一、测试题 原题:以下代码的输出是? var val = false; alert(val is + val ? true : false); 解析: 1. 此题考察的知识点: 三目运算、**运...

    SHERlocked93 评论0 收藏0

发表评论

0条评论

Yangyang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<