1.n进制(2-16)转十进制
var a = '0xa' 里面填n进制数字例如0xa
parseInt(a,16) // 10 第一个填要转的数,第二个填进制
2.十进制转n进制
var a = '' 里面填一个十进制数
a.toString(n) 2-16进制 转哪个填那个

算术运算符中
按位左移(<<) ..<<.. 将第一个操作数的所有二进制位向左移动指定位数
例:10<<1 1010(10的二进制数)向左移位变成10100 结果是20
按位右移(>>) ..>>.. 将第一个操作数的所有二进制位向右移动指定位数
正数左边的最高位补0,负数补1
10>>1 1010 变成 101 结果是5
无符号右移(>>>) ..>>>.. 与>>运算符操作相同,只是左边的最高位无论正负都补0

按位与(&) 两个操作数对应的二进制位都是1才返回1,其他返回0
11=>1 10=>0 01=>0 00=>0
按位异或(^) 两个操作数对应的二进制位只有一个是1的才返回1,都是0或者都是1都返回0
11=>0 10=>1 01=>1 00=>0
按位或(|) 两个操作数对应的二进制位有一个是1就返回1,只有都是0才返回0
11=>1 10=>1 01=>1 00=>0
非(~) +1取负 ~5 = -6

true和false在js中如何转换。

undefined -> false
null -> false
数值 +0,-0,NaN -> false 其他为true
字符串 长度为0空字符串为false 其他为true
对象 全部为true

相等运算符 (==和===)

null == undefined (true)
undefined == null (true)
数 == 字符串 (数 == toNumber(字符串))
字符串 == 数 (toNumber(字符串) == 数)
布尔值 == 任何类型 (toNumber(布尔值) == 任何类型)
任何类型 == 布尔值 (任何类型 == toNumber(布尔值))
字符串或数 == 对象 (x == toPrimitive(对象))
对象 == 字符串或数 (toPrimitive(对象) == x)

toNumber和toPrimitive方法是内部的

toNumber()对不同类型返回的结果

toNumber(undefined) ->NaN
toNumber(null) -> +0
toNumber(布尔值) -> true为1,false为0
toNumber(字符串) -> 对应的值

toPrimitive()

如果对象的valueOf方法的结果是原始值,返回原始值;如果对象的toString方法返回原始值,就返回这个值,其他情况都返回一个错误。
原始数据类型包括null,undefined,字符串,数,布尔值和Symbol

跟布尔值比较的时候布尔值永远先转为数值类型