Розуміння цієї лінії jQuery

Лінія 3906 jQuery 1.7rc1 є

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

Я не розумію сенсу використання + '' . Хіба це не еквівалент вище

expando = ("sizcache" + Math.random ()). замінити ('.', ''),

2
так, ви не можете замінити на номер
додано Автор Tules, джерело
Оригінальний спосіб jQuery, теоретично, швидше. Швидкість заміни рядка прив'язана безпосередньо до довжини вхідного рядка. Додавання до довжини рядка вхідних даних з даними, які не потрібно замінити, є прямим, але малим втратою продуктивності. Якщо ця лінія кодів називається значною сумою, економія продуктивності може стати помітною.
додано Автор Rob, джерело

6 Відповіді

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

Це не те ж саме, якщо текст розміру змінено, щоб включити a.

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

наприклад.

6
додано
Але зачекайте, "sizcache" - це рядок, тому перетворення в рядок повинно вже відбуватися.
додано Автор Randomblue, джерело
не зовсім так. Це буде те ж саме: ("sizcache" + Math.random ()). Замінити ('.', ''), Але якщо розмір кешу тексту змінився, то маємо a. у ньому тоді буде створена помилка
додано Автор Ross Dargan, джерело
sizcache не поєднується з випадковим числом, поки не буде викликаний метод .replace . Однак, ви маєте рацію, що ваш другий рядок коду дає еквівалентний результат.
додано Автор Blazemonger, джерело

Так, ви праві. Просто ще один спосіб це зробити.

3
додано
Що робити, якщо "sizcache" є динамічним рядком, який може мати в ньому значущі десяткові точки? : P
додано Автор jbabey, джерело
+1 Для відповіді на запитання.
додано Автор Mirthquakes, джерело

Я вважаю, що вони використовують "+" "для перетворення з числа в рядок.

1
додано
Ми вже маємо конверсію рядків!
додано Автор Randomblue, джерело

Так, ваш метод дасть такий самий результат.

Частина + '' використовується для перетворення числа на рядок. Потім викликається функція replace , на яку вказується рядок sizcache .

Тим не менш, з вашим методом ви спочатку додаєте цей рядок до числа (і перетворюєте число в рядок в процесі), а потім викликаєте replace на всю річ. Оскільки ви просто видаляєте крапки, результат такий самий.

0
додано

Це не те ж саме. У своїй версії вони отримують випадкове число, перетворюючи його в рядок, конкатенуючи порожній рядок до нього, видаляючи крапку, а потім додаємо sizcache . Ваша версія додає sizcache до випадкового числа, а потім видаляє крапку.

Зрештою, кінцевий результат однаковий, але потенційно може відрізнятися від іншого значення рядка, скажімо, якщо він містив точку, подібну siz.cache .

0
додано
Ви хочете сказати, що sizcache може містити крапку?
додано Автор Randomblue, джерело
У цьому випадку, може не, це рядок літералу. Тим не менш, може в майбутньому бути перетворений на щось з крапкою в ньому, і код все одно буде працювати.
додано Автор Alex Turpin, джерело

Я думаю, що це швидкий спосіб передати повернуте значення Math.random() як рядок символів, тому можна використовувати replace() .

0
додано
Перетворення рядків вже виконано.
додано Автор Randomblue, джерело