Înțelegerea acestei linii de jQuery

Linia 3906 a jQuery 1.7rc1 este

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

Nu înțeleg punctul de folosire a + "" . Nu este echivalentul de mai sus

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

2
da, tu cant a înlocui pe un număr
adăugat autor Tules, sursa
Modul original jQuery este, teoretic, mai rapid. String-ul înlocuiește performanța este destul de mult legat direct de lungimea șirului de intrare. Adăugarea la lungimea șirului de intrare cu datele pe care le cunoașteți nu trebuie înlocuite este o pierdere de performanță directă, dar mică. Dacă această linie de coduri devine o sumă semnificativă, economiile de performanță ar putea deveni vizibile.
adăugat autor Rob, sursa

6 răspunsuri

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

Nu este același lucru dacă textul dimensiunii a fost modificat pentru a include a.

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

de exemplu.

6
adăugat
Dar așteptați, "sizcache" este un șir, deci conversia în șir ar trebui să se întâmple deja.
adăugat autor Randomblue, sursa
nu la fel. Acest lucru ar fi același: ("sizcache" + Math.random ()) înlocui ('.', '') Dar dacă textul sizecache a fost schimbat să spună a. în ea ar exista un bug creat
adăugat autor Ross Dargan, sursa
sizcache nu este combinată cu numărul aleatoriu până când se va apela metoda .replace . Cu toate acestea, aveți dreptate în a doua linie de cod care oferă un rezultat echivalent.
adăugat autor Blazemonger, sursa

Da, ai dreptate. Doar un alt mod de ao face.

3
adăugat
ce dacă "sizcache" este un șir dinamic care poate avea puncte zecimale semnificative în el? : P
adăugat autor jbabey, sursa
+1 pentru a răspunde la întrebare.
adăugat autor Mirthquakes, sursa

Cred că utilizează "+" "pentru a converti dintr-un număr într-un șir.

1
adăugat
Avem deja o conversie de șir!
adăugat autor Randomblue, sursa

Da, metoda dvs. va produce același rezultat.

Partea + " este utilizată pentru a arăta numărul într-un șir. Apoi, funcția replace este apelată pe șirul respectiv și șirul sizcache este prefixat.

Cu toate acestea, cu metoda dvs., adăugați mai întâi acel șir la număr (și convertiți numărul într-un șir în proces), apoi apelați replace pentru întregul lucru. Deoarece eliminați doar puncte, rezultatul este același.

0
adăugat

Nu este același lucru. În versiunea lor, ei primesc un număr aleatoriu, transformându-l într-un șir prin concatenarea unui șir gol către el, eliminând punctul, apoi appendign sizcache . Versiunea dvs. adaugă sizcache la numărul aleator, apoi elimină punctul.

Acordat, rezultatul final este același, dar ar putea fi diferit cu o altă valoare a șirului, să spunem că acesta conține un punct ca siz.cache .

0
adăugat
Vrei să spui că sizcache ar putea conține un punct?
adăugat autor Randomblue, sursa
În acest caz, nu ar putea fi , este un literal șir. Cu toate acestea, ar putea să fie înlocuit în viitor cu ceva cu un punct în el și codul va funcționa în continuare.
adăugat autor Alex Turpin, sursa

Cred că ar putea fi o modalitate rapidă de a arunca valoarea returnată a Math.random() ca șir de caractere, deci replace() poate fi folosit.

0
adăugat
Conversia de caractere se efectuează deja.
adăugat autor Randomblue, sursa