Я вибрав це звідси
Невизначене значення - це примітивне значення, яке використовується, коли змінній не було призначено значення.
Нульове значення - це примітивне значення, яке представляє нульову, порожню або неіснуючу посилання.
Коли ви оголосите змінну через var і не надасте їй значення, вона матиме значення не визначене. Якщо ви спробуєте WScript.Echo () або попередити () це значення, ви нічого не побачите. Однак якщо додати до нього порожній рядок, він раптом з’явиться:
var s;
WScript.Echo(s);
WScript.Echo("" + s);
Ви можете оголосити змінну, встановити її на нуль, а поведінка ідентична, за винятком того, що ви побачите "null", роздруковані проти "undefined". Це дійсно невелика різниця.
Можна навіть порівняти змінну, яка не визначена з нульовою, або навпаки, і умова буде вірною:
undefined == null
null == undefined
Однак вони вважаються двома різними типами. Хоча невизначений тип є самим собою, нуль вважається спеціальним значенням об'єкта. Ви можете побачити це за допомогою typeof (), який повертає рядок, що представляє загальний тип змінної:
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
Запуск вищевказаного сценарію призведе до наступного виводу:
undefined
object
Незалежно від того, що вони різного типу, вони все одно будуть діяти однаково, якщо ви спробуєте отримати доступ до члена будь-якого з них, наприклад, це означає, що вони викинуть виняток. З WSH ви побачите жахливий "'ім'я' недійсне або не об'єкт", і це якщо вам пощастить (але це тема для іншої статті).
Ви можете чітко встановити змінну, яку не можна визначити, але я дуже раджу проти неї. Я рекомендую лише встановити змінні значення null і залишити невизначене значення для речей, які ви забули встановити. У той же час, я дуже закликаю вас завжди встановлювати кожну змінну. У JavaScript є ланцюг областей, що відрізняється від мов у стилі C, легко плутаючи навіть ветеранських програмістів, а встановлення змінних на null є найкращим способом запобігання помилок на його основі.
Інший випадок, коли ви побачите невизначене спливаюче вікно - це під час використання оператора видалення. Ті з нас із С-світу можуть неправильно трактувати це як руйнування об'єкта, але це не так. Ця операція робить видалення індекса з масиву або члена з Object. Для Arrays це не впливає на довжину, а скоріше, що індекс індексу вважається невизначеним.
var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);
Результатом вищезазначеного сценарію є:
0.) a
1.) undefined
2.) c
Ви також отримаєте невизначене повернення під час читання підписки або члена, який ніколи не існував.
Різниця між null та undefined полягає в тому, що JavaScript ніколи не встановлюватиме щось null, зазвичай це робимо ми. Хоча ми можемо встановити змінні значення невизначеними, ми віддаємо перевагу нульовим, оскільки це не те, що коли-небудь робиться для нас. Коли ви налагоджуєте це, це означає, що все, що встановлено на нуль, - це власне, а не JavaScript. Крім того, ці два особливі значення майже еквівалентні.
null
в JavaScript існує значення?