这两天看到别人写的代码,感觉很牛逼,如下,大神请忽视

$(".lgn").on("click", function() {var a ={};

a.loginType= $(this).data("logintype");

a.loginType== wx_utils.LOGIN_TYPE.WX ? (a.username = $("#username").val(), a.password = $("#password").val()) : a.loginType == wx_utils.LOGIN_TYPE.ECARD && (a.username = f || $("#username_").val(), a.password = $("#password_").val(), a.customerCode = d || $("#customerCode").val(), a.outid = $("#outid").val());

a.scopes=[];

$("input[name='scope_box']:checked").each(function(b, c) {

a.scopes.push(c.value)

});

wx_utils.login(a,!1, function(a) {

a&& 202102 == a.errorCode ? ($(".modal-overlay").addClass("modal-overlay-visible"), $("#bind_ecard_div").show()) : wx_utils.toast(a)

})

});

大概就是这样,主要用逻辑符合三目运算符来写判断

首先说三目运算符,

语法

conditions ? statementA : statementB ;

上述语句,首先判断条件condition,若结果为真则执行语句statementA,否则执行语句statementB。

值得注意的是,由于 JavaScript 脚本解释器将分号“ ; ”作为语句的结束符,statementA 和 statementB 语句均必须为单个语句,使用多个语句会报错。

一般我们用的时候是这样的,如果statementA或statementB里面有分号或者逗号,都会报错

var c = 1;

c==1 ? console.log(c),console.log('1') : console.log('c不等于1');

结果为Uncaught SyntaxError: Unexpected token ,报错了。

那么如何输出更多语句或者执行一条以上的操作呢?

把statementA用小括号包起来即可,里面可以以逗号为分割符,执行多个语句

var a = 5;functionabc() {

console.log('我是方法abc')

}functionerr() {

console.log('我是方法err')

}

a==2 ?(abc()):err();

a==5 ? (abc(),abc()):err();

结果如下

我是方法err

我是方法abc

我是方法abc

statementA 或 statementB 里面可以也可以放函数哦。

要注意的是,三目运算符和if else到底有什么区别呢?

对于n++;

var n = 0;if(n >= 10){

n=0;

}else{

n++;

}

console.log(n);

n= 1;

var m = 0;

m= m >= 10 ? m=0 : m++;

console.log(m);

m= 0;

对于++n;

var n = 0;if(n >= 10){

n=0;

}else{++n;

}

console.log(n);

n= 1;

var m = 0;

m= m >= 10 ? m=0 : ++m;

console.log(m);

m= 1;

n++和++n在此验证中,没有任何区别,因为if else都是计算结果之后的,不会返回n,没有任何返回值

但是对于三目运算,n++返回的n值为n本身,++n返回的n值为n+1之后的结果

再说逻辑运算符

a() && b() :如果执行a()后返回true,则执行b()并返回b的值;如果执行a()后返回false,则整个表达式返回a()的值,b()不执行;

a() || b() :如果执行a()后返回true,则整个表达式返回a()的值,b()不执行;如果执行a()后返回false,则执行b()并返回b()的值;

&& 优先级高于 ||

1、只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。

2、只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。

3、只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;

4、只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;

所以,我们可以用&&来代替if else进行判断,比如我们判断某些对象是否存在或者某些变量是否等于某个值时,就可以写做 a && a=5; a.length > 0 && $('.login').show()此类。

举个例子

如图:

假设对成长速度显示规定如下:

成长速度为5显示1个箭头;

成长速度为10显示2个箭头;

成长速度为12显示3个箭头;

成长速度为15显示4个箭头;

其他都显示都显示0个箭头。

各种方法一览

//if else 实现

var add_level = 0;if(add_step == 5){

add_level= 1;

}else if(add_step == 10){

add_level= 2;

}else if(add_step == 12){

add_level= 3;

}else if(add_step == 15){

add_level= 4;

}else{

add_level= 0;

}

//也可以用switch实现

var add_level = 0;switch(add_step){case 5:

add_level= 1;break;case 10:

add_level= 2;break;case 12:

add_level= 3;break;case 15:

add_level= 4;break;default:

add_level= 0;break;

}

如果需求改成:

成长速度为>12显示4个箭头;

