这段代码 难道不是返回布尔值类型?
因为 我记得我看JS书的时候 在进行bool计算的 任何对象都会转出bool类型
document.head 会被转换 Boolean(document.head) 应该返回bool值才对啊
还望大神给解释下!
A || B: 一般用于如果A的bool值为true,那么结果取A的值,否则取B的值。
是为了防止获取A的值失败,而给的默认值。
var attr = attr || '';这个运算经常用来判断一个变量是否已定义,如果没有定义就给他一个初始值,这在给函数的参数定义一个默认值的时候比较有用。
在JS里面不一样,你这句话的意思是如果“document.head”不为空,就讲document.head赋值给head,如果空就是将后面的赋值给head。
换个简单例子:
var aa=null;
var b=aa||{};
经常通过这样的方式防止变量aa为空(数组是“||[]”),如果作为判断条件是true。
如果是if(document.head){alert( '1');}else{alert('2');},这种进行bool判断的时候是作为bool返回
head节点元素内部也是一些节点啊,应该是对象的集合。也是对象。
&& 和 || 操作的返回值都不是布尔值。
A || B,A 为 true 的时候返回 A,否则返回 B
A && B,A 为 true 的时候返回 B,否则返回 A
由&& 或者||运算符产生的值不是必须为Boolean类型,产生的值始终为两个运算表达式的结果之一。
产生式 LogicalANDExpression : LogicalANDExpression && BitwiseORExpression 按照下面的过程执行 :
产生式 LogicalORExpression : LogicalORExpression || LogicalANDExpression 按照下面的过程执行 :
第一个说的就行,看看他的就懂了
你既然知道 || 的用法,那么就知道 如果得到 || 后面的值,说明 前面的为false。那么在js 里 什么时候为true呢?
1、布尔变量true
2、数字非0,非NaN/ (0 或NaN)
3、对象非null/(null或undefined)
4、字符串非空串(“”)/空串("")
在js中,当逻辑或(||)操作的两个操作数中有一个不是布尔值,那么逻辑非就不一定返回布尔值。
在你的例子中,由于document.head是一个对象,它转换为布尔值的结果是true,所有返回第一个操作数
js 弱语言,
||表示前面的如果断言不过,会取后者
后者不是null、0、false这些都可以算是true,就看你下一步怎么去用这个值了
如果只只为了去判断head这个结果是true或者false,直接if(head)就可以,如果你要使用这个值,它就直接返回给你了
不知道你理解了没有?js就是这么随意