JavaScript Рекомендации
Избегайте глобальных переменных, Избегайте новых, Избегайте = =, Избегайте eval ()
Избегайте глобальных переменных
Минимизация использования глобальных переменных.
Сюда входят все типы данных, объекты и функции.
Глобальные переменные и функции могут быть перезаписаны другими скриптами.
Вместо этого используйте локальные переменные и Узнайте, как использовать js functio closures.
Всегда объявлять локальные переменные
Все переменные, используемые в функции, должны быть объявлены как локальные переменные.
Локальные переменные должны быть объявлены с помощью ключевого слова var , в противном случае они станут глобальными переменными.
Строгий режим не разрешает необъявленные переменные.
Объявления сверху
Это хорошая практика кодирования, чтобы поместить все объявления в верхней части каждого сценария или функции.
Это позволит:
- Дать более чистый код
- Предоставление единого места для поиска локальных переменных
- Упростить предотвращение нежелательных (подразумеваемых) глобальных переменных
- Уменьшить вероятность нежелательных повторных деклараций
// Declare at the beginning
var firstName, lastName, price, discount, fullPrice;
// Use later
firstName = "John";
lastName = "Doe";
price = 19.90;
discount = 0.10;
fullPrice = price * 100 / discount;
This also goes for loop variables:
// Declare at the beginning
var i;
// Use later
for (i = 0; i <5; i++)
{
By default, JavaScript moves all declarations to the top (JavaScript Hoisting).
Инициализация переменных
Это хорошая практика кодирования для инициализации переменных при их объявлении.
Это позволит:
- Дать более чистый код
- Предоставление единого места для инициализации переменных
- Избегайте неопределенного значения
// Declare and initiate at the beginning
var firstName = "",
lastName
= "",
price = 0,
discount = 0,
fullPrice
= 0,
myArray = [],
myObject = {};
Инициализация переменных предоставляет представление о предполагаемом использовании (и предполагаемом типе данных).
Никогда не объявляйте числа, строки или логические объекты
Всегда обрабатывать числа, строки или логические значения в качестве примитивных значений. Не как объекты.
Объявление этих типов как объектов, замедляет скорость выполнения и создает неприятные побочные эффекты:
Пример
var x = "John";
var y = new String("John");
(x === y) // is false because x is a string and y is an object.
Или еще хуже:
Пример
var x = new String("John");
var y = new String("John");
(x == y) // is false because you cannot compare objects.
Не использовать новый объект ()
- Использовать {} вместо нового объекта ()
- Используйте "" вместо новой строки ()
- Использовать 0 вместо нового числа ()
- Используйте false вместо новых логических ()
- Используйте [] вместо нового массива ()
- Использовать/()/вместо нового регулярного выражения ()
- Используйте функцию () {} вместо новой функции ()
Пример
var x1 = {}; // new object
var x2 = ""; // new primitive string
var x3 = 0; // new primitive number
var x4 = false; // new primitive boolean
var x5 = []; // new array object
var x6 = /()/; // new regexp object
var x7 = function(){}; // new function object
Остерегайтесь автоматического преобразования типов
Остерегайтесь того, что числа могут быть случайно преобразованы в строки или NaN (не число).
JavaScript слабо типизирован. Переменная может содержать различные типы данных, а переменная может изменять тип данных:
Пример
var x = "Hello"; // typeof x is a string
x = 5; // changes typeof x to a number
При выполнении математических операций JavaScript может преобразовать числа в строки:
Пример
var x = 5 + 7; // x.valueOf() is 12, typeof x is a number
var x = 5 + "7"; // x.valueOf() is 57, typeof x is a string
var x = "5" + 7; // x.valueOf() is 57, typeof x is a string
var x = 5 - 7; // x.valueOf() is -2, typeof x is a number
var x = 5 - "7"; // x.valueOf() is -2, typeof x is a number
var x = "5" - 7; // x.valueOf() is -2, typeof x is a number
var x = 5 - "x"; // x.valueOf() is NaN, typeof x is a number
Вычитание строки из строки не создает ошибку, но возвращает NaN (не число):
Пример
"Hello" - "Dolly" // returns NaN
Использовать = = = сравнение
Оператор = = сравнения всегда преобразует (в совпадающие типы) перед сравнением.
Оператор = = = заставляет сравнивать значения и тип:
Пример
0 == ""; // true
1 == "1"; // true
1 == true; // true
0 === ""; // false
1 === "1"; // false
1 === true;
// false
Использовать параметры по умолчанию
Если функция вызывается с отсутствующим аргументом, значение отсутствующего аргумента устанавливается в не определено.
Неопределенные значения могут нарушать код. Это хорошая привычка назначать значения по умолчанию для аргументов.
Пример
function myFunction(x, y) {
if (y === undefined) {
y = 0;
}
}
Подробнее о параметрах и аргументах функции в параметрах функции
Завершение переключателей по умолчанию
Всегда заканчивайте операторы Switch по умолчанию. Даже если вы считаете, что в этом нет необходимости.
Пример
switch (new Date().getDay()) {
case 0:
day = "Sunday";
break;
case 1:
day = "Monday";
break;
case 2:
day = "Tuesday";
break;
case 3:
day = "Wednesday";
break;
case 4:
day = "Thursday";
break;
case 5:
day = "Friday";
break;
case 6:
day = "Saturday";
break;
default:
day =
"Unknown";
}
Избегайте использования eval ()
Функция eval () используется для выполнения текста в виде кода. Почти во всех случаях это не должно быть необходимо использовать.
Поскольку он позволяет выполнять произвольный код, он также представляет проблему безопасности.