zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

amp代码 实现 利用 特性 运算符 quot 特殊
2023-06-13 09:13:54 时间
在JScript的众多运算符里,提供了三个逻辑运算符&&||!,噢?!是高级语言都提供的。按我们对逻辑运算的正常认识,逻辑运算的结果因该是ture或者false。但是JScript的逻辑运算却不完全是这么定义的,这里只有!运算符总是返回true|false,而||和&&运算比较的好玩。

   JScript对于逻辑运算的true|false是这么定义的:
  • 所有对象都被认为是true。
  • 字符串当且仅当为空(""或"")时才被认为是false。
  • null和未定义的均被认为是false。
  • 数字当且仅当为0时才是false。
  •    可是逻辑运算符||&&虽然遵循上面的定义规则,但是它们返回的值却很有意思。
       对于&&运算,按照上面的规则,表达式if("abc"&&"123"&&newDate())是执行true分支,可是这个表达式如果写成:

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

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

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

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

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

    JScript中,这些逻辑运算都是判断一个表达式是否为"有意义的" 

    例如 0,"",null,false,undefined,NaN..等都是无意义的.. 

    && 会返回 true 或 false 
    而 a||b 则是, 如果a是有意义的,则返回a,否则返回b 

    所以有时候,我不这样写代码: 
    var obj=QuerySomeObject(); 
    if(obj==null)return null; 
    return obj.Property; 

    我会写成 
    return (QuerySomeObj()||{}).Property; 
    另外要注意 null 与 false 的比较. 
    0 "" 等与 false 进行==比较时都是相等的. 

    但是 null 则不同了. 例如 

    if(!null) 

    alert(1); 

    if(null==false) 

    alert(2); 

    在Firefox测试过,结果是一样的!