Loading...
milen8204 avatar milen8204 296 Точки

[Useful Info] Коментар по разликата между undefined, null и 0 в javaScript

Здравейте колеги,

Ще си ползволя да напиша един коментар относно физическия смисъл на на променливата със стойност undefined, null и 0 (стойност нула) в javaScript. Първо държа да отбележа, че аз съм начинещ и нямам големи познания по езика, просто споделям мнение и искам да чуя и други мнения по тази тема.

Моето умозаключение е следното: Съдейки от това, че javaScript е създаден с първоначална идея да се развива изцяло в уеб, следва логиката му да се търси в средата на уеб. За себе си имам обяснение за разликата във физическия смисъл на това кога някоя пороменлива е undefined, null приема стойност нула и той е следния:

Искаме да използваме променлива от несъществуващо поле в сайт: тогава стойността и ще е undefined. 

Искаме да използваме променлива от съществуващо поле в сайт, в което потребителя не е въвел нищо: тогава стойността и ще е null.

Искаме да използваме променлива от съществуващо поле в сайт, в което потребителя не е въвел стойност нула: тогава стойността и ще е нула.

Естествено примера е частен случай (пък може и да не е верен) и ще се радвам ако се получи дискусия и някой даде други примери.

Тагове:
0
JavaScript Fundamentals
RoYaL avatar RoYaL Trainer 6849 Точки
Best Answer

Някоя променлива е undefined когато никога не е декларирана или когато никога след декларацията й не й е въведена стойност. 

Променлива е NULL когато е празен стринг или експлицитно зададена NULL. Ако експлицитно е зададено NULL, то не важи vice-versa правилото - т.е. не е празен стринг.

За стойност нула обаче не мога да се съглася въобще. Прието е в джаваскрипт, заради loose type-а да се проверява с торйно равенство, т.е. да се сравняват и типовете.

Ще дам малко примерчета по въпроса:

 

> a
ReferenceError: a is not defined // имаме грешка - никога не е била дефинирана или с декларирана стойност

> console.log(typeof a === 'undefined')
true // проверяваме дали типът е undefined и той наистина е

> var a; // декларираме я
undefined

> console.log(typeof a === 'undefined')
true // при същата проверка от по-горе, въпреки декларацията, тя не е NULL, а е undefined

> a
undefined // нямам грешка като в началото


> document.body.innerHTML = '<input class="test" value="">' // създаваме input без стойност
"<input class="test" value="">"

> var input = document.getElementsByClassName("test")[0] // присвояваме обекта към input променлива
undefined

> input // проверяваме дали всичко е ок
<input class=​"test" value>​

> console.log(input.value)
// връща празен стринг, но не дава грешка или undefined


> console.log(typeof input.value == 'undefined')
false // не е undefined

> console.log(!input.value)
true // връща тру при отрицание => null (не означава в този случай, че е false обаче

> console.log(input.value === '')
true // същата проверка минава и при проверка за празен стринг

> var x = null;
> console.log(x === '')
false // при експлицитно задаване на NULL, то не епразен стринг

> console.log(input.value === 0)
false
> console.log(input.value == 0)
true

> typeof 0
"number"
> typeof input.value
"string"

 

3
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.