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