Выбрать главу

let myVariable;

console.log(myVariable); // undefined

function doNothing() {

// watch paint dry

return;

}

let weekendPlans = doNothing();

console.log(weekendPlans); // undefined

let person = {

firstName: "Isaac",

lastName: "Newton"

}

console.log(person.title); // undefined

В своем коде вы, скорее всего, не станете присваивать undefined чему-либо. Вы уделите время проверке, не является ли значение или что-либо еще undefined. Такую проверку можно выполнить несколькими способами. Первый из них очень прост, но практически всегда работает:

if (myVariable === undefined) {

// делает что-нибудь

}

Оборотная сторона этого подхода связана с истинной природой undefined. Держитесь крепче: undefined — это глобальная переменная, которая определяется за нас автоматически. Это означает, что потенциально мы можем ее переопределить, например, на true или что-либо другое, что нам нужно. Если undefined будет переопределена, то нарушит работу кода в случае проверки только с оператором === или ==. Чтобы избежать подобного безобразия, наиболее безопасным способом выполнения проверки на undefined будет использование typeof и затем уже оператора ===:

let myVariable;

if (typeof myVariable === "undefined") {

console.log("Define me!!!");

}

Это гарантирует выполнение проверки на undefined и возвращение верного ответа.

NULL == UNDEFINED, но NULL!== UNDEFINED

Продолжая тему странности == и ===: если вы когда-нибудь проверите null == undefined, то ответом будет true. Если же вы используете ===, то есть null === undefined, то ответом будет false.

Причина в том, что == производит приведение, присваивая значениям такие типы, какие JS посчитает целесообразными. Используя ===, вы проверяете и тип, и значение. Это уже полноценная проверка, которая определяет, что undefined и null на деле являются двумя разными вещами.

Монету в шляпу шестиглазому (то есть Тревору Маккаули) за то, что указал на это!

КОРОТКО О ГЛАВНОМ

Я неспроста отложил напоследок эти встроенные типы. null и undefined — наименее интересные члены коллектива, но при этом зачастую самые недопонятые. Умение использовать null, а также обнаруживать его и undefined — это очень важные навыки, которыми следует овладеть. Иначе вы рискуете столкнуться с ошибками, которые будет очень сложно обнаружить.

Если у вас появились вопросы о null и undefined или вы просто хотите пообщаться с самыми дружелюбно настроенными разработчиками на планете, пишите на https://forum.kirupa.com.

ЧАСТЬ III. DOM, милый DOM

Глава 23. Все о JSON (объектная нотация JavaScript)

Когда дело доходит до хранения, извлечения или передачи данных, то в нашем распоряжении оказывается множество форматов файлов и структур данных. Вы наверняка уже использовали текстовые файлы, документы Word, электронные таблицы Excel и т. д. Что же касается фронтенд-разработки, то здесь лидирует один формат — JSON, JavaScript Object Notation.

В этой главе мы узнаем все о том, что делает объекты JSON столь прекрасными, рассмотрим в деталях происходящее внутри них и узнаем, как можно считывать их значения для ваших собственных реализаций.

Поехали!

Что такое JSON?

В JavaScript для определения объектов вы используете специальный синтаксис объектного литерала:

let funnyGuy = {

firstName: "Conan",

lastName: "O'Brien",

getName: function () {

return "Name is: " + this.firstName + " " + this.lastName;

}

};

let theDude = {

firstName: "Jeffrey",

lastName: "Lebowski",

getName: function () {

return "Name is: " + this.firstName + " " + this.lastName;

}

};

let detective = {

firstName: "Adrian",

lastName: "Monk",

getName: function () {

return "Name is: " + this.firstName + " " + this.lastName;

}

};

Если вы не понимаете этот синтаксис, то настоятельно рекомендую почитать раздел «Об объектах подробней». Это существенно упростит понимание объектов JSON и работу с ними.

Внешне синтаксис объектного литерала выглядит как куча скобок, фигурных скобок и двоеточий, которые определяют свойства и значения объекта. Несмотря на такую внешнюю странность, изнутри все достаточно наглядно. Вы вольны использовать большинство из распространенных типов данных и обстоятельно представлять их свойства и значения в виде пар ключей и значений, разделенных двоеточием. Помимо всего перечисленного не менее важно то, что этот синтаксис также позволяет создавать структуру и допускает вложенные значения. В целом это достаточно приятный способ представления объектов JavaScript в литеральном виде.

Формат JSON очень многое заимствует от синтаксиса объектного литерала. Ниже приведен пример реальных данных JSON, возвращенных API WeatherUnderground для отображения погоды в моем родном городе Сиэтле: