1. >> 按位右移运算符
result = expression1 >> expression2
右移表达式的位,保持符号不变。
>> 运算符将 expression1 的位右移 expression2 中指定的位数。 用 expression1 的符号位(1负0正)填充右移后左边空出来的位。 右移的位被丢弃。 例如,计算完下列代码后,temp的值为 -4:因为 -14(即二进制的 11110010)右移两位后等于 -4(即二进制的 11111100)。
补码计算 正数的补码为本身2进制表示,负数的补码为2进制码逐位取反后加1(符号位不变)
14的2进制码为 0000 1110,按位取反为01110001 ,加1为 0111 0010,则-14 为 1111 0010,右移两位,用符号位(1),补全左边 则为 11111100,
11111100对应的10进制换算 先减1,为 11111011,按位取反 10000100,即为-4
var inputValue = '4';
//0000 0100 -> 0000 0001
console.log(inputValue >> 2); //1 //1
var inputValue2 = -14;
console.log(inputValue2 >> 2) //-4
2. 常用比较、运算操作
var undefined;
undefined == null; // true
1 == true; // true
2 == true; // false
0 == false; // true
0 == ''; // true
NaN == NaN; // false
[] == false; // true
[] == ![]; // true
- undefined与null相等,但不恒等(===)
- 一个是number一个是string时,会尝试将string转换为number
- 尝试将boolean转换为number,0或1
- 尝试将Object转换成number或string,取决于另外一个对比量的类型
- 所以,对于0、空字符串的判断,建议使用 “===” 。“===”会先判断两边的值类型,类型不匹配时为false。
那么问题来了,看下面的代码,输出什么,foo的值为什么?
var foo = "11"+2-"1";
console.log(foo);
console.log(typeof foo);
执行完后foo的值为111,foo的类型为String