在JScript中运算符"||"和"&&"的特殊特性
2007-05-05 15:15
357 查看
在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是否也是这样支持的?如果您方便的话,请告如我运行后的结果
。
。按我们对逻辑运算的正常认识,逻辑运算的结果因该是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是否也是这样支持的?如果您方便的话,请告如我运行后的结果
。
相关文章推荐
- 利用JScript中运算符"||"和"&&"的特殊特性实现代码精简第1/2页
- 在JScript中运算符"||"和"&&"的特殊特性
- 利用JScript中运算符"||"和"&&"的特殊特性实现代码精简第1/2页
- C#中一个不常用的特殊运算符——"??"
- 在JScript中运算符"||"和"&&"的特殊特性
- xml 转义特殊字符 如&'"(转载)
- 预处理命令“ # 运算符”和“ ## 运算符” "#@"运算符
- ASP.NET 4.0的七大新特性之"控件的ClientIDMode"
- C/C++, ","逗号运算符, 基本类型数据的初始化声明
- objective-C中没有"接口"与"泛型"这样的说法,但有正式协议protocal 和 一种特殊的指针id类型
- 成员指针和成员指针逆向引用运算符".*"
- JUnit4之隐藏特性"曝光"
- c 语言 ","号运算符的用法
- CSIDL与打开"我的电脑"等特殊文件夹
- PHP之抑或运算符---"^"
- 特殊服务的"注册表入口"
- HTML5新特性之智能表单: required="required"指示输入字段的值是必需的
- php合并数组["+"运算符],marray_merge,marray_merge_recursive的区别
- JScript中的undefined和"undefined"
- C#4.0新特性-"协变"“.NET研究”与"逆变"以及背后的编程思想