JavaScript三元运算符的多种使用技巧


Posted in Javascript onApril 16, 2015

发现代码慢慢写多了的时候会不自觉的将if else 用 三元来替代,仅仅是未了让代码更简洁精辟,当然也有人说用三元可以让你有高潮的感觉。最近在写js 的时候也有这样的感觉,并且收集了一些小技巧,分享分享。

大鸟请跳过下面这段,大大鸟帮忙指正 ^__^

====普及线====

表达式 (expr1) ? (expr2) : (expr3)

在 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。

============

普通用法

当你发现你经常用if else

if(拜春哥 || 拜考试帝){

    不挂科;

}else{

    门门挂;

}

那么三元的表示法就是
拜春哥 || 拜考试帝 ? 不挂科 : 门门挂

很帅气的发现代码 精辟了 好多。

日常中经常会有这样的 if else 判断,特别是嵌套比较多的时候 用三元是比较和谐的,可以让你的代码看起来更加清爽,结构清晰。

稍微聪明点的用法
通过不断的变化,可以衍生出很多三元的用法。如下一段jquery代码

flag ? $('body').addClass('hover') : $('body').removeClass('hover') ;

甚至更变态些的。
$('.item')[ flag ? 'addClass' : 'removeClass']('hover')

上面的代码看着比较困惑。因为当flag = true 的时候 ,代码就变成以下代码:
$('.item')['addClass']('hover')

这样写法等同于。
$('.item').addClass('hover')

再升华一下

可以根据需要来调用自己想要的function来处理更多的事情。

function a(){

      do something

}

function b(){

      do something

}
flag ? a() : b();

那么为师的完全体

于是有了这么个案例,两个按钮 一个向前的行为,一个向后的行为。操作的功能都差不多。

    var action_turn = function(e, type){

        var self = $(e).closest('li');

        var target = self[type === 'prev' ? 'prev' : 'next']();

        target.addClass('has-img');

        self.removeClass('has-img')

    }
    var btn_next = $('#item-photo-panel a.next')

    btn_next.click(function(){

        action_turn(this, 'next');

        return false;

    });

    var btn_prev = $('#item-photo-panel a.prev')

    btn_prev.click(function(){

        action_turn(this, 'prev');

        return false;

    });

尽量避免的情况
alert( true ? 'true' : false ? 't' : 'f' )

我指的是尽量避免如上嵌套的 三元,因为在js 中 语句是从右到左,上面的代码等同于
alert( true ? 'true' : ( false ? 't' : 'f' ) )

如php 中这个结果就完全不一样,三元嵌套的时候是优先左边的。
echo (( true ? 'true' :  false ) ? 't' : 'f'  )  //php中

tip:
另外发现php中的三元有这样的提示

Note: 注意三元运算符是个语句,因此其求值不是变量,而是语句的结果。如果想通过引用返回一个变量这点就很重要。在一个通过引用返回的函数中语句 return $var == 42 ? $a : $b; 将不起作用,以后的 PHP 版本会为此发出一条警告。

但是经过试验,发现在javascript 中上面的做法是可以起作用的,大概是js 比较BT,严谨度没有php那么大的原因。

Javascript 相关文章推荐
实例:用 JavaScript 来操作字符串(一些字符串函数)
Feb 15 Javascript
Jquery判断IE6等浏览器的代码
Apr 05 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
Oct 29 Javascript
javascript中[]和{}对象使用介绍
Mar 20 Javascript
JavaScript等比例缩放图片控制超出范围的图片
Aug 06 Javascript
基于javascript实现随机颜色变化效果
Jan 14 Javascript
Javascript6中字符串的四个新用法分享
Sep 11 Javascript
微信小程序 支付简单实例及注意事项
Jan 06 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
Jun 07 Javascript
JavaScript:ES2019 的新特性(译)
Aug 08 Javascript
js实现数字从零慢慢增加到指定数字示例
Nov 07 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
Sep 11 Javascript
javascript中call apply 的应用场景
Apr 16 #Javascript
javascript三元运算符用法实例
Apr 16 #Javascript
jQuery on()方法使用技巧详解
Apr 16 #Javascript
JavaScript简单表格编辑功能实现方法
Apr 16 #Javascript
JavaScript转换二进制编码为ASCII码的方法
Apr 16 #Javascript
JavaScript实现彩虹文字效果的方法
Apr 16 #Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
Apr 16 #Javascript
You might like
laravel安装zend opcache加速器教程
2015/03/02 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
js 表格隔行颜色
2009/12/02 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
js Array.slice的8种不同用法示例
2019/07/10 Javascript
Vue指令实现OutClick的示例
2020/11/16 Javascript
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
python实现代码统计器
2019/09/19 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
幼儿园实习生辞职信
2014/01/20 职场文书
员工考核管理制度
2014/02/02 职场文书
小班开学寄语
2014/04/04 职场文书
小学生常见病防治方案
2014/06/06 职场文书
股东授权委托书范文
2014/09/13 职场文书
毕业证明模板
2015/06/19 职场文书
音乐研修感悟
2015/11/18 职场文书
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL
使用CSS自定义属性实现骨架屏效果
2022/06/21 HTML / CSS