今天在看Extjs源码的时候,看到以下几句话(config是json字符串)config = config || {};if(config.tagName || config.dom || Ext.isString(config)){ // element object
        config = {applyTo: config, id: config.id || config};
}个人对||运算符的理解是只要符号两边的操作数返回的是真就返回真,是假就返回假。但是看到这里对2个json字符串,或者是几个string对象做||的操作,不知道是什么意思,请各位指教

解决方案 »

  1.   

    || 是 或  任意为true就是true
    一个string为null就是false 否则为true
      

  2.   

    config = config || {};=>if(!config) {
       config = {};
    }
      

  3.   

    楼上的例子可以这样理解
    我的理解是,返回第一个返回值为true的对象,如果都为false,则返回最后一个对象
      

  4.   


    修改下if(config) {
       config = config;
    } else {
       config = {};
    }这样是为了 如果后面的短路不是同一值,导致误解~~~。比如
    name = input || "JeeChang";=>if(input) {
      name = input;
    } else  {
      name = "JeeChang";
    }
      

  5.   

    重要的是 &&  和 || 的特性||  第一个为真,就直接返回真。不会判断后面的条件
    &&  第一个为假,就直接返回假。不会判断后面的条件这样写,代码少(页面加载就快)。性能高
      

  6.   

    如果第一个操作数是 boolean 类型,而且值为 true, 那么,直接返回 true;
    如果第一个操作数是 Boolean 类型,而且值为 false ,第二个操作数为 object,那么返回 object 对象;
    如果两个操作数都是 object 类型,那么返回第一个对象;
    如果两个操作数都是 null,那么,返回 null;
    如果两个操作数都是 NaN,那么返回 NaN;
    如果两个操作数都是 undefined,那么,返回 undefined。
      

  7.   

    如果是这样子的代码:
    config = config || null || {}
    写成如下是否是对的if(config)
    {
        config = config;
    }
    else if(null)
    {
        config = null;
    }
    else
    {
        config = {};
    }
    就是说,如果在对一个变量的赋值中用到||的符号,就会从左到右依次根据||中的条件是否为空判断,如果非空则将变量值赋值为该条件返回的值,如果为空就跳到其右边的条件继续进行判断。如果所有的条件都为空,则给变量赋值为最右边条件返回的值。
    不知道我理解的对不对?
      

  8.   

    else if(null)
    {
        config = null;
    }
    这是个假命题~~~!
    怎么说呢 你对||的理解没问题了
    但是对||的计算有问题
    ||是true和false的计算
    你的null就是隐式=>false 所以永远不成立 对吧
      

  9.   


    如果 config =  a || b || c;变量a,b,c都等于null的话呢,config = 什么?
      

  10.   

    A || B
    如果 if(A)能通过 则返回 A 否则 返回Balert(null || false);
      

  11.   

    以上回答很多不正确,应该是这样子的,A=A||{};表示的是如果A是不能转化为真的值,则A的赋值为空的数组,否则返回A(不管A是不是真假),注意,A最后的结果不一定是真假。
      

  12.   

    重温了javascript高级程序设计,书上是这样写的 :
    逻辑Or运算符(||)中,如果某个运算数不是Boolean值,逻辑OR运算不一定返回Boolean值:
    >如果一个运算数是对象,另一个是Boolean值,返回该对象。
    >如果两个数都是对象,返回第一个对象。
    >如果某个运算数是null,返回null。
    >如果某个运算数是NaN,返回NaN。
    >如果某个运算数是undefined,发生错误。
      

  13.   

    等价于: 
    config = config  ? config : {}