webentwicklung-frage-antwort-db.com.de

Javascript:% s oder% d steht für Zeichenfolge?

Kann jemand bitte erklären, was hier passiert? Ich sehe %d und %s, aber ich sehe diese nicht irgendwo anders im Code. Was zum Teufel bedeutet das in Javascript? Ich gehe davon aus, dass es eine Art String-Templat ist, das ich noch nie gesehen habe?

passport.deserializeUser(
  (id, done) => {
    debug('will deserialize user.id=%d', id)
    User.findById(id)
      .then(user => {
        debug('deserialize did ok user.id=%d', user.id)
        done(null, user)
      })
      .catch(err => {
        debug('deserialize did fail err=%s', err)
        done(err)
      })
  }
)

13
Turnipdabeets

Was Sie dort sehen, sind die String-Substitutionsmuster, die in console.log() oder console.debug() integriert sind. 

Das Muster verläuft wie ich unten dargestellt habe:

% s für einen String-Wert

% d oder% i für einen Integer-Wert

% f für eine Fließkommazahl

% o für einen Objekt-Hyperlink

Sie ersetzen also im Wesentlichen die Werte durch die angegebenen Werte:

var name = 'Chris';
console.log('Hi, my name is %s.', name);
//Output: Hi, my name is Chris.

console.debug('Hi, my name is %s.', name);
//Output: Hi, my name is Chris.
24
Chris Cruz

console.log() und console.debug() verwenden die Formatierung im Format printf. Hier sind die offiziell unterstützten Formatierer:

Formatierungsdarstellung:

  • %O Ein Objekt in mehreren Zeilen schön drucken.
  • %o Ein Objekt ganz in einer Zeile drucken.
  • %s String.
  • %d Number (sowohl Integer als auch Float).
  • %j JSON. Wird durch die Zeichenfolge "[Circular]" ersetzt, wenn das Argument Zirkelverweise enthält.
  • %% Ein Prozentzeichen ('%'). Dies verbraucht kein Argument.

Die Ergebnisse werden in die Debug-Konsole geschrieben. Öffnen Sie einfach Ihre Befehlszeile oder Ihr Terminal und führen Sie es folgendermaßen aus:

node debug [script.js | -e "script" | <Host>:<port>] command
3
Teocci

Das ist wahrscheinlich etwas spezifisch für debug (), da es in Javascript keine eingebauten String-Formatierungen gibt (nicht ohne Bibliothek).

% D wird jedoch durch eine ganze Zahl und% s durch eine Zeichenfolge ersetzt. Beispiel:

debug("I'm %s and I'm %d years old", "John", 10)

Sollte drucken: Ich bin John und ich bin 10 Jahre alt.

Hier ist eine Bibliothek, die Sie bei Interesse verwenden können: http://www.diveintojavascript.com/projects/javascript-sprintf

1
Bruno Santos

bei einem einfachen Format wie %03d könnte lodash.padStart die Aufgabe erledigen.

_.padStart(x, 3, '0')
0
aGuegu

Die% -Ausgabeformat-Spezifizierer% d% s usw. stammen von ANSI C Damit kommt sie durch eine Bibliothek in den Knoten - in diesem Fall util.format https://nodejs.org/api/util .html # util_util_format_format_args

0
Genovo