JavaScript数组join()导致结果中出现null(%00)字符

JavaScript Array join() cause null (%00) character in result

本文关键字:null 字符 数组 join JavaScript 结果      更新时间:2023-09-26

我正试图通过RequireJs:在js文件请求中放入水印

requirejs.config({
    baseUrl: '/app',
    urlArgs:  [98, 121, 65, 68, 77].map(String.fromCharCode).join('')+'&v=1.0.0'
});

由于某些原因,我不能直接放byADM,所以我写了上面的代码
我的问题是,在加入字符后,它在url中显示b%00%00y%01%00A%02%00D%03%00M%04%00&v=1.0.0而不是byADM&v=1.0.0。看起来像是CCD_ 4转换为CCD_
我该怎么办
字符串库中是否有真正的空字符或其他字符?

Array.prototype.map向回调传递三个参数currentValueindexarrayString.fromCharCode接受任意数量的参数,一次性转换所有参数。从本质上讲,您通过将String.fromCharCode作为回调直接传递给map来调用String.fromCharCode(98, 0, [])

您需要剔除其他参数:

[98, 121, 65, 68, 77].map((c) => String.fromCharCode(c))

但是,除了对抗这种行为,您还可以使用String.fromCharCode的能力来接受任意数量的参数来简化代码:

String.fromCharCode.apply(String, [98, 121, 65, 68, 77]) + '&v=1.0.0'

或者,你知道…

String.fromCharCode(98, 121, 65, 68, 77) + '&v=1.0.0'

我不知道为什么,但看起来你需要将String.formCharCode包装成一个额外的匿名函数:

urlArgs:  [98, 121, 65, 68, 77].map(
  function(c) {
    return String.fromCharCode(c);
  }
).join('')+'&v=1.0.0'