Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.12.2010, 19:25
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Чем отличается undefined от null
В чём отличие undefined от null?
Например такой код:
alert(document.getElementById('ooo2'));
при обращении к несуществующему элементу на html-странице выдаст "null".

А такой код:
var arr=new Array(3);
alert(arr[0]);
при обращении к несуществующему элементу массива выдаст "undefined".

Или ещё пример, когда переменной можно прям назначить значение, что она неопределена
var dd=undefined;
alert(dd);
Выдаст "undefined".

Чем различаются null и undefined? В каких случаях мы должны ожидать null, а в каких undefined?
Ответить с цитированием
  #2 (permalink)  
Старый 31.12.2010, 19:31
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

null означает "ничего".
undefined означает, что значение не определено.
Ответить с цитированием
  #3 (permalink)  
Старый 31.12.2010, 21:06
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от hrundel
var arr=new Array(3);
alert(arr[0]);
при обращении к несуществующему элементу массива выдаст "undefined".
почему не существующему? ты место под массив выделил и массив инициализировал
var arr=new Array(3);
var dd=undefined;
alert(dd);
Выдаст "undefined".
а здесь вопрос сложный-не думал что ты присваиваешь в этом случае значение а не присваиваешь тип?
ты присваиваеш дд значение переменной ундефенет-какая при этом у тебя не определена и в этом случае она становится глобальной переменной с неопределённым значением.

Последний раз редактировалось dmitriymar, 31.12.2010 в 21:12.
Ответить с цитированием
  #4 (permalink)  
Старый 31.12.2010, 21:14
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Сообщение от B@rmaley.e><e Посмотреть сообщение
null означает "ничего".
undefined означает, что значение не определено.
Немного смущает, что при обращении к несуществующему элементу на странице мы получаем null, хотя логичнее undefined (???).
Ответить с цитированием
  #5 (permalink)  
Старый 31.12.2010, 21:34
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

hrundel,
null это когда такое значение могло бы быть, но его нету
undefined это когда такого значения и быть не должно

window.kslsfkl; // Нет
window.onmouseover; // null


Можно и так объяснить.
Ответить с цитированием
  #6 (permalink)  
Старый 31.12.2010, 22:17
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

Дополнительная информация:
alert([typeof null,typeof undefined]);​
Ответить с цитированием
  #7 (permalink)  
Старый 31.12.2010, 22:57
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от SV0L0CH
alert([typeof null,typeof undefined])
интересно... определяется тип типа....где логика в этом?
Ответить с цитированием
  #8 (permalink)  
Старый 31.12.2010, 23:04
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

SV0L0CH,
что на это скажешь?

var undefined=7;
alert([typeof null,typeof undefined]);


ну значение null не буду пытаться изменить поскольку он идёт как зарезервированное слово также как и любой из операторов.
бормалей прав

Последний раз редактировалось dmitriymar, 31.12.2010 в 23:15.
Ответить с цитированием
  #9 (permalink)  
Старый 31.12.2010, 23:21
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от dmitriymar
почему не существующему? ты место под массив выделил и массив инициализировал
hrundel прав - это именно обращение к несуществующему элементу. А вот выделение места под массив - это что-то не из js. Для размышления:
var a1 = [], a2 = new Array(3);
a1.length = 3;
alert(a1.toString() === a2.toString());
Или length тоже выделяет что-то?
И, кста, присвоение переменной типа - это, типа, что-то новенькое
Ответить с цитированием
  #10 (permalink)  
Старый 01.01.2011, 00:09
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Sweet,
ты хоть понял что ты написал? известно имя известна длинна-и не существует?я не вижу отличия в том что ты объявил сразу массив опр длинны или потом ему длину объявил. именно тот вариант когда от перемены мест слагаемых ничего не меняется

B@rmaley.e><e прав
это обращение к сущ элементу ну тип значения которого не определён. проведу аналогию -представь себе пустой контейнер ж.д. -ты знаешь его тип цвет инвентарный номер и т.д.-это условно имя какое определено. но пока ты не положиш в него какойто тип груза-он не станет контейнером для перевозки какого то вида груза.тоесть контейнер для перевозки неизвестно чего-контейнер.ундефенет.
ну а если его нет-то его нет вообще-ноль

Последний раз редактировалось dmitriymar, 01.01.2011 в 00:20.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery.validator is undefined cmygeHm jQuery 1 29.12.2010 11:04
Область видимости внутри функций FiMko Общие вопросы Javascript 12 02.11.2010 03:01
Операторы сравнения, null, undefined, number 0, empty string("") alexeis Общие вопросы Javascript 5 28.09.2010 21:11
Удалить ряд символов перед или после курсора до определенного сивола brd Javascript под браузер 3 30.10.2009 08:20
PHP, JavaScript, MySQL solomusic Серверные языки и технологии 14 18.12.2008 14:05