У 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
.