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 02 Javascript
如何动态的导入js文件具体该怎么实现
Jan 14 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
Aug 11 Javascript
详解微信小程序——自定义圆形进度条
Dec 29 Javascript
Canvas 绘制粒子动画背景
Feb 15 Javascript
JS检测数组类型的方法小结
Mar 14 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
Apr 26 jQuery
Vue Spa切换页面时更改标题的实例代码
Jul 15 Javascript
详解从新建vue项目到引入组件Element的方法
Aug 29 Javascript
jQuery实现表单动态添加与删除数据操作示例
Jul 03 jQuery
vue实现登录页面的验证码以及验证过程解析(面向新手)
Aug 02 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
Oct 26 jQuery
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
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
phplot生成图片类用法详解
2015/01/06 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
JS 面向对象的5钟写法
2009/07/31 Javascript
JS 控制CSS样式表
2009/08/20 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
python实现逆波兰计算表达式实例详解
2015/05/06 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
Python变量赋值的秘密分享
2018/04/03 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
关于Python解包知识点总结
2020/05/05 Python
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
财务部出纳岗位职责
2013/12/22 职场文书
校长新学期致辞
2015/07/30 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
判断Python中的Nonetype类型
2021/05/25 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python