Яке призначення символу плюс перед змінною?


262

це справді звучить як просте запитання, але мені не пощастило шукати. що робить +dв

function addMonths(d, n, keepTime) { 
    if (+d) {

засоби?



3
Це ж питання, але заголовок іншої сторінки не описує загальний випадок, як це відбувається
геотеорія

1
можливий дублікат Що +…означає JavaScript
Bergi

Відповіді:


312

+Оператор повертає числове уявлення об'єкта. Тож у вашому конкретному випадку, здавалося б, передбачується чи є чи не dнульове число чи ні.

Довідка тут . І, як зазначалося в коментарях, тут .




Мені просто цікаво, що є більш ефективним, проаналізуйте рядок у ціле число за допомогою функції parseInt або за допомогою оператора плюс?
акарльштайн

1
Чим він відрізняється від .parseInt()?
Даніель В.

1
@acarlstein зі посилання MDN у відповіді: "Хоча унарне заперечення (-) також може конвертувати не числа, унарний плюс - це найшвидший і бажаний спосіб перетворення чогось у число , оскільки він не виконує жодних інших операцій над числом . " (Тільки для "офіційного" відповіді)
AN

22

Це одинарний "+" оператор, який дає числовий вираз. Це було б те саме, що d*1, я вважаю.


12

Як пояснено в інших відповідях, вона перетворює змінну в число. Особливо корисно, коли d може бути числом або рядком функція що оцінює число.

Приклад (за допомогою addMonthsфункції у запитанні):

addMonths(34,1,true);
addMonths("34",1,true);

то +dволевиявлення оцінюється до числа у всіх випадках. Таким чином, уникнути необхідності перевіряти тип та приймати різні шляхи коду залежно від того, чи dє це число, функція чи рядок, які можна перетворити на число.


+dне буде оцінювати число до першого прикладу виклику addMonths
Gus Crawford

правда, я не знаю, що я робив, коли писав це. +function(){...}буде виробляти NaNне оцінювати функцію
RubenLaguna

4
Чи можете ви відредагувати свою відповідь, щоб усунути божевільних? Це досить заплутано.
Бух Бух
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.