javascript中的数字也是按照IEEE754的标准存储的,按64位存储,但是操作符不会直接去操作64位,会将64位数转换成32位整数操作,完成运算后再转换成64位,这个64位对用户来说是透明的。
虽然经常写js,但是还是对一些按位运算比较迷茫。对于32位有符号整数,最高位为符号,正数最高位0,负数最高位1,负数按二进制补码存储。NaN和Inifinity在位操作中都被当成0对待
按位取反
0000 0000 0000 0000 0000 0000 0000 1010
=>
1111 1111 1111 1111 1111 1111 1111 0101 (负数)
=>
-0000 0000 0000 0000 0000 0000 0000 1011
对x取反相当于<=>-x-1
按位与&
按照1&1为1,其它都为0
按位或|
按照0|0为0,其它都为1
按位亦或^
按照0^0为1,1^1为1,其它都为0
左移<<
右边的空位用0补齐
右移>>
左边的空位正数用0补齐,负数用1补齐
无符号右移>>>
左边的空位用0补齐
typeof
typeof用来判断一个变量的类型。
typeof null => 'object'
typeof number => 'number'
typeof object => 'object'
typeof function => 'function'
typeof array => 'object'
typeof 正则表达式 => 老版本safari和chrome返回'function',其它情况返回'object'
注意:
console.log(a) // a未定义会报错
typeof a // a未定义,返回undefined