成长速度为>10显示3个箭头;

成长速度为>5显示2个箭头;

成长速度为>0显示1个箭头;

成长速度为<=0显示0个箭头。

那么用switch实现起来也很麻烦了。

那么你有没有想过用一行就代码实现呢?

用逻辑运算符实现这2道题

第一题

//&& ||实现

var add_level = (add_step==5 && 1) || (add_step==10 && 2) || (add_step==12 && 3) || (add_step==15 && 4) || 0;

//更优雅的方式

var add_level={'5':1,'10':2,'12':3,'15':4}[add_step] || 0;

//此方法还看不太懂,希望前辈看到给我分析下。

第二题

var add_level = (add_step>12 && 4) || (add_step>10 && 3) || (add_step>5 && 2) || (add_step>0 && 1) || 0;

首先我们来梳理一下一个概念,请你一定要记住:在js逻辑运算中,0、""、null、false、undefined、NaN都会判为false,其他都为true(好像没有遗漏了吧,请各位确认下)。这个一定要记住,不然应用||和&&就会出现问题。

这里顺便提下:经常有人问我,看到很多代码if(!!attr),为什么不直接写if(attr);

其实这是一种更严谨的写法:

下面测试了 typeof 5和typeof !!5的区别。!!的作用是把一个其他类型的变量转成的bool类型。

typeof 5

"number"

typeof !!5

"boolean"

下面主要讨论下逻辑运算符&&和||。

几乎所有语言中||和&&都遵循“短路”原理,如&&中第一个表达式为假就不会去处理第二个表达式,而||正好相反。

js也遵循上述原则。但是比较有意思的是它们返回的值。

下面是在AngularJS中根据角色加载子模板的例子

如果user.admin为true,则会去跑第二个表达式edit.admin.html,并且返回值为第二个表达式,edit.admin.html

如果user.admin为false,则user.admin&&'edit.admin.html'表达式为false,回去跑||后面的第三个表达式,第三个表达式为true,结果为第三个表达式的值。

再看简单点的

var attr = true && 4 &&“aaa”;

结果是attr= aaa

再来看看||:

var attr = attr || “”;

这个运算经常用来判断一个变量是否已定义,如果没有定义就给他一个初始值,这在给函数的参数定义一个默认值的时候比较有用。再次提醒你记住上面的原则:如果实参需要是0、""、null、false、undefined、NaN的时候也会当false来处理。

if(a >=5){

alert("你好");

}

//可以改写成

a >= 5 && alert("你好");

这样只需一行代码就搞定。但是需要注意的一点:js中||和&&的特性帮我们精简了代码的同时,也带来了代码可读性的降低。这就需要我们自己来权衡了。

一方面精简js代码,能实质性的减少网络流量,尤其是大量应用的js公用库。个人比较推荐的做法是:如果是相对复杂的应用,请适当地写一些注释。这个和正在表达式一样,能够精简代码,但是可读性会降低,对读代码的人要求会高些,最好的办法就是写注释。

我们可以不使用这些技巧,但是我们一定要能看懂,因为这些技巧已经广泛应用,尤其是像JQuery等js框里的代码,不理解这些你就很难看懂别人的代码。

var Yahoo = Yahoo || {};

这种是非常广泛应用的。

ok,最后让我们来看一段jQuery中的代码吧:

var wrap =

//option or optgroup

!tags.indexOf("", "" ] ||

