Я считаю себя новичком, когда дело доходит до написания кода на JavaScript, но в последнее время я немного больше играл с этим языком и наткнулся на несколько случайных вещей, которыми я поделился. Итак, если вы новичок в JavaScript или просто не знаете его так, как хотели бы, я надеюсь, что вы найдете эту статью полезной.
0 == «0», даже если 0 — ложь, а «0» — правдиво
На первый взгляд, это очень странно, но как только вы прочитаете больше об операторах сравнения, это имеет смысл. Чтобы избежать недоразумений, подобных этому, всегда используйте строго равный оператор (===) для такого сравнения. Лоус Лазарис написал целую статью о непредсказуемых результатах, которые могут произойти, если оператор сравнения равенства используется неправильно.
console.log(0 == "0"); // true console.log(0 === "0"); // false
Вы также можете проверить таблицу истинности JavaScript , но не пытайтесь запомнить ее ?
1 + 2 + ”3 ″! =“ 1 ″ + ”2 ″ +3
JavaScript довольно терпим, когда речь идет о строках и числах, просто подумайте об операторе «+», который добавляет и объединяет. В отличие от других языков программирования, которые кричали бы вам при встрече с строкой выше, JavaScript на самом деле пытается решить эту проблему, предполагая, что числа тоже являются строками.
1+2+"3" != "1"+"2"+3; // 3+"3" != "12"+3 // 33 !=123
JavaScript поднимает объявления переменных и функций.
Следующий фрагмент кода будет работать без проблем, поскольку JavaScript позволяет использовать функцию до того момента, когда она была объявлена.
sayHello(); //Call the function before its declaration function sayHello() { console.log("Hello!"); }
Однако следите за выражениями функций и объявлениями переменных! Хотя их объявления также отображаются, определение функции и, соответственно, инициализация переменной — нет. Если вы хотите узнать больше, Джеффри Уэй и Джеймс Аллардис написали несколько замечательных статей о перемещении переменных и функций в JavaScript.
Пропуск ключевого слова ‘var’
var
Ключевые слова помогают определить переменную и при необходимости инициализации его значение. Но когда вы его опускаете, код все еще работает, и интерпретатор JavaScript не отображает ошибки. Это происходит потому, что соответствующая переменная будет создана в глобальной области, а не в локальной области, в которой вы ее определили. Такое поведение часто описывается как ловушка JavaScript, и настоятельно рекомендуется избегать ее, поскольку она может привести к неожиданным результатам .
var myFunction = function() { var foo = 'Hello'; // Declares and initializes foo, scoped to myFunction bar = 'World!'; // This works too, but the scope is global };
Точка с запятой необязательна, но…
Вы можете сходить с ума и писать операторы JavaScript, не заботясь о добавлении точек с запятой в конце. Но тут есть подвох. Хотя JavaScript автоматически вставляет точки с запятой в конце каждой строки, в некоторых случаях, особенно если вы являетесь поклонником отступов в стиле Allman , могут возникнуть проблемы.
// OK return { 'ok': false }; // not OK return { 'ok': false };
Дуглас Крокфорд привел лучший пример по этому вопросу, и почему вы всегда должны использовать точки с запятой в коде JavaScript. На первый взгляд, приведенные выше фрагменты кода выглядят так же: возвращают объект. На самом деле второй сбой, потому что возвращаемое значение происходит undefined
из-за автоматической инъекции точки с запятой.
return; // returns undefined // code block that does nothing { 'ok': false }
Кроме того, если вы еще этого не сделали, вы должны попытаться принять соглашение Дугласа Крокфорда о JavaScript .
Консоль твой друг.
Вы уже знаете фразу «Google — ваш друг». Имея это в виду, я бы сказал, что «Консоль — ваш друг» в этом случае сильно применим. У объекта console есть несколько интересных методов, которые вы можете использовать для отладки кода JavaScript. , log()
будучи самым известным на сегодняшний день.
Я думаю, что console.log()
больше не нужно никакого представления. Это неблокирующее поведение и хорошее форматирование — большие преимущества по сравнению с alert()
. Проблема здесь в том, что, хотя он console.log
был реализован в IE8 и IE9, console
объект каким-то образом не создается, пока вы не переключите DevTools.
Итак, я обнаружил, что если вы разрешите какие-либо console.log
вызовы в вашем коде, он сломает ваш код в браузерах, таких как IE8 и IE9 . После поиска решения я нашел хорошее и простое решение.
По сути, если window
объект не имеет доступа к консоли отладки браузера, просто переопределите console.log
фиктивную функцию, которая вообще ничего не делает.
if (!window.console) { console.log = function(){}; }
Красочные сообщения журнала
Но если методы логирования log
, info
, error
и предупредить не достаточно , чтобы отличить ваши сообщения, вы можете попробовать добавить ваш собственный стиль для log
сообщений.
var consoleStyling = 'background: #0f0; color: #fff; font-weight: bold;'; console.log('%c A colorful message', consoleStyling);
Отладка с помощью console.table ()
Опять же, если использование console.log()
кажется слишком распространенным, вы можете попробовать выполнить более сложную отладку JavaScript console.table()
. Очень приятная особенность console.table () в том, что он также работает с объектами.
var browsers = { chrome: { name: "Chrome", engine: "WebKit" }, firefox: { name: "Firefox", engine: "Gecko" } }; console.table(browsers);
Заключительные слова
Когда вы узнаете больше о том, как на самом деле работает JavaScript, в вашей голове неизбежно возникнет следующий вопрос: почему в JavaScript так много разных способов сделать одно и то же? Возможно, ответ заключается в том, чтобы мы могли выбрать свой собственный путь с учетом лучших практик.
Приведенные выше примеры — это всего лишь некоторые вещи, которые я имел в виду, когда писал эту статью, но их гораздо больше. Спасибо за чтение, и я с нетерпением жду ваших комментариев о том, какие фрагменты кода JavaScript вы смущали в первые дни изучения языка.