Вы устали писать скучный код JavaScript, который просто работает? Вы готовы к чему-то странному, смешному и совершенно неожиданному? Что ж, вам повезло, потому что в этом посте мы собираемся исследовать некоторые из самых причудливых и забавных вещей, которые вы можете делать с помощью JavaScript. Приготовьтесь смеяться, чесать затылок и, возможно, даже узнавать что-то новое.
Загадочный случай NaN
NaN означает «не число», и это специальное значение в JavaScript, представляющее неопределенное или непредставимое значение. Но знаете ли вы, что NaN ничему не равен, в том числе и самому себе? Верно, NaN !== NaN. Как будто NaN — это призрак, который даже не может видеть себя в зеркале.
console.log(NaN === NaN); // false console.log(NaN == NaN); // false
Запутанная правда о типах
JavaScript — это язык с динамической типизацией, что означает, что переменные могут изменять свой тип во время выполнения. Но знаете ли вы, что тип оператора иногда может возвращать неожиданные результаты? Например, тип null возвращает «object», а не «null». А тип NaN возвращает «число», а не «Не число». Это похоже на то, как тип оператора играет в игру «угадай мой тип» и намеренно ошибается.
console.log(typeof null); // object console.log(typeof NaN); // number
Скрытая сила точки с запятой
В JavaScript точки с запятой необязательны, но знаете ли вы, что иногда они могут изменить смысл вашего кода? Например, рассмотрим этот невинно выглядящий код:
function foo() { return { bar: 42 }; } console.log(foo()); // undefined
Ожидали ли вы, что foo() вернет объект со свойством bar? Что ж, сюрприз! Из-за отсутствия точки с запятой после оператора return JavaScript автоматически вставляет точку с запятой, превращая ваш код в:
function foo() { return; { bar: 42 }; } console.log(foo()); // undefined
Теперь ясно, что foo() возвращает undefined, а не объект. Так что помните, всегда используйте точку с запятой, если вы не хотите играть в игру «угадай, что означает мой код».
Странный мир правды и лжи
В JavaScript не все верно или ложно. Существуют также истинные и ложные значения, которые приводятся к истинным или ложным в логическом контексте. Но знаете ли вы, что некоторые ценности не являются ни истинными, ни ложными? Например, NaN, null, undefined и пустая строка являются ложными. Но то же самое можно сказать и о 0, который кажется вполне допустимым числом. И строка «false» является истинной, хотя это и не логическое значение false. Это похоже на то, как правдивость и ложь играют в игру «кто настоящий булев».
console.log(Boolean(NaN)); // false console.log(Boolean(null)); // false console.log(Boolean(undefined)); // false console.log(Boolean('')); // false console.log(Boolean(0)); // false console.log(Boolean('false')); // true
Непредсказуемое поведение этого
В JavaScript это ключевое слово является ссылкой на объект, который «владеет» текущим кодом. Но знаете ли вы, что значение этого иногда может быть неожиданным? Например, в функции, вызываемой из глобальной области, это относится к глобальному объекту (окну в браузере, глобальному в Node.js). А во вложенной функции this может ссылаться на неправильный объект или даже на undefined. Это похоже на игру «Где я?» и заблудиться.
var obj = { foo: function() { console.log(this); }, bar: { baz: function() { console.log(this); } } }; obj.foo(); // obj obj.bar.baz(); // bar object, not obj
Заключение
В заключение, JavaScript — это уникальный язык, полный сюрпризов и особенностей. Хотя иногда его поведение может показаться странным или даже разочаровывающим, именно эта непредсказуемая природа делает работу с JavaScript такой волнующей. Приняв его особенности и продолжая исследовать множество странных и неожиданных уголков, вы раскроете весь потенциал этого мощного языка и раскроете свой творческий потенциал как разработчика. Так что продолжайте раздвигать границы и наслаждайтесь поездкой!
Спасибо за чтение!
Вот несколько ресурсов для изучения продвинутого JavaScript:
- Веб-документы MDN:это отличный ресурс для изучения передовых концепций JavaScript, включая новейшие функции в ES6 и более поздних версиях. Даются четкие пояснения и практические примеры.
- JavaScript.info: этот веб-сайт предлагает всестороннее и подробное руководство по JavaScript, охватывающее все, от основ до продвинутых концепций, таких как замыкания, прототипы и асинхронность/ Ждите.
- Eloquent JavaScript: эта книга Марин Хавербеке является настоятельно рекомендуемым ресурсом для изучения продвинутого JavaScript. Он охватывает такие темы, как функции высшего порядка, объектно-ориентированное программирование и асинхронное программирование.
- Вы не знаете JS: это серия книг Кайла Симпсона, посвященная внутренней работе JavaScript. Он охватывает такие темы, как область действия и замыкания, ключевое слово this и асинхронное программирование.
- Frontend Masters:это онлайн-платформа для обучения, которая предлагает курсы по различным сложным темам JavaScript, таким как функциональное программирование, React и Node.js.
- Надеюсь, эти ресурсы помогут вам освоить расширенный JavaScript!
Дополнительные материалы на PlainEnglish.io.
Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .
Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.