JavaScript Warum ist Lodash endsWith null safe?

Hendoul

Commander
Registriert
Apr. 2008
Beiträge
2.049
Hi :)

Ich verstehe nicht ganz warum das mit lodash keinen Error gibt:

Javascript:
const tmp = undefined;
const result = _.endsWith(tmp, 'xyz');

Wenn ich mir den source code von _.endsWith anschaue:
https://github.com/lodash/lodash/blob/master/endsWith.js
Dann müsste der doch auch auf die Schnauze fliegen bei der Zeile hier:
Javascript:
const { length } = string

Da auf undefined kein length property vorhanden. Aber scheinbar funktioniert es trotzdem.

Entweder ich schaue mir den falschen source code an oder es passiert etwas, das ich nicht verstehe.
In der Beschreibung der Methode steht noch:
Javascript:
@param {string} [string=''] The string to inspect.
Deutet ja daraufhin, dass der String defaultmässig ='' ist, aber in der Parameterliste der Funktion steht kein = ''

Was übersehe ich?
 
  • Gefällt mir
Reaktionen: KitKat::new()
Die Funktion in 4.17.20 sieht so aus: https://github.com/lodash/lodash/blob/4.17.20/dist/lodash.js#L14235-L14247
Code:
    function endsWith(string, target, position) {
      string = toString(string);
      target = baseToString(target);

      var length = string.length;
      position = position === undefined
        ? length
        : baseClamp(toInteger(position), 0, length);

      var end = position;
      position -= target.length;
      return position >= 0 && string.slice(position, end) == target;
    }
Warum, wieso, weshalb? Musst du dir den Build-Prozess ansehen.

https://lodash.com/custom-builds
 
Edit:
1606130156710.png


Also grundsätzlich ist die Syntax da "falsch" in dem JS, warum sie diese falsche Syntax als Basis ihrer Umwandlung verwenden, weiß ich nicht. (falsch nicht im Sinne von ungültig, sondern dass sie nicht das tut, was sie soll)

Mit der Syntax würde es funktionieren:
1606130318864.png
 
Zuletzt bearbeitet: (Unnötigen Anhang entfernt)
Ok, aber ich sehe hier https://lodash.com/custom-builds nichts, was auf diese Umwandlung hindeutet. Da geht es doch darum, welche Funktionen man mit einschliessen will und welche nicht. Wir haben jedenfalls keinen custom-build von lodash, wir ziehen das fix fertig so rein wie es ist.
 
Hendoul schrieb:
Wir haben jedenfalls keinen custom-build von lodash, wir ziehen das fix fertig so rein wie es ist.
Irgendwoher muss ja die Ersetzung kommen.

Wenn ich einen lodash Build erstellen will, seh ich nur, dass es kein lib Verzeichnis gibt. Ein Issue besagt, dass es Legacy Code ist. Ergo hab ich die die Custom-Build-Seite verlinkt, damit wenigstens irgend ein Ansatz vorhanden ist. Besser wäre es natürlich, wenn man ne Anleitung für ein Build bekommt, aber ein paar kurze Suchen ergaben nichts.

Wenn du das wissen willst, musst du halt in den Build-Prozess sehen und verstehen, an welcher Stelle genau dort irgendwas ersetzt/transpiliert/... wird. lodash-cli wird halt einzig erwähnt, was aber auch nur die Dependencies vorgebaut holt - zumindest sagt mir das hier ein strace und auch die package.json besagt nur eine Dependency auf lodash.

Ja, Softwareentwicklung ist sehr oft total bescheuert...
 
Zurück
Oben