如果我要按以下方式创建一个三位八进制字符串:
a
b
为0或1,且c
和alert(x)
都是0到7之间的数字,为什么\141
会导致a
例如,alert("\141")
不是{ STATION_ID: "KLFI" }
?
其次,如何获得原始创建的字符代码以产生其各自的ASCII字符?
答案 0 :(得分:1)
为什么警告(x)会导致\ 141例如,而不是哪个是警报(“\ 141”)?
因为在字符串文字中,\\
和\
是不同的东西。第一个在字符串中创建一个实际的反斜杠,而在第二个示例中,反斜杠引入了一个八进制转义序列。这与字符串文字中\\n
为反斜杠后跟字母n
的原因相同,但\n
是换行符。
或者更简单一点:因为你没有做什么试图 重新 解释你创建的字符串文字。它已经是一个字符串,并且没有任何东西试图再次使用字符串 literal 规则来评估其中的字符。
如何获得原始创建的字符代码以产生其各自的ASCII字符
如果我正确地理解了这个问题,有两种方法:
剥离\\
,通过parseInt(..., 8)
(八进制)将字符串的剩余部分转换为数字,然后使用String.fromCharCode
。
使用eval
。但是不要这样做,做#1
旁注:八进制转义序列不是标准JavaScript的一部分,尽管在松散模式实现are allowed中,但不是必需的,以支持它们。它们根本不被允许处于严格模式。
答案 1 :(得分:1)
因为你正在逃避反斜杠。此外,我不确定JavaScript是否支持八进制编码,我知道它支持使用\u61
(八进制141的等效十六进制)的十六进制,但是如果你想像这样动态地指定它,请尝试使用类似的东西: / p>
// a, b, and c are octal digits
var octal = parseInt('' + a + b + c, 8);
var x = String.fromCharCode(octal);