JavaScript中的动态八进制字符表示与直接八进制字符表示
如果我要用以下方法创建一个三位八进制字符串:JavaScript中的动态八进制字符表示与直接八进制字符表示,javascript,ascii,octal,Javascript,Ascii,Octal,如果我要用以下方法创建一个三位八进制字符串: x=“\\”+a+b+c 如果a是0或1,b和c都是从0到7的数字,为什么alert(x)会导致\141而不是a这是alert(“\141”) 其次,如何使原始创建的字符代码产生相应的ASCII字符 例如,为什么警报(x)会导致\141,而不是警报(“\141”) 因为在字符串文本中,\和\是不同的东西。第一个示例在字符串中创建了一个实际的反斜杠,而在第二个示例中,反斜杠引入了八进制转义序列。这与字符串中的\\n是一个反斜杠,后跟字母n,但\n是一个
x=“\\”+a+b+c
如果a
是0或1,b
和c
都是从0到7的数字,为什么alert(x)
会导致\141
而不是a
这是alert(“\141”)
其次,如何使原始创建的字符代码产生相应的ASCII字符
例如,为什么警报(x)会导致\141,而不是警报(“\141”)
因为在字符串文本中,\
和\
是不同的东西。第一个示例在字符串中创建了一个实际的反斜杠,而在第二个示例中,反斜杠引入了八进制转义序列。这与字符串中的\\n
是一个反斜杠,后跟字母n
,但\n
是一个换行符的原因相同
或者更简单一点:因为您没有做任何尝试re将您创建的内容解释为字符串文字的操作。它已经是一个字符串,没有任何东西会再次尝试使用字符串文字规则计算其中的字符
如何使原始创建的字符代码产生相应的ASCII字符
如果我对问题的理解正确,有两种方法:
\\
,通过parseInt(…,8)
(八进制)将字符串的其余部分转换为数字,然后使用string.fromCharCode
eval
。但不要这样做,要这样做旁注:八进制转义序列不是标准JavaScript的一部分,尽管在松散模式实现中,但不是必需的,以支持它们。在严格模式下根本不允许使用它们。因为您正在逃避反斜杠。另外,我不确定JavaScript是否支持八进制编码,我知道它支持使用
\u61
(相当于八进制141的十六进制)的十六进制编码,但如果您希望这样动态地指定它,请尝试使用类似以下的方法:
// a, b, and c are octal digits
var octal = parseInt('' + a + b + c, 8);
var x = String.fromCharCode(octal);
我的第二个建议涉及JSON.parse,但我不确定是否所有浏览器都支持传递字符串directly@PatrickRoberts:没关系,JSON不支持八进制转义。:-)(我也想到了,但后来记住了…)顺便说一句,JSON标准已经放弃了顶层是对象或数组的要求,我不确定是否有浏览器在
JSON.parse
(因为人们经常用它解析片段)。@T.J.Crowder在这里幽默我,虽然我知道这是不允许的,但我似乎知道在这种情况下你如何使用eval
?为了让我知道不该做什么,要避免的eval
语法是什么?@Eliseod'Annunzio:x=eval(““+x+”)代码>:-)但真的,不要那样做,这太过分了。