当我在MDN上阅读有关doc的符号时,我注意到这些东西会将字符串压缩成我从未见过的数字。
报价:
当尝试将符号转换为数字时,将出现TypeError 抛出(例如+ sym或sym | 0)。
例如:
+"15"
将返回
15
是数字类型。
也
"15" | 0
可以做同样的事情。
我想知道这个技巧是如何工作的。 你能帮忙吗?
答案 0 :(得分:1)
+"15"
正在将"15"
转换为数字类型,与-15
的工作方式相同。
例如
>> -"15" === -15
>> true
第二种情况,"15" | 0
也在做同样的事情,为了执行Bitwise OR而强制转换为整数。
这意味着取15位并将它们与0位进行或运算。
二进制中的 15
例如是00001111
,而零是00000000
,因此每个位彼此进行“或”运算,再次导致15
返回。
答案 1 :(得分:0)
一元加运营商
一元加号运算符位于其操作数之前,并求值为其操作数,但是尝试将其转换为数字(如果尚未转换为数字)。尽管一元负数(-)也可以转换非数字,但一元加号是将某物转换为数字的最快且首选的方式,因为它不对该数字执行任何其他运算。它可以转换整数和浮点数的字符串表示形式,以及非字符串值true,false和null。支持十进制和十六进制(“ 0x”前缀)格式的整数。支持负数(尽管不支持十六进制)。如果无法解析特定的值,它将计算为NaN。
+"6";//6
+6;//6
+-6;//-6
+undefined;//NaN
+false;//0
+true;//1
+null;//0
+{};//NaN
+[];//0
+function(){};//NaN
按位或运算符
操作数被转换为32位整数,并由一系列位(零和一)表示。超过32位的数字将丢弃其最高有效位。 第一个操作数中的每个位都与第二个操作数中的相应位配对:第一位到第一位,第二位到第二位,依此类推。 将运算符应用于每对位,然后按位构造结果。
按位或运算符首先将两个操作数转换为32位整数,然后比较每个位。比较两个位时,如果任何位为1,则返回1。如果两个位均为0,则返回0。
示例:
2|1;//produces 3
--------
00000010 //2 in binary
00000001 //1 in binary
--------
00000011 //3 in binary