了解javascript代码段输出

了解javascript代码段输出,javascript,Javascript,首先很抱歉问了这么模糊的问题,我想不出有意义的标题 我试图理解JS中的这一行(输出:12216520) 因此,首先,Javascript中的and/or运算符可以返回除true或false之外的内容。Javascript值可以是“truthy”或“falsy”,如果使用&操作符(a&&b&&c&&d)链接一系列参数,则该操作的结果将是该链中第一个falsy参数,如果没有falsy参数,则是链中最后一个falsy参数。(从那里很容易检查,如果只传递true或false参数,就会得到预期的结果。)因

首先很抱歉问了这么模糊的问题,我想不出有意义的标题

我试图理解JS中的这一行(输出:12216520)


因此,首先,Javascript中的and/or运算符可以返回除
true
false
之外的内容。Javascript值可以是“truthy”或“falsy”,如果使用
&
操作符(
a&&b&&c&&d
)链接一系列参数,则该操作的结果将是该链中第一个falsy参数,如果没有falsy参数,则是链中最后一个falsy参数。(从那里很容易检查,如果只传递
true
false
参数,就会得到预期的结果。)因此,对于长度为5或更大的字符串,
color.length<5&//g
false
,对于长度更小的字符串,结果是
//g

接下来,Javascript有一个“隐式转换”的概念:当您使用一个参数类型错误的操作时,如果可能的话,它会尝试将该参数转换为该类型。特别是,表达式
+a
不是字符串加法运算(即
a+b
),而是改变数字符号的正等价物
-b
+a
不会对符号进行任何更改,但它需要一个数字作为参数,因此它尝试将a转换为一个数字。特别是,如果
a
是一个以
0x
开头的字符串,它将把它解析为十六进制数

现在让我们一步一步来:

color/“#BA68C8”
color.length//7
color.length<5&//g//false
颜色。切片(1)/“BA68C8”
color.slice(1).替换(false,$&$&')/“BA68C8”
“0x”+color.slice(1).replace(false,$&$&')/“0xBA68C8”
+“0xBA68C8”//12216520(十进制相当于十六进制BA68C8)
现在,如果
color
的长度小于5(例如使用
“#FFF”
),则
.replace
的第一个参数是RegExp
//g
。这将匹配字符串中的每个字符。替换值包含
$&
,这是一个特殊代码,由匹配的字符串替换。因此:

color/“#ABC”
color.length//4
颜色长度<5&&//g//g
颜色。切片(1)/“ABC”
颜色。切片(1)。替换(//g,$&$&')/“AABBCC”
“0x”+color.slice(1).替换(//g,$&$&')/“0xAABBCC”
+“0xAABBCC”//11189196(十进制相当于十六进制AABBCC)

因此,首先,Javascript中的and/or运算符可以返回除
true
false
之外的内容。Javascript值可以是“truthy”或“falsy”,如果使用
&
操作符(
a&&b&&c&&d
)链接一系列参数,则该操作的结果将是该链中第一个falsy参数,如果没有falsy参数,则是链中最后一个falsy参数。(从那里很容易检查,如果只传递
true
false
参数,就会得到预期的结果。)因此,对于长度为5或更大的字符串,
color.length<5&//g
false
,对于长度更小的字符串,结果是
//g

接下来,Javascript有一个“隐式转换”的概念:当您使用一个参数类型错误的操作时,如果可能的话,它会尝试将该参数转换为该类型。特别是,表达式
+a
不是字符串加法运算(即
a+b
),而是改变数字符号的正等价物
-b
+a
不会对符号进行任何更改,但它需要一个数字作为参数,因此它尝试将a
转换为一个数字。特别是,如果
a
是一个以
0x
开头的字符串,它将把它解析为十六进制数

现在让我们一步一步来:

color/“#BA68C8”
color.length//7
color.length<5&//g//false
颜色。切片(1)/“BA68C8”
color.slice(1).替换(false,$&$&')/“BA68C8”
“0x”+color.slice(1).replace(false,$&$&')/“0xBA68C8”
+“0xBA68C8”//12216520(十进制相当于十六进制BA68C8)
现在,如果
color
的长度小于5(例如使用
“#FFF”
),则
.replace
的第一个参数是RegExp
//g
。这将匹配字符串中的每个字符。替换值包含
$&
,这是一个特殊代码,由匹配的字符串替换。因此:

color/“#ABC”
color.length//4
颜色长度<5&&//g//g
颜色。切片(1)/“ABC”
颜色。切片(1)。替换(//g,$&$&')/“AABBCC”
“0x”+color.slice(1).替换(//g,$&$&')/“0xAABBCC”
+“0xAABBCC”//11189196(十进制相当于十六进制AABBCC)

首先,对于原始代码段:

color = +("0x" + color.slice(1).replace( 
color.length < 5 && /./g, '$&$&'));
color=+(“0x”+color.slice(1)。替换(
color.length<5&&//g,$&$&');
基本上,它用于将十六进制字符串转换为十进制数。以下是它的工作原理:

var color = '#BA68C8';
color = color.slice(1).replace(color.length < 5 && /./g, '$&$&'); // This use to remove the '#' character from hex string.
console.log(color); // BA68C8
color = "0x" + color; // This use to add '0x' prefix to indicate the hex number
console.log(color); // 0xBA68C8
color = +color; // Convert to Decimal, this is relative to parseInt(color)
console.log(color); // 12216520
var color='#BA68C8';
color=color.slice(1).替换(color.length<5&//g,$&$&');//此选项用于从十六进制字符串中删除“#”字符。
控制台。日志(颜色);//BA68C8
color=“0x”+颜色;//此选项用于添加“0x”前缀以指示十六进制数
控制台。日志(颜色);//0xBA68C8
颜色=+颜色;//转换为十进制,这是相对于parseInt(颜色)
控制台。日志(颜色);//12216520
在你的2段中。第二个与原始代码段完全不同。而第一个参数为null,因为在大括号中放置了错误的变量。这是正确的:

color = +`0x${color.slice(1).replace( 
color.length < 5 && /./g, '$&$&')}`;
color=+`0x${color.slice(1)。替换(
color.length<5&//g,$&$&')};

首先,对于原始代码段:

color = +("0x" + color.slice(1).replace( 
color.length < 5 && /./g, '$&$&'));
color=+(
var color = '#BA68C8';
color = color.slice(1).replace(color.length < 5 && /./g, '$&$&'); // This use to remove the '#' character from hex string.
console.log(color); // BA68C8
color = "0x" + color; // This use to add '0x' prefix to indicate the hex number
console.log(color); // 0xBA68C8
color = +color; // Convert to Decimal, this is relative to parseInt(color)
console.log(color); // 12216520
color = +`0x${color.slice(1).replace( 
color.length < 5 && /./g, '$&$&')}`;