如何和+可以将字符串转换为数字的技巧吗?

时间:2018-11-05 03:17:28

标签: javascript

当我在MDN上阅读有关doc的符号时,我注意到这些东西会将字符串压缩成我从未见过的数字。

报价:

  

当尝试将符号转换为数字时,将出现TypeError   抛出(例如+ sym或sym | 0)。

例如:

+"15"

将返回

15

是数字类型。

"15" | 0

可以做同样的事情。

我想知道这个技巧是如何工作的。 你能帮忙吗?

2 个答案:

答案 0 :(得分:1)

+"15"正在将"15"转换为数字类型,与-15的工作方式相同。

例如

>> -"15" === -15
>> true

第二种情况,"15" | 0也在做同样的事情,为了执行Bitwise OR而强制转换为整数。

这意味着取15位并将它们与0位进行或运算。

二进制中的

15例如是00001111,而零是00000000,因此每个位彼此进行“或”运算,再次导致15返回。

答案 1 :(得分:0)

一元加运营商

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus_()

  

一元加号运算符位于其操作数之前,并求值为其操作数,但是尝试将其转换为数字(如果尚未转换为数字)。尽管一元负数(-)也可以转换非数字,但一元加号是将某物转换为数字的最快且首选的方式,因为它不对该数字执行任何其他运算。它可以转换整数和浮点数的字符串表示形式,以及非字符串值true,false和null。支持十进制和十六进制(“ 0x”前缀)格式的整数。支持负数(尽管不支持十六进制)。如果无法解析特定的值,它将计算为NaN。

+"6";//6
+6;//6
+-6;//-6
+undefined;//NaN
+false;//0
+true;//1
+null;//0
+{};//NaN
+[];//0
+function(){};//NaN

按位或运算符

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#.7c_%28Bitwise_OR%29

  

操作数被转换为32位整数,并由一系列位(零和一)表示。超过32位的数字将丢弃其最高有效位。   第一个操作数中的每个位都与第二个操作数中的相应位配对:第一位到第一位,第二位到第二位,依此类推。   将运算符应用于每对位,然后按位构造结果。

按位或运算符首先将两个操作数转换为32位整数,然后比较每个位。比较两个位时,如果任何位为1,则返回1。如果两个位均为0,则返回0。

示例:

2|1;//produces 3
--------
00000010   //2 in binary
00000001   //1 in binary
--------
00000011   //3 in binary