位操作符( | 和 & )
var number = 2;
var logic = number < 5 | number > 0;
console.log(number < 5); // 结果返回 true
console.log(logic); // 结果返回 1
结果并没有返回 布尔值,而是数值。
var logic = true | true;
console.log(logic); //结果返回 1
可以看到结果还是返回一个数值,也就是说JavaScript
位操作符只有一个功能:进行位运算。
如果使用位操作符去操作非数值:
/* 测试类型1 */
var str1 = '9';
var str2 = '5';
console.log(str1 & str2); // 结果为 1
console.log(typeof (str1 & str2)); //结果为 number 类型
/* 测试类型2 */
var number1 = 9;
var number2 = 5;
console.log(number1 & number2); 结果为 1
/* 测试类型3 */
var obj1 = {
valueOf: function() {
return 9;
}
}
var obj2 = {
valueOf: function() {
return 5;
}
}
console.log(obj1 & obj2); // 结果为 1
如果操作数不是数值类型,就会根据一定规则把它转换成数值,若不能转化成数值则为NaN。
如果是NaN或者正负无穷:
console.log(NaN & NaN); // 结果为 0
console.log('stirng' & 'string'); // 字符串转换为NaN,结果为 0
console.log(10 & NaN); // 10 & 0,结果为 0
console.log(-Infinity & -Infinity); // 结果为 0
因此有:
- JS中位操作符只能当做数值进行位运算,若操作数为非数值,则转换为数值
- 若操作number类型的 NaN、-Infinity、Infinity 则会被转换会数值 0
逻辑操作符(||和&&)
JavaScript中逻辑操作符可以操作 ECMAScript中的任何值 ,同时也不强制返回boolean类型。
-
逻辑或(||)
-
只要第一个值的布尔值为false,那么永远返回第二个值,不管第二个值的布尔值是true还是false
console.log(0 || '我是string,boolean值为true'); // 返回字符串 console.log(NaN || '我是string,boolean值为true'); // 返回字符串 console.log('' || '我是string,boolean值为true'); // 返回字符串 console.log(null || '我是string,boolean值为true'); // 返回字符串 console.log(undefined || '我是string,boolean值为true'); // 返回字符串 console.log(0 || 'NaN'); // 返回 NaN console.log(NaN || ''); // 返回 '' 空字符串 console.log('' || null); // 返回 null console.log(null || 'undefined'); // 返回 undefined console.log(undefined || 0); // 返回 0
-
属于短路操作,第一个值为true时,不再操作第二个值,且返回第一个值
var obj = {}; console.log(obj || NaN); // 返回 obj console.log(obj || number); // 返回 obj,未定义变量不会报错 console.log( 0 || number); // 报错,number未定义
-
-
逻辑与(&&)
-
只要第一个值的布尔值为true,那么永远返回第二个值
var obj = {}; var str = 'Riny'; /* 当第一个值的布尔值为true 返回第二个值 */ console.log(obj && 0); // 返回 0 console.log(obj && NaN); // 返回 NaN console.log(obj && ''); // 返回 '' 空字符串 console.log(obj && undefined); // 返回 undefined console.log(obj && null); // 返回 null /* 当第一个值的布尔值为true 返回第二个值 */ console.log(obj && str); // 返回 字符串
-
短路操作,第一个值为false时,不再操作第二个值,且返回第一个值
var obj = {}; console.log(0 && obj); // 返回 0 console.log(NaN && obj); // 返回 NaN console.log('' && obj); // 返回 '' 空字符串 console.log(null && obj); // 返回 null console.log(undefined && obj); // 返回 undefined // number 未定义 console.log(undefined && number); // 返回 undefined 不会报错
-
非非非常好记!!!