Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   null и undefined - в чем разница и применение (https://javascript.ru/forum/misc/35121-null-i-undefined-v-chem-raznica-i-primenenie.html)

macdack 31.01.2013 10:15

null и undefined - в чем разница и применение
 
комрады, прошу вразумить меня дабы я ясно понял назначение этих сущностей и область применений

пока мне не понятно и кажется что они практически одно и то же и налицо избыточность

например можно ли забыть про undefined и всегда и везде обойтись null

ksa 31.01.2013 10:48

Цитата:

Ключевое слово null в JavaScript имеет специальный смысл. Обычно считается,
что у значения null объектный тип и оно говорит об отсутствии объекта. Значе
ние null уникально и отличается от любых других. Если переменная равна null,
следовательно, в ней не содержится допустимого объекта, массива, числа, стро
ки или логического значения.
Цитата:

Еще одно специальное значение, иногда используемое в JavaScript, – undefined.
Оно возвращается при обращении либо к переменной, которая была объявлена,
но которой никогда не присваивалось значение, либо к свойству объекта, кото
рое не существует
. Заметьте, что специальное значение undefined – это не то же
самое, что null.
Хотя значения null и undefined не эквивалентны друг другу, оператор эквива
лентности == считает их равными.
Разницу я выделил.

Цитата:

Рассмотрим следующее выражение:
my.prop == null

Это сравнение истинно, либо если свойство my.prop не существует, либо если оно
существует, но содержит значение null. Поскольку значение null и undefined обо
значают отсутствие значения, это равенство часто оказывается тем, что нам
нужно. Однако когда действительно требуется отличить значение null от значе
ния undefined, нужен оператор идентичности === или оператор typeof
(c) «JavaScript. Подробное руководство», 5-е издание. Автор Дэвид Флэнаган

macdack 31.01.2013 11:27

я это читал в учебнике

мне непонятно почему не использовать для пустой переменной null

зачем вводить дополнительную сущность для обозначения "ничего" ?
если они при сравнении эквивалентны

то есть получается что можно писать программы совсем забыв про undefined, потому что это содержимое пустой переменной и это то же самое что null, это синоним

то есть теоретически js.программист может никогда не использовать undefined
так ?

ksa 31.01.2013 11:36

macdack, null применяется к объектам. undefined к переменным и свойствам объекта.
Вроде все ясно...

macdack 31.01.2013 11:46

переменная это всего лишь контейнер
[объект} это всего лишь набор контейнеров внутри контейнера

null - это содержимое контейнера, значение контейнера
новый пустой контейнер содержит значение undefined которое эквивалентно null
отсюда логический вывод - лексически в языке значение undefined есть избыточное, и язык мог быть построен без него

Вроде все ясно... ))

ksa 31.01.2013 11:52

Цитата:

Сообщение от macdack
мне непонятно почему не использовать для пустой переменной null

Ну не к пустой... А к неопределенной. :) Запросто можно использовать.

Цитата:

Сообщение от macdack
зачем вводить дополнительную сущность для обозначения "ничего" ?

Ту можно опять сослаться на ту книжку
Цитата:

В отличие от null, значение undefined не является зарезервированным словом
Цитата:

Сообщение от macdack
js.программист может никогда не использовать undefined
так ?

Да. :yes:

ksa 31.01.2013 11:53

Цитата:

Сообщение от macdack
лексически в языке значение undefined есть избыточное, и язык мог быть построен без него

Вроде все ясно...

Ну видал как всё прояснилось! :D

ksa 31.01.2013 11:56

Цитата:

Сообщение от ksa
null применяется к объектам. undefined к переменным и свойствам объекта.

Это оказалось ошибочным высказыванием.
Просто null по типу объект, а undefined - нет. И не более того...

macdack 31.01.2013 11:57

Цитата:

Сообщение от ksa (Сообщение 230655)
Ну не к пустой... А к неопределенной.

рассуждайте ясно - пустой контейнер он и есть неопределенный

когда вы его заполняете пустотой null он также неопределенный, ибо жаваскрипт при сравнении не делает различия

macdack 31.01.2013 12:00

Цитата:

Сообщение от ksa (Сообщение 230657)
Это оказалось ошибочным высказыванием.
Просто null по типу объект, а undefined - нет. И не более того...

не знаю как вы а я называю объектом не всё подряд
грубо говоря - переменная это клетка, а набор клеток это тело-объект

практически не важно что null это тип-объект
в первую очередь это элементарное значение-содержимое контейнера означающее отсутствие содержимого


Часовой пояс GMT +3, время: 06:21.