JavaScript中的动态与直接八进制字符表示

时间:2015-07-23 13:21:07

标签: javascript ascii octal

如果我要按以下方式创建一个三位八进制字符串:

a

b为0或1,且calert(x)都是0到7之间的数字,为什么\141会导致a例如,alert("\141")不是{ STATION_ID: "KLFI" }

其次,如何获得原始创建的字符代码以产生其各自的ASCII字符?

2 个答案:

答案 0 :(得分:1)

  

为什么警告(x)会导致\ 141例如,而不是哪个是警报(“\ 141”)?

因为在字符串文字中,\\\是不同的东西。第一个在字符串中创建一个实际的反斜杠,而在第二个示例中,反斜杠引入了一个八进制转义序列。这与字符串文字中\\n为反斜杠后跟字母n的原因相同,但\n是换行符。

或者更简单一点:因为你没有做什么试图 重新 解释你创建的字符串文字。它已经是一个字符串,并且没有任何东西试图再次使用字符串 literal 规则来评估其中的字符。

  

如何获得原始创建的字符代码以产生其各自的ASCII字符

如果我正确地理解了这个问题,有两种方法:

  1. 剥离\\,通过parseInt(..., 8)(八进制)将字符串的剩余部分转换为数字,然后使用String.fromCharCode

  2. 使用eval。但是不要这样做,做#1

  3. 旁注:八进制转义序列不是标准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);