今天谈一个小知识点,三元运算符。三元运算,顾名思义会有三个要素,表达式的大致组成为condition ? expr1 : expr2;一个语句加两个表达式。问号之前为判断语句。如果为真,则执行第一个表达式,如果为假,则执行第二个表达式。我的理解其实就是简化的if else语句,举个栗子,经常看到的一个点击展开,再点击隐藏按钮。

我想实现点击输入法,实现下面ul的展开与隐藏,如果我们用if else的话可能会这么写:

   oBth.onclick=function(){
if (oUl.style.display=='block') {
oUl.style.display=='none';
}else{
oUl.style.display=='block';
}
}

但是如果我们用三元运算符的话可能就只需要下面这一行代码:

oBth.onclick=function(){
oUl.style.display == "block" ? oUl.style.display="none" : oUl.style.display="block"
}

有木有很神奇。当然我只是用了一个比较容易理解的写法,还有很大的优化空间,我们当然也可以这样:

oBth.onclick=function(){
var style = oUl.style.display;
oUl.style.display= style == "block" ? "none":"block" //这样写的话就一定不能忘了把运算结果重新赋值给元素 - -
  //oUl.style.display= (style == "block" ? "none":"block") 可读性更高
}

上面代码的意思是,如果style == "block" 成立的话就把none返回,不成立就返回block,然后把返回结果赋值给作用元素,不过要特别注意 = 和 == 用法和区别。因为赋值运算符(=)的优先级比较低,所以会最后执行赋值运算。如果把后面的三元运算符加上()可读性会更高一点,但效果是一样的。

比较容易出错的地方:

三元运算比较容易出错的应该就是运算的优先级问题:

var isMember = false;
console.log("当前费用" + isMember ? "$2.00" : "$10.00"); //返回$2.00

出错的原因是?的运算优先级比+低,所以实际运行的语句是:

"当前费用false" ? "$2.00" : "$10.00");

在js中字符串是为真的,所以会输出$2.00.

不过为了避免以上错误的话,可以记住:

不是false, 0, undefined, NaN, "" or null,js都认为是true;

所以具体是用三元运算符还是用if else见仁见智,视具体情况而定吧。

感谢阅读!

Javascript三元条件运算符的更多相关文章

  1. JavaScript三元运算符

    ㈠条件运算符也叫做三元运算符 ⑴语法:条件表达式?语句1:语句2: ⑵执行的流程: ①条件运算符在执行时,首先对条件表达式进行求值 ▶如果该值为true,则执行语句1,并返回执行结果 ▶如果该值为fa ...

  2. JavaScript三元运算符以及运算符顺序

    三目运算符(三元运算符) 三目运算符:运算符需要三个操作 语法:表达式1?表达式2:表达式3 表达式1是一个条件,值为Boolean类型 若表达式1的值为true,则执行表达式2的操作,并且以表达式2 ...

  3. javascript——三元操作符

    {{C?A:B}} C条件成立则为A,不存在取B 比如在跟后台交互时,有许多要设默认值 <script type=''text/javascript> var value = docume ...

  4. JavaScript的条件运算符与条件语句

    1.条件运算符 比较运算符 ==    判断左右两边数据的值是否相等 ===   判断左右两边数据的之是否相等,同时还判断两边的数据类型是否一样 !=  比较运算符的比较结果都是布尔值,true或者f ...

  5. jquery实现全选、取消反选、加JavaScript三元运算(三种法法实现反选)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Lua骚操作——三元条件运算符

    本文地址:https://www.cnblogs.com/oberon-zjt0806/p/13337577.html 本文参考了这篇文章 三元运算符 (如果您已经了解什么是三元运算符,请大胆第前往下 ...

  7. 前端优化建议:合理利用JavaScript的条件运算符

    在最近的项目中要使用到一个格式化文件大小的算法,于是不假思索写了如下代码: function formatSize(size){ if(size<1024){ return size+" ...

  8. Javascript学习之三元运算符详解

    本文主要是通过实例为大家介绍javascript三元运算符相关内容,希望对初学者学习这部分内容有所帮助. 实例 <!DOCTYPE html> <html> <head& ...

  9. 第四章:Javascript表达式和运算符

    表达式是javascript中的一个短语,javascript解释器会将其计算出一个结果.程序中常用量是最简单的一类表达式就是变量.变量名也是一种简单的表达式,它的值就是赋值给变量的值.复杂的表达式是 ...

随机推荐

  1. Java JDK8 安装及环境变量配置

    步骤: 1.下载JDK 2.安装 3.配置环境变量 注意: 1.在选择安装路径时,不要选择C盘或D盘下的[Program Files]目录.此目录名中有空格,会导致配置不成功. 参照链接: http: ...

  2. bzoj 2282 [Sdoi2011]消防(树的直径,二分)

    Description 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这个国家的人对火焰有超越宇宙的热情,所以这个国家 ...

  3. Spring笔记(三)AOP前篇之动态代理

    AOP思想是将程序中的业务代码与服务代码进行分离,在运行时进行结合.比较强调程序的层次结构,是一种面向切面的编程.而在AOP实现的底层主要用到了动态代理,而动态代理又分为JDK动态代理和CGLIB动态 ...

  4. 群赛 ZOJ3741(dp) ZOJ3911(线段树)

    zoj3741 简单dp.wa了两个小时,中间改了好多细节.后来还是不对,参考了别人的代码,发现一个致命问题,初始化的时候,不是每种状态都能直接达到的.初始化成-1. (题目有个小坑,0<=L& ...

  5. jenkins持续集成配置备忘

    配过好几次,但是老忘记.记录备忘. 安装下列插件: ssh和git插件用来下载源码 publish over ssh 插件用来发布代码到测试环境. email插件用来更强大的email配置. file ...

  6. 教程-MessageBox 使用方法

    对应对象:TApplication 声明:function MessageBox(Text,Caption:PChar;Flags:Word):Integer; 功能:MessageBox方法可以显示 ...

  7. hdoj 1406 完数

    完数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  8. JS跨域笔记

    什么是跨域,跨域是指不同域之间相互访问,只要协议.域名.端口有任何一个不同,都被当作是不同的域. 对于端口和协议的不同,只能通过后台来解决,前台是无能为力的. 受浏览器同源策略的限制,本域的js不能操 ...

  9. 来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧.

  10. Runtime 函数 Swizzling 改变OC方法的调度顺序

    首先加入一个小知识: SEL.Method.IMP的含义及区别 在运行时,类(Class)维护了一个消息分发列表来解决消息的正确发送.每一个消息列表的入口是一个方法(Method),这个方法映射了一对 ...