&&的优先级比||的优先级高ui
tip1:逻辑与操做能够应用于任何类型的操做数,在有一个操做数不是布尔值时,不必定返回Boolean值,大概的规则以下:code
一、第一个操做数是对象,则返回第二个操做数;对象
二、第二个操做数为对象时,则只有在第一个操做数的求值结果为true时才返回该对象ip
三、若是两个操做数都是对象,则返回第二个操做数;console
四、第一个操做数为null时,则返回null;co
五、第一个操做数为NaN时,则返回NaN;undefined
六、第一个操做数为undefined时,则返回undefined;
tip:若是第一个操做数求值结果为false,后面的操做数都不会去判断执行,无论第二个操做数为何值,最终结果都不会是true
tip:返回第二个操做数(大多数状况下)
见代码,大概举一个例子验证下:
var obj={ "name":"zhan", "age":25 } var obj1={ "name":"hui", "age":25 } var boolean_0=false; var boolean_1=true; var null_=null; var isNan=NaN; var str='zhan' var undefined_=undefined; var num_0=0; var num_1=1; console.log(obj&&boolean_1)//true console.log(obj&&boolean_0)//false console.log(obj&&null_)//null console.log(obj&&isNan)//NaN console.log(obj&&str)//'zhan' console.log(obj&&undefined_)//undefined console.log(obj&&obj1)//obj1 console.log(obj&&num_0)//0 console.log(obj&&num_1)//1 console.log(null_&&num_1)//null console.log(isNan&&num_1)//NaN console.log(undefined_&&num_1)//undefined
tip:返回第一个操做数(大多数状况下) 一、第一个操做数为对象,则返回第一个操做数;
二、第一个操做数的求值结果为false,则返回第二个操做数;
三、两个都是对象,则返回第一个操做数;
四、两个操做数都是null,则返回null;
五、两个操做数都是NaN,则返回NaN;
六、两个操做数都是undefined,则返回undefined;
见例子:
console.log(obj||boolean_1)//obj console.log(obj||boolean_0)//obj console.log(obj||null_)//obj console.log(obj||isNan)//obj console.log(obj||str)//obj console.log(obj||undefined_)//obj console.log(obj||obj1)//obj console.log(obj||num_0)//obj console.log(obj||num_1)//obj console.log(null_||null_)//null console.log(isNan||isNan)//NaN console.log(undefined_||undefined_)//undefined