缘起
一直以来,我都想写点偏的,但是能应用在实践中的js知识,今天终于有点时间造福大家了,请耐心阅读!
知识点总结
- ~
- |
- parseInt
- ‘2,3’ == [2, 3]
~
~这个也叫做补位符号,也就是把二进制进行补位的,大家知道计算机底层是二进制的吧,说白了就是十进制和二进制按照一定规则互相转换罢了:
- 第 1 步:把运算数转换为 32 位的二进制整数。
- 第 2 步:逐位进行取反操作。
- 第 3 步:把二进制反码转换为十进制浮点数。
上面的方法可能有点复杂,说白了就是十进制取反减一,看看实例:
~-1 是0
~1 是 -2
上面这些大家可能觉得有点空泛,那么给大家个实际应用场景,其实场景很多,看大家是不是思考
~stringObject.indexOf(searchvalue,fromindex)
if(~'abc'. indexOf('a')) // true
if(~'abc'. indexOf('ae)) //false
上面的例子就是用于indexOf判断,和if结合使用,第二个例子就是取整
~~2 //2
~~1.6 //1
~~-1.6 //-1
|
|这个是位运算符,我们称之为位或,这里直接说个应用,取整
6 | 0 //6
6.6 | 0 //6
-6.6 | 0 -6
取整的方法是不是又多了一种,哈哈哈
parseInt
今天是parseInt有点野,上面已经有2种方法取整了,今天来个扩展,先看w3c的介绍
// parseInt(string, radix)
@ string 必须。要被解析的字符串。
@ radix 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
接下来看题,哈哈
parseInt('j1', 20) //381
parseInt( "0x101"); //257
parseInt( "115", 2 ); //3
下面小编为大家一一解析:
parseInt(‘j1’, 20) 中j在a-z中排位10,0-9有10个数字,按照顺序0-9a-z,代表10进制,那么j其实就是数字19,我们看radix,radix是20正好不超出19(因为0-19)包含0,最后的值就是19*20+1=381,也就是说
radix范围是0-9和a-z的个数之和 ,即36
parseInt('j1', 19) //NaN
parseInt('j1', 21) // 21 *19 + 1 = 400
parseInt('j1', 36)// 36*19 + 1 = 685
parseInt('j1', 37) // NaN
parseInt('j1', 2) //NaN 因为radix必须大于j,即大于19
下面我们来解释parseInt( “0x101”),这个其实0x开头的是16进制,也就是转换后就是parseInt( “101”, 16),也就是16161+0*16+1 = 257
parseInt('jj1', 20) //20*20*19+20*19+1=7981
最后我们来看parseInt( “115”, 2 ),这个其实是string先进行了一次转换,115在二进制中只解析前面的11,也就是parseInt( “11”, 2 ),那么结果就是2*1+1=3
···
parseInt( “151”, 2 ) //1
parseInt( “1115”, 2 ) //7
···
‘2,3’ == [2, 3]
这个就涉及到隐式转换了,==左右会发生转换,[2,3]正好转成字符串,所以相等了,这里主要是判断条件避坑
尾声
美好的时光总是短暂的,今天的小知识科普就到这里,我们下次见!