Javascript转义(\x)和#x2B;变量
一直在玩Javascript并发现转义(\x),这似乎很有趣 为了澄清,我发现我可以使用escape+x将两位数转换成字母 如Javascript转义(\x)和#x2B;变量,javascript,Javascript,一直在玩Javascript并发现转义(\x),这似乎很有趣 为了澄清,我发现我可以使用escape+x将两位数转换成字母 如“\x51”输出为Q 我一直在搜索这个特定的主题,但不确定从哪里开始,因为我甚至不知道他们怎么称呼它,就像我知道PHP和Javascript中反斜杠的用途,但我不知道它与x 现在我的问题是,是否可以在X之后添加一个动态数值 我试图创建这样的函数,但似乎不可能,因为它需要在x之后有两个字符(数字或字母) function __num_string( num ) {
“\x51”
输出为Q
我一直在搜索这个特定的主题,但不确定从哪里开始,因为我甚至不知道他们怎么称呼它,就像我知道PHP和Javascript中反斜杠的用途,但我不知道它与x
现在我的问题是,是否可以在X之后添加一个动态数值
我试图创建这样的函数,但似乎不可能,因为它需要在x
之后有两个字符(数字或字母)
function __num_string( num ) {
return "\x"+num;
}
期望值\u num\u字符串(51)
将返回Q
现实未捕获的语法错误:意外标记非法
如果可能或不可能的话,我希望得到任何澄清
谢谢字符串转义是一种语法功能,是字符串文本的一部分。
在运行时这样做没有意义
您正在查找
字符串。fromCharCode
,它的功能与听起来完全一样。字符串转义是一种语法功能,是字符串文本的一部分。在运行时这样做没有意义
您正在查找
字符串。fromCharCode
,它的作用与听起来的完全一样。是的,这是可能的,但有一个:
。。。其中num
是要获取的字符的Unicode值
尽管如此,从技术上讲,使用eval
,仍然可以按照您最初的预期方式实现您的功能:
function __num_string( num ) {
if (/^[a-f0-9]{1,2}$/i.test(num)) {
return eval('"\\x' + num + '"');
}
}
注意区别:num
应该是表示十六进制值的字符串
现在谈谈你的错误:这个
'\x'
。。。是技术上无效的字符串。解析字符串文字时,解析器希望序列
\x
后面跟着[0-9a-f]
字符范围。然而,在您的案例中没有类似的东西,因此意外标记非法 是的,这是可能的,但有一个:
。。。其中num
是要获取的字符的Unicode值
尽管如此,从技术上讲,使用eval
,仍然可以按照您最初的预期方式实现您的功能:
function __num_string( num ) {
if (/^[a-f0-9]{1,2}$/i.test(num)) {
return eval('"\\x' + num + '"');
}
}
注意区别:num
应该是表示十六进制值的字符串
现在谈谈你的错误:这个
'\x'
。。。是技术上无效的字符串。解析字符串文字时,解析器希望序列\x
后面跟着[0-9a-f]
字符范围。然而,在您的案例中没有类似的东西,因此意外标记非法 tldr
- 通过51₁₆ 到
String.fromCharCode
not 51₁₀李>
- 五十一₁₆ 等于81₁₀李>
- 以下任一项均可用于转换
(81)。toString(16)
81..toString(16)
81.0.toString(16)
numberVar.toString(16)
在阅读了这个问题的答案和评论后,一项调查随之展开
记住我从这个问题中得出的假设
为什么主要的解决方案,即String.fromCharCode
,
尝试时似乎无法回答提问者的问题
假设问题在于传递给String.fromCharCode
的参数类型
下面在节点repl中演示了'\x51'==='Q'
返回true
但字符串的原因。fromCharCode(51)==3也返回true
> 0x51 // es6 hexadecimal literal
81
> 0x51.toString(16) // Same as (81).toString(16)
'51'
> String.fromCharCode(0x51) // Same as String.fromCharCode(81)
'Q'
> (81).toString(16) // Same as 0x51.toString(16)
51
> String.fromCharCode(81) // Same as String.fromCharCode(0x51)
'Q'
> 0x33 // es6 hexadecimal literal
51
> 0x33.toString(16) // literal to base 16 string
'33'
> String.fromCharCode(0x33)
'3'
> String.fromCharCode(51)
'3'
如果你想亲自尝试的话,只需要这些陈述
0x51
0x51.toString(16)
String.fromCharCode(0x51)
(81).toString(16)
String.fromCharCode(81)
0x33
0x33.toString(16)
String.fromCharCode(0x33)
String.fromCharCode(51)
似乎所讨论的方法采用十六进制字符串
如果它是一个数字,则隐式调用以16为基数传递的toString()
下面是一个进行转换的函数
function toHex(n) {
if (typeof n === 'string') return `${parseInt(n, 16)}`;
return `0x${n}`;
}
它可以与数字一起使用
> String.fromCharCode(toHex(33))
'3'
> String.fromCharCode(toHex(51))
'Q'
它可以与字符串一起使用
> String.fromCharCode(toHex('33'))
'3'
> String.fromCharCode(toHex('51'))
'Q'
它可以与十六进制数字一起使用,但只能用作字符串
> String.fromCharCode(toHex('3f'))
'?'
因为十六进制数字文本没有它就可以了
> String.fromCharCode(0x3f)
'?'
tldr
- 通过51₁₆ 到
String.fromCharCode
not 51₁₀李>
- 五十一₁₆ 等于81₁₀李>
- 以下任一项均可用于转换
(81)。toString(16)
81..toString(16)
81.0.toString(16)
numberVar.toString(16)
在阅读了这个问题的答案和评论后,一项调查随之展开
记住我从这个问题中得出的假设
为什么主要的解决方案,即String.fromCharCode
,
尝试时似乎无法回答提问者的问题
假设问题在于传递给String.fromCharCode
的参数类型
下面在节点repl中演示了'\x51'==='Q'
返回true
但字符串的原因。fromCharCode(51)==3也返回true
> 0x51 // es6 hexadecimal literal
81
> 0x51.toString(16) // Same as (81).toString(16)
'51'
> String.fromCharCode(0x51) // Same as String.fromCharCode(81)
'Q'
> (81).toString(16) // Same as 0x51.toString(16)
51
> String.fromCharCode(81) // Same as String.fromCharCode(0x51)
'Q'
> 0x33 // es6 hexadecimal literal
51
> 0x33.toString(16) // literal to base 16 string
'33'
> String.fromCharCode(0x33)
'3'
> String.fromCharCode(51)
'3'
如果你想亲自尝试的话,只需要这些陈述
0x51
0x51.toString(16)
String.fromCharCode(0x51)
(81).toString(16)
String.fromCharCode(81)
0x33
0x33.toString(16)
String.fromCharCode(0x33)
String.fromCharCode(51)
似乎所讨论的方法采用十六进制字符串
如果它是一个数字,则隐式调用以16为基数传递的toString()
下面是一个进行转换的函数
function toHex(n) {
if (typeof n === 'string') return `${parseInt(n, 16)}`;
return `0x${n}`;
}
它可以与数字一起使用
> String.fromCharCode(toHex(33))
'3'
> String.fromCharCode(toHex(51))
'Q'
它可以与字符串一起使用
> String.fromCharCode(toHex('33'))
'3'
> String.fromCharCode(toHex('51'))
'Q'
它可以与十六进制数字一起使用,但只能用作字符串
> String.fromCharCode(toHex('3f'))
'?'
因为十六进制数字文本没有它就可以了
> String.fromCharCode(0x3f)
'?'
感谢您的解释,非常感谢,@riana77ow只是一个跟进,它看起来不像String.fromCharCode()
按我想要的方式转换,String.fromCharCode(51)
返回3
,而”\