!tags.indexOf("", "" ] ||tags.match(/^", "" ] ||

!tags.indexOf("

", "" ] ||

// matched above

(!tags.indexOf("

", "" ] ||

!tags.indexOf("

", "" ] ||

//IE can't serialize and

!jQuery.support.htmlSerialize &&[1, "div

", "

" ] ||[0, "", ""];//Go to html and back, then peel off extra wrappers

div.innerHTML = wrap[1] + elem + wrap[2];//Move to the right depth

while ( wrap[0]--)

div= div.lastChild;

这段代码是作者用来处理 $(html) 时,有些标签必须要约束的,如必须在之内的。

可能你也发现了作者还有一个很巧的地方就是 !tags.indexOf("

后半部内容转载自http://www.cnblogs.com/ppforever/p/4375996.html

js三目运算符判断_js中三目运算符和 || 符的个人浅见相关推荐

  1. js三目运算符判断_JS中三目运算符和if else的区别分析与示例

    今天写了一个图片轮播的小demo,用到了判断 先试了一下if else,代码如下: if(n >= count-1){ n =0; }else{ n ++; } 随后代码写完了,准备优化一下代码 ...

  2. python三目运算符判断大小_Python——三目运算符

    一.三目运算符 1.if语句三目运算符语法格式 Python可以通过if'语句来实现三目运算符的功能,因此可以把这种if语句当做三目运算符,具体语法格式如下: 返回True执行 if 表达式 else ...

  3. 快速了解4种阻止事件冒泡的方法(原生js阻止,vue中使用修饰符阻止)

    阻止事件冒泡的方法 前端结构 <div id="app"><div class="father-box" @click="click ...

  4. js 实现 判断字符串中的手机号以及替换成****

    <script type="text/javascript"> var str = "dads18454239952e";var regExp = ...

  5. continue语句只用于循环语句中_Java之循环语句、条件判断语句(三目运算符)、break、continue...

    之前的内容只是让读者可以定义变量,输出变量等基础功能而已.这远远是不够的,今天,我们学习的内容可以帮你开始完善自己想开发的内容,在这之前我们先理解一个概念:一个表达式的返回值是布尔值的表达式称为布尔 ...

  6. js中三目运算符优化

    js中三目运算符优化 let typeofa = 2 let result = typeofa === 1 ? '值1' : typeofa=== 2 ? '值2' :'值3' console.log ...

  7. c语言三目运算错误,c语言中三目运算符有什么用

    三目运算符又称:三元运算符.条件运算符,用于根据二元条件的结果执行代码,可以有效的减少行代码的数量并提高应用程序的性能. c语言中三目运算符 三目运算符具有以下形式:表达1?表达2:表达3 说明:表达 ...

  8. Ifvisible.js – 判断网页中的用户是闲置还是活动状态

    ifvisible.js 是一个跨浏览器.轻量级的方式,用户检查用户在浏览页面或正在与它进行交互.它可以处理活动状态,如在页面上空闲或活跃.您还可以使用 ifvisible.js 智能设置您的间隔,如 ...

  9. js如何判断是否在iframe中及防止网页被别站用 iframe嵌套 (Load denied by X-Frame-Options)...

    1. js如何判断是否在iframe中 //方式一 if (self.frameElement && self.frameElement.tagName == "IFRAME ...

最新文章

  1. 软件项目经理新手上路9 - 谁是你的敌人?
  2. 【UOJ#388】【UNR#3】配对树(线段树,dsu on tree)
  3. C#自定义异常 统一异常处理
  4. Java反编译Jar包和Android APK(类似.NET Reflector)
  5. 京东受冤但不屈,售后服务隐现断崖危机
  6. python3列表_Python3列表
  7. 接口测试之基础篇--http协议
  8. 《c语言从入门到精通》看书笔记——第12章 位运算
  9. Vivado工程路径太长导致不能生成bit文件
  10. TIA博途软件中安装鼎实GSD文件的方法
  11. CRLF、CR、LF详解
  12. Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(2):开发环境及相关的使用技巧
  13. win10修改git账号和密码
  14. 深度相机原理揭秘--双目立体视觉
  15. excel poi 实现图片导出
  16. 超声波传感器(CHx01) 学习笔记 Ⅵ - 原始数据
  17. 微信集成(帆软报表)
  18. 程序员可迁移技能的培养
  19. 邮箱大师支持html,网易邮箱大师pc版
  20. h5+js+ajax+百度翻译API:实现翻译功能

热门文章

  1. 如何报前台和后台的bug?
  2. python取整求余
  3. python sum函数导入list_sum求和函数怎么在Python中使用
  4. 图像质量的客观评估指标PSNR与SSIM
  5. 【深度学习】 自编码器(AutoEncoder)
  6. 倒立摆_DQN算法_边做边学深度强化学习:PyTorch程序设计实践(5)
  7. MAC端 微信同时登录多个账号
  8. XStream解析XML
  9. 关于逆元(费马小定理,exgcd)
  10. 制作缩略图、远程缩略图