У JavaScript є два значення, які в основному кажуть "я не існую" - undefinedі null.
Властивість, якій програміст нічого не призначив, буде undefined, але для того, щоб стати властивістю null, nullявно потрібно призначити їй.
Я колись думав, що в цьому є потреба, nullоскільки undefinedце примітивна цінність і nullпредмет. Це не так, навіть якщо typeof nullдасть результат 'object': Насправді, обидва є примітивними значеннями - це означає, що ні повернутись із функції конструктора undefinedне nullможна, ні обидва будуть перетворені на порожній об'єкт (треба викинути помилку, щоб оголосити провал у конструкторах).
Вони також обидва оцінюють falseу булевих контекстах. Єдиною реальною різницею, яку я можу придумати, є те, що один оцінює NaN, а другий - 0у числових контекстах.
То чому є те і інше, undefinedі nullякщо це просто бентежить програмістів, які неправильно перевіряють, nullнамагаючись з’ясувати, встановлено чи ні властивість?
Що я хотів би знати, якщо хтось має розумний приклад, коли це потрібно використовувати, nullякий не міг би бути виражений, використовуючи undefinedнатомість.
Таким чином, загальний консенсус, схоже, undefinedозначає, що "такої власності немає", а null"властивість існує, але вона не має ніякого значення".
Я міг би жити з цим, якщо реалізація JavaScript насправді нав'язує цю поведінку - але undefinedце абсолютно дійсне примітивне значення, тому його можна легко присвоїти існуючим властивостям для розірвання цього контракту. Тому, якщо ви хочете переконатися, що існує властивість, вам доведеться скористатися inоператором або hasOwnProperty()все одно. Тож ще раз: яке практичне використання для окремих значень для undefinedта null?
Я фактично використовую, undefinedколи хочу скинути значення властивостей, які вже не використовуються, але яких я не хочу delete. Чи слід використовувати nullзамість цього?
In JavaScript, there are two values which basically say 'I don't exist' - undefined and null.Ні, це лише undefinedговорить.
undefined.