利用JScript中运算符"||"和"&&"的特殊特性实现代码精简


在JScript的众多运算符里,提供了三个逻辑运算符&&||!,噢?! 是高级语言都提供的。按我们对逻辑运算的正常认识,逻辑运算的结果因该是ture或者false。但是JScript的逻辑运算却不完全是这么定义的,这里只有!运算符总是返回true|false,而||和&&运算比较的好玩。

JScript对于逻辑运算的true|false是这么定义的:

  • 所有对象都被认为是 true。
  • 字符串当且仅当为空(""或'')时才被认为是 false。
  • null 和未定义的均被认为是 false。
  • 数字当且仅当为 0 时才是 false。

可是逻辑运算符||&&虽然遵循上面的定义规则,但是它们返回的值却很有意思。
对于&&运算,按照上面的规则,表达式 if ( 'abc' && '123' && new Date() ) 是执行true分支,可是这个表达式如果写成:

var value = 'abc' && '123' && new Date();

结果value=Fri Jan 21 00:01:17 UTC+0800 2005,原它从左到右检测,如果到了最后一个表达式也是为true的,就返回那个表达式。

对于||运算同理,对于下面的表达式:

var value1 = 'abc' || '123' || null || false;
var value2 = null || '' || false || 'ok';

结果value1='abc',value2='ok'。这是因为||运算会有"短路"特性,他也是从左向右检测,只不过它是一但发现有为true的值,就立即返回该表达式。
这样的特性可以帮组我们写出精简的代码,可是同时也带来代码不便于阅读维护的问题。
由于我手头暂时没有NS和moz什么的浏览器,不知道标准JavaScript是否也是这样支持的?如果您方便的话,请告如我运行后的结果。



相关阅读:
高手总结CSS书写技巧
正则应用之 日期正则表达式
asp经常被忽视的一种死循环
ASP.Net2.0 GridView 多列排序,显示排序图标,分页
如何使用JSP访问MySQL数据库
SQLServer 数据库故障修复顶级技巧之一
标题长度溢出时,自动显示为省略“...”的Css text-overflow
用msinfo32命令查看Windows7后台运行的程序
Firefox下英文字母不换行的解决方案
生成ubuntu自动切换壁纸xml文件的php代码
源码学习:一个简单的日历控件(10)
SQL优化基础 使用索引(一个小例子)
简单查看linux64位/32位的命令!
ASP.NET网站程序预防SQL注入式攻击策略
快速导航

Copyright © 2016 phpStudy |