Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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:字符串中的转义%d_Javascript_Node.js - Fatal编程技术网

Javascript:字符串中的转义%d

Javascript:字符串中的转义%d,javascript,node.js,Javascript,Node.js,Node.js中有以下代码: var str = '', ch; for(/*standard for loop*/){ // some code ... ch = '%' + buffer[i].toString(16); str += ch; } 现在,当buffer[i].toString(16)返回时,比如说d6,结果字符串不包含%d6,而是包含NaN6 现在我知道在C的sprinf中使用了%d,但afaik JavaScript nor节点具有sprintf或等

Node.js中有以下代码:

var str = '',
    ch;

for(/*standard for loop*/){
 // some code ...

 ch = '%' + buffer[i].toString(16);

 str += ch;
} 
现在,当
buffer[i].toString(16)
返回时,比如说
d6
,结果字符串不包含
%d6
,而是包含
NaN6

现在我知道在C的sprinf中使用了%d,但afaik JavaScript nor节点具有sprintf或等效函数


我的字符串中需要
%d6
,那么我该怎么做才能防止JS自动将
%d
(以及其他,如
%f
)转换为NaN?

您不能出于自己的目的使用toString方法,因为JS已经有了自己的函数名

  • 将firefox更新至最新版本。还要确保您正在使用firefox
  • 我进行了测试,您的解决方案应该有效。请提醒一切
  • 以下内容的输出是什么:

    ch = '%' + buffer[i].toString(16);
    alert(ch);
    alert(buffer[i]);
    alert(buffer[i].toString(16));
    

    如果我们进行快速测试,则错误不在粘贴的代码中:

    function test()
    {
      var stuff = 214;
      var str = '', ch;
    
      ch = '%' + stuff.toString(16);
      alert(ch);
    } 
    
    我们看到我们想要返回的实际上是返回的(%d6)

    NaN代表非数字,您确定缓冲区数组中的是数字吗?您是否在ch上调用任何其他方法/函数?

    节点的console.log()-用于输出的标准函数-我用来打印结果的函数与printf的行为相同,并且它实际上是有文档记录的()。愚蠢的我,谢谢大家引导我找到解决办法


    sys.puts()打印所需字符串。

    NaN表示非数字。这通常发生在您尝试将数值函数应用于字符串时。他可能出于自己的目的而使用toString(),因为toString()应该没有参数(16)。使用我的解决方案。参数16意味着他想要返回一个十六进制数:@stephen:没错。这不是我自己的方法。我不知道这个参数,因为它是最近才出现的:文档说:toString()可以,它返回正确的字符串,如果我不将它连接到%符号,一切都正常。我只在toString()返回第一个字符为“d”或“f”的字符串时遇到过这个问题。对于其他字符(a,b,…),它工作得很好。如果是这样,您是否调试过:buffer[i]Ascii 223 char的值,并且toString()返回十六进制字符串“df”。在与“%”进行接触后,它被“转换”为NaN。我在控制台中测试了所有内容,所以有3个选项。我正在运行node.js,它正在运行chrome的v8。找出问题所在,并将其张贴在答案中。无论如何谢谢:)在chrome调试器中运行代码很好。实际上,问题出在节点的console.log中,它的行为与printf相同。愚蠢的我。你也可以通过将符号加倍,或插入原始字符串:
    console.log(“这些%%符号被解释,插入了一个%s。”,“%”)来逃避
    %
    符号