2016-08-02 30 views
1

Ich versuche, Wasserzeichen in js Dateianforderungen durch RequireJs zu setzen:JavaScript Array join() Ursache null (% 00) Charakter in Folge

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

Für einige Gründe, warum ich nicht byADM direkt setzen kann, so dass ich schrieb über dem Code.
Mein Problem ist nach dem Beitritt Zeichen zeigt b%00%00y%01%00A%02%00D%03%00M%04%00&v=1.0.0 anstelle von byADM&v=1.0.0 in der URL. es sieht aus wie '' konvertieren zu %00.
Was kann ich tun, um davon zu fahren?
Gibt es ein wirklich leeres Zeichen in der String-Bibliothek oder etwas anderes?

+1

Code in der Konsole getestet, funktioniert gut. Erhalten Sie richtige Ergebnisse, wenn Sie nur 'map',' join', '+'? – Georgy

+0

@Georgy Ja, in der Konsole ist Ok, aber ich sagte mein Problem ist, wenn diese Zeichenfolge in URL geht. –

+0

@Georgy: Es sieht gut aus, weil Sie diese Zeichen/Byte-Werte nicht sehen, wenn Sie console.log verwenden. Wenden Sie zuerst encodeURIComponent an, und Sie werden sehen, dass sie angezeigt werden. – CBroe

Antwort

2

Array.prototype.map geht drei Argumente zum Rückruf: currentValue, index, array. String.fromCharCode akzeptiert eine beliebige Anzahl von Argumenten und konvertiert sie alle auf einmal. Im Wesentlichen rufen Sie String.fromCharCode(98, 0, []) an, indem Sie String.fromCharCode direkt als Rückruf an map übergeben.

Sie müssen die zusätzlichen Argumente keulen:

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

Aber anstatt dieses Verhalten zu kämpfen, können Sie auch String.fromCharCode ‚s Fähigkeit zu akzeptieren, eine beliebige Anzahl von Argumenten verwenden, um Ihren Code zu vereinfachen:

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

Oder wissen Sie ...

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

Danke, dass Sie @CBroe antworten. –

+1

Das ist die bessere Antwort, denke ich. Ich vermutete, dass es etwas mit den an die Callback-Funktion übergebenen Parametern zu tun hatte, ging aber nicht im Detail darauf ein. @ MeTe-30, sollten Sie diese wahrscheinlich akzeptieren. – CBroe

+0

Ich respektiere nur die Priorität, danke @CBroe –

2

Ich weiß nicht, warum genau, aber es sieht aus wie Sie String.formCharCode in eine weitere anonyme Funktion wickeln müssen:

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