Javascript:字符串中的转义%d
Node.js中有以下代码: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或等
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已经有了自己的函数名
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。”,“%”)来逃避%
符号