Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   3%$#@# ява-скрипт и конкретно про null (https://javascript.ru/forum/misc/49888-3%25%24-%40-yava-skript-i-konkretno-pro-null.html)

kostyanet 02.09.2014 10:19

3%$#@# ява-скрипт и конкретно про null
 
Как-то в последнее время не складывается у меня с JS, вот из последнего:

if(this.dataset.error!=null) {
			console.log(this.dataset.error);
			balloon(this);
		}


в лог идет со строки 144

Код:

"null" forms.js:144
Скорее всего я тупой. Но в чем? Проверку делал и по типу === эквипенисуально валится под условие и печатает null.

Теперь вот как инициализируется в цикле

elem.dataset.error=null;


typeof дает string. Ну пусть дает, но как тогда вообще проверять на null, или в чем именно тут косяк. Потому что оно в json валится в dataset?

kostyanet 02.09.2014 10:24

Ладно, тогда другой вопрос: куда обычно втыкаются такого рода проперти, ну, которые в процессе возникают и надо их вместе с элементом таскать?

ixth 02.09.2014 10:26

dataset всегда возвращает строку. Делай не присвоение null, а delete this.dataset.error.

Aetae 02.09.2014 10:29

dataset - это аттрибут, аттрибут в свою очередь может быть только строкой.
elem.dataset.error=null; - преобразует null к строке. elem.dataset.error содержит строку "null".

this.dataset.error != null приводит для сравнения к примитивным типам, где null -> false, а строка "null" -> true.

kostyanet 02.09.2014 10:34

Понятно, я тупой. А второй вопрос? Куда обычно складывают эти свои проперти?

То есть я могу законно залепить elem.error=null и не париться с атрибутами?

kostyanet 02.09.2014 10:41

Нет, все равно юмора не понял. В js ничего ж вроде не типируется. Получается в dataset встроен какой-то сеттер который приводит все барахло в строку?

Aetae 02.09.2014 10:45

kostyanet, можешь.
Но обычно складывают отдельно DOM, отдельно данные.

DataSet - просто надстройка над атрибутами для удобства. А атрибуты по спеке могут быть только строкой(что очевидно, т.к. атрибут это то, что мы видим в html)

kostyanet 02.09.2014 10:59

Нет, если рассуждать программно, то атрибут - такие же данные, а чтобы он стал строкой на выводе стоит метод типа __toString(). Так ведь обычно в программировании делятся данные на данные и отображение данных.

Фиг с ним, с атрибутом. За ответы спасибо. Про дом тоже вспомнил, полгода не занимался - все забыл. То есть я собираю в массив не элементы дома, а свой массив объектов в одном из пропертей которого - элемент дома и всякие другие связанные с этим элементом. Блин, самое смешное что так у меня и сделана клиентская часть datagrid. Вот что значит полгода не видеть кодов.

kostyanet 02.09.2014 11:00

А если в домный элемент пихать, кстати, все работает, халява. :)


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