今天在看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对象做||的操作,不知道是什么意思,请各位指教
config = {applyTo: config, id: config.id || config};
}个人对||运算符的理解是只要符号两边的操作数返回的是真就返回真,是假就返回假。但是看到这里对2个json字符串,或者是几个string对象做||的操作,不知道是什么意思,请各位指教
一个string为null就是false 否则为true
config = {};
}
我的理解是,返回第一个返回值为true的对象,如果都为false,则返回最后一个对象
修改下if(config) {
config = config;
} else {
config = {};
}这样是为了 如果后面的短路不是同一值,导致误解~~~。比如
name = input || "JeeChang";=>if(input) {
name = input;
} else {
name = "JeeChang";
}
&& 第一个为假,就直接返回假。不会判断后面的条件这样写,代码少(页面加载就快)。性能高
如果第一个操作数是 Boolean 类型,而且值为 false ,第二个操作数为 object,那么返回 object 对象;
如果两个操作数都是 object 类型,那么返回第一个对象;
如果两个操作数都是 null,那么,返回 null;
如果两个操作数都是 NaN,那么返回 NaN;
如果两个操作数都是 undefined,那么,返回 undefined。
config = config || null || {}
写成如下是否是对的if(config)
{
config = config;
}
else if(null)
{
config = null;
}
else
{
config = {};
}
就是说,如果在对一个变量的赋值中用到||的符号,就会从左到右依次根据||中的条件是否为空判断,如果非空则将变量值赋值为该条件返回的值,如果为空就跳到其右边的条件继续进行判断。如果所有的条件都为空,则给变量赋值为最右边条件返回的值。
不知道我理解的对不对?
{
config = null;
}
这是个假命题~~~!
怎么说呢 你对||的理解没问题了
但是对||的计算有问题
||是true和false的计算
你的null就是隐式=>false 所以永远不成立 对吧
如果 config = a || b || c;变量a,b,c都等于null的话呢,config = 什么?
如果 if(A)能通过 则返回 A 否则 返回Balert(null || false);
逻辑Or运算符(||)中,如果某个运算数不是Boolean值,逻辑OR运算不一定返回Boolean值:
>如果一个运算数是对象,另一个是Boolean值,返回该对象。
>如果两个数都是对象,返回第一个对象。
>如果某个运算数是null,返回null。
>如果某个运算数是NaN,返回NaN。
>如果某个运算数是undefined,发生错误。
config = config ? config : {}