Deze lijn van jQuery begrijpen

Regel 3906 van jQuery 1.7rc1 is

expando = "sizcache" + (Math.random() + '') .replace ('.', ''),

Ik begrijp het nut niet van het gebruik van + '' . Is niet het bovenstaande equivalent aan

expando = ("sizcache" + Math.random ()). replace ('.', ''),

2
ja, je kunt een nummer niet vervangen
toegevoegd de auteur Tules, de bron
De originele manier van jQuery is, in theorie, sneller. String vervangende uitvoering is vrijwel direct gebonden aan de lengte van de invoerreeks. Het toevoegen van de tekenreekslengte aan de invoer waarvan de gegevens niet moeten worden vervangen, is een direct, maar klein prestatieverlies. Als deze coderegel een aanzienlijke hoeveelheid wordt genoemd, kunnen besparingen op de prestaties merkbaar worden.
toegevoegd de auteur Rob, de bron

6 antwoord

+ '' is to convert it to a string - it allows replace to work.

Het is niet hetzelfde als de tekst van de grootte is gewijzigd in een.

"sizcache." + (Math.random() + '').replace('.', '') != ("sizcache." + Math.random() + '').replace('.', '')

bijvoorbeeld.

6
toegevoegd
Maar wacht, 'sizcache' is een string, dus de conversie naar string zou al moeten gebeuren.
toegevoegd de auteur Randomblue, de bron
niet helemaal hetzelfde. Dit zou hetzelfde zijn: ("sizcache" + Math.random ()). Replace ('.', '') Maar als de tekstsize-cache is gewijzigd om te zeggen a te hebben. erin zou dan een bug worden gemaakt
toegevoegd de auteur Ross Dargan, de bron
sizcache wordt niet gecombineerd met het willekeurige getal tot nadat de methode .replace is aangeroepen. U hebt echter gelijk omdat uw tweede coderegel een gelijkwaardig resultaat oplevert.
toegevoegd de auteur Blazemonger, de bron

Ja je hebt gelijk. Gewoon een andere manier om het te doen.

3
toegevoegd
wat als "sizcache" een dynamische reeks is met mogelijk betekenisvolle decimalen erin? : P
toegevoegd de auteur jbabey, de bron
+1 Voor het beantwoorden van de vraag.
toegevoegd de auteur Mirthquakes, de bron

Ik geloof dat ze "+" gebruiken om van een getal naar een string te converteren.

1
toegevoegd
We hebben al een stringconversie!
toegevoegd de auteur Randomblue, de bron

Ja, uw methode zal hetzelfde resultaat opleveren.

Het gedeelte + '' wordt gebruikt om het nummer naar een tekenreeks te casten. Vervolgens wordt de functie replace aangeroepen en wordt de tekenreeks sizcache toegevoegd.

Met uw methode voegt u eerst die tekenreeks toe aan het getal (en converteert u het getal naar een tekenreeks in het proces) en roept u vervolgens vervang over het hele ding. Omdat je alleen maar punten verwijdert, is het resultaat hetzelfde.

0
toegevoegd

Het is niet hetzelfde. In hun versie krijgen ze een willekeurig getal, waarbij het wordt omgezet in een string door er een lege string aan te koppelen, de punt te verwijderen en vervolgens sizcache toe te voegen. Uw versie voegt sizcache toe aan het willekeurige nummer en verwijdert vervolgens de punt.

Toegegeven, het eindresultaat is hetzelfde, maar kan mogelijk verschillen met een andere tekenreekswaarde, bijvoorbeeld als deze een punt bevat zoals siz.cache .

0
toegevoegd
Zeg je dat formaat> een punt kan bevatten?
toegevoegd de auteur Randomblue, de bron
In dit geval is het misschien niet, het is een letterlijke tekenreeks. Echter, het kan in de toekomst worden gerepaleerd voor iets met een punt erin, en de code zou nog steeds werken.
toegevoegd de auteur Alex Turpin, de bron

Ik denk dat het een snelle manier is om de geretourneerde waarde van Math.random() als een tekenreeks te casten, zodat het replace() kan worden gebruikt.

0
toegevoegd
Stringconversie is al voltooid.
toegevoegd de auteur Randomblue, de bron