真实项目中学习到的知识点二
项目中学习到的知识点二
~~是什么?它可以用来做什么呢?
在看项目代码时,看到了一个符号~~,这个符号我又没有见过😶。于是我就问我老大这个符号是啥意思?于是他给我列了一些代码例子。
console.log(~~3.14); // 3
console.log(~~-3.14); // -3
console.log(~~5); // 5
console.log(~~-5); // -5
console.log(~~'123'); // 123
console.log(~~'abc'); // 0
看到这个我想到的就是这个不就是将字符串或者数字转换成整型吗?用Number或者paseInt不是也可以吗?
Number
console.log(Number('123')); // 123
console.log(Number('abc')); // NaN
console.log(Number('123abc')); // NaN
PasInt
console.log(parseInt('123')); // 123
console.log(parseInt('3.14')); // 3
console.log(parseInt('10', 2)); // 2 (将二进制字符串'10'转换为十进制)
console.log(parseInt('0xFF', 16)); // 255 (将十六进制字符串'0xFF'转换为十进制)
console.log(parseInt('abc')); // NaN
console.log(parseInt('')); // NaN
看这些代码好像是没啥问题,但是我们再看看下面的代码
console.log(~~'abc'); // 0
console.log(Number('abc')); // NaN
console.log(parseInt('abc')); // NaN
console.log(~~undefined); // 0
console.log(~~null); // 0
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
console.log(parseInt(null)); // NaN
console.log(parseInt(undefined)); // NaN
我们可以看到Number和pasInt都无法对字符串
和undefined
进行数字转换,得到的是NaN。并且paseInt对null转换得到也是NaN。
NaN是JavaScript中的一个特殊值,代表"Not a Number"(不是一个数字)。当进行某些操作时,如果结果无法表示为有效的数字,就会得到NaN。NaN是一个特殊的值,表示无效的或未定义的数值。在进行数学计算时,如果得到了NaN,通常意味着某些操作无法得到有效的结果。在实际开发中,需要注意避免产生NaN,以确保数值的正确性和可靠性。所以一般我们使用某些不确定值转换成正整数,为了确保不是NaN,建议使用~~
。
总结
1. ~~
是JavaScript中的一种位运算符,称为"按位非"运算符。
它的作用是将操作数转换为32位有符号整数,并去除小数部分。具体来说,~~x
将对x
进行以下操作:
- 将
x
转换为32位有符号整数。 - 去除整数部分之后的小数部分。
这个操作的结果是一个整数,如果x
是正数,则结果等于Math.floor(x)
,如果x
是负数,则结果等于Math.ceil(x)
除了~~
转换成整数,还有一些其他的方法,不过都会得到NaN。
2. Number()
函数:
使用Number()
函数可以将其他类型的值转换为数字。它可以处理字符串、布尔值、null和undefined等类型,并返回相应的数字。例如:Number("123")
将返回数字123。
3. parseInt()
函数:
parseInt()
函数可以将字符串解析为整数。它会从字符串的开头开始解析,直到遇到非数字字符为止。例如:parseInt("123")
将返回整数123。
4. parseFloat()
函数:
parseFloat()
函数用于将字符串解析为浮点数。类似于parseInt()
,它会从字符串的开头开始解析,直到遇到非数字字符为止。例如:parseFloat("3.14")
将返回浮点数3.14。
5. +
运算符:
使用+
运算符可以将字符串转换为数字。但是,如果字符串包含非数字字符,则会返回NaN(非数字)。例如:+"123"
将返回数字123。
6. Math.floor()
、Math.ceil()
和Math.round()
函数:这些函数可以将浮点数或其他类型的值(如字符串)转换为最接近的整数。例如:Math.floor(3.14)
将返回整数3。
转载自:https://juejin.cn/post/7251119596362874936