Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的动态八进制字符表示与直接八进制字符表示_Javascript_Ascii_Octal - Fatal编程技术网

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+”):-)但真的,不要那样做,这太过分了。