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 相关文章推荐
ComboBox 和 DateField 在IE下消失的解决方法
Aug 30 Javascript
JS和函数式语言的三特性
Mar 05 Javascript
实例讲解JS中数组Array的操作方法
May 09 Javascript
JS实现动态给图片添加边框的方法
Apr 01 Javascript
JavaScript实现图片轮播的方法
Jul 31 Javascript
js实现仿爱微网两级导航菜单效果代码
Aug 31 Javascript
js实现千分符和保留几位小数的简单实例
Aug 01 Javascript
js接收并转化Java中的数组对象的方法
Aug 11 Javascript
详解如何使用webpack打包JS
Jun 21 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
Oct 10 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
Dec 11 Javascript
echarts实现词云自定义形状的示例代码
Feb 20 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
php生成静态文件的多种方法分享
2012/07/17 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
PHP简单日历实现方法
2016/07/20 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
JavaScript中的数值范围介绍
2014/12/29 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
Angular5中状态管理的实现
2018/09/03 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
Element UI框架中巧用树选择器的实现
2018/12/12 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
Python之eval()函数危险性浅析
2014/07/03 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
应届生煤化工求职信
2013/10/21 职场文书
入学申请自荐信范文
2014/02/26 职场文书
会计员岗位职责
2014/03/15 职场文书
党风廉政建设责任书
2014/04/14 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
甘南现象心得体会
2014/09/11 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
解析Redis Cluster原理
2021/06/21 Redis