位操作符
ECMAScript 中所有的数值都以IEEE-754 64位的格式存储, 但并不是直接操作64位的值, 而是先将64位的值转换为32位的整数, 然后执行操作, 最后再将结果转换回64位。
- 按位非 是由一个波浪线 ~ 来表示, 执行按位非就是返回数值的反码。
var num1 = 25;
var num2 = ~num1;
console.log(num2); // -26
其结果与以下操作返回的结果相同:
var n = 25;
var n2 = -n -1;
console.log(n2);
2, 按位与 (AND)
按位与操作符有一个 & 表示, 他有两个操作数, 从本质上讲, 按位与操作符 就是将两个数值的每一位对齐, 然后按照一定的规则, 对相同位置上的两个数执行 AND 操作
第一个数值的位 | 第二个数值的位 | 结果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 0 | 0 |
0 | 0 | 0 |
很容易看出, 只有两个数值的位都为1结果才为 1 , 只要有一个为0 结果就是0
// 按位与
var result = 25 & 3;
console.log(result); // 1
3 。 按位或(OR)
按位或操作符由一个 | 表示, 同样有两个操作数, 其遵循以下真值表。
第一个数值的位 | 第二个数值的位 | 结果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
由此可见, 按位或操作符在有一个位是1 的情况下就返回1, 而只有两个位都是0 的情况下才返回0
var result1 = 25 |3;
console.log(result1) // 27
按位异或(XOR)
按位异或操作符由一个插入符号(^)来表示, 也有两个操作数。
第一个操作数 | 第二个操作数 | 结果 |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
按位异或与按位或的不同之处在于, 这个操作数在两个数值对应位上只有一个1时才返回1, 如果对应的两位都是1 或都是0, 则返回0.
// 按位异或
var result2= 25 ^ 3;
console.log(result2); // 26
布尔操作符
布尔操作符一共有三个, 非(NOT)。 与(AND) 。 或(OR)
- 逻辑非
逻辑非由一个叹号!表示, 可以应用于ECMAScript中 的任何数值, 无论这个数值是什么类型, 这个操作符都会返回一个布尔值。 逻辑非操作符首先会将它的操作数转换为一个布尔值, 然后在对其求反,也就是说,
如果操作数是一个对象, 返回false
如果操作数是一个空字符串 , 返回true
如果操作数是一个非空字符串 ,返回false
如果操作数是0, 返回true,
如果操作数是任意非0数值, 返回false
如果操作数是0, 返回true,
如果操作数是null, 返回true,
如果操作数是undefined, 返回true,
如果操作数是NaN, 返回true,
//布尔操作符
console.log(!false); // true
console.log(!"") // true
console.log(!"34324"); // false
console.log(!NaN); // true
console.log(!"bule"); // false
注意, 同时使用两个逻辑非操作符会将一个值转换为对应的布尔值, 其作用和Boolean函数类似。
//布尔操作符
console.log(!!false); // false
console.log(!!"") // false
console.log(!!"34324"); // true
console.log(!!NaN); // false
console.log(!!"bule"); // true
2 逻辑与
逻辑与操作符由两个和号, && 表示,
第一个操作数 | 第二个操作数 | 结果 |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
3 .逻辑或
逻辑或操作符由两个 || 表示,
第一个操作数 | 第二个操作数 | 结果 |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
有一点没说的是, 逻辑或操作符(||) 与 逻辑与操作符一样, 都属于短路操作符,
也就是说如果 判定的第一个布尔值可以决定结果的话, 就不会继续向下判断。
// 逻辑或
var a = true;
var res = (a || someUndefinedVariable);
console.log(res);
结果是 true, 从上例可以看出, 如果第一个操作数 a 的布尔值为true的话, 就可以直接判定 整个逻辑获表达式的结果 了。
乘性操作符 加性操作符
// 加性操作符
var c = 5;
var d = 10;
var message = "the sum of 5 and 10 is " + c +d ;
console.log(message); // the sum of 5 and 10 is 510
这里有一点需要注意, 就是如果要在字符串中使用加法运算, 需要加上括号。
var message = "the sum of 5 and 10 is " +( c +d );
还有关系操作符, 相等操作符 , 这里就不细讲了, 因为比较简单, 主要在于非数值的比较上, 如果遇到了再去查吧, 多查几次就能记住了 。
条件操作符
variable = boolean_expression ? true_value :false_value
对上述命令的解释:
var max = (a > b) ? a : b;
显然, 输入a, b 的值, 容易得出结果 。