Лучшая практика JavaScript

Избегайте глобальных переменных,new,=====,eval()

Избегайте глобальных переменных

Старайтесь использовать глобальные переменные как можно меньше.

Это включает все типы данных, объекты и функции.

Глобальные переменные и функции могут быть перекрыты другими скриптами.

Используйте локальные переменные и изучите, как их использоватьКлوزуры

Всегда объявляйте локальные переменные

Все переменные, используемые в функции, должны быть объявлены каклокальныепеременные

локальные переменныенеобходимочерез var Используйте ключевые слова для объявления, в противном случае они станут глобальными переменными.

Строгий режим не позволяет переменным, не объявленным.

Объявление в верхней части

Хорошая практика кодирования - помещать все объявления в верхнюю часть каждого скрипта или функции.

Преимущества этого таковы:

  • Получите более чистый код
  • Предоставляет хорошее место для поиска локальных переменных
  • Легче избежать ненужных глобальных переменных
  • Уменьшает вероятность повторного объявления
// Объявление в верхней части
var firstName, lastName, price, discount, fullPrice;
// Используется позже
firstName = "Bill";
lastName = "Gates";
price = 19.90;
discount = 0.10;
fullPrice = price * 100 / discount;

Это также можно использовать для переменных цикла:

// Объявление в верхней части
var i;
// Используется позже
for (i = 0; i < 5; i++)  {

По умолчанию, JavaScript будет перемещать все объявления в верхнюю часть (JavaScript подъем).

Инициализация переменных

Хорошая привычка инициализировать переменные при их объявлении.

Преимущества этого таковы:

  • код становится более чистым
  • инициализируйте переменные в отдельном месте
  • избегайте неопределенных значений
// производите объявления и инициализацию в начале
var firstName = "",
    lastName  = "",
    price = 0,
    discount = 0,
    fullPrice  = 0,
    myArray = [],
    myObject = {};

Инициализация переменных позволяет нам понять предполагаемое использование и ожидаемый тип данных.

Пожалуйста, не объявляйте объекты чисел, строк или булевых значений

Пожалуйста, всегда рассматривайте числа, строки или булевы значения как примитивы, а не как объекты.

Если объявлять эти типы как объекты, это может замедлить выполнение и вызвать неприятные побочные эффекты:

Пример

var x = "Bill";             
var y = new String("Bill");
(x === y) // результат false, потому что x является строкой, а y является объектом.

Попробуйте сами

или даже хуже:

Пример

var x = new String("Bill");             
var y = new String("Bill");
(x == y) // результат false, потому что вы не можете сравнивать объекты.

Попробуйте сами

Пожалуйста, не используйте new Object()

  • Пожалуйста, используйте {} вместо new Object()
  • Пожалуйста, используйте "" вместо new String()
  • Пожалуйста, используйте 0 вместо new Number()
  • Пожалуйста, используйте false вместо new Boolean()
  • Пожалуйста, используйте [] вместо new Array()
  • Пожалуйста, используйте /()/ вместо new RegExp()
  • Пожалуйста, используйте function (){} вместо new Function()

Пример

var x1 = {};           // новый объект
var x2 = "";           // новый примитивный строковый値
var x3 = 0;            // новый примитивный числовой値
var x4 = false;        // новый примитивный булевый値
var x5 = [];           // новый объект массива
var x6 = /()/;         // новый объект регулярного выражения
var x7 = function(){}; // новый объект функции

Попробуйте сами

осознайте автоматическое преобразование типов

Пожалуйста, обратите внимание, что числа могут неожиданно быть преобразованы в строки или NaN(не число)

JavaScript относится к свободным типам. Переменные могут содержать различные типы данных, и переменные могут изменять свои типы данных:

Пример

var x = "Hello";     // typeof x является строкой
x = 5;               // изменить typeof x на число

Попробуйте сами

Если выполняется математическое вычисление, JavaScript может преобразовать числовое значение в строку:

Пример

var x = 5 + 7;       // x.valueOf() является 12, typeof x является числом
var x = 5 + "7";     // x.valueOf() является 57, typeof x является строкой
var x = "5" + 7;     // x.valueOf() является 57, typeof x является строкой
var x = 5 - 7;       // x.valueOf() является -2, typeof x является числом
var x = 5 - "7";     // x.valueOf() является -2, typeof x является числом
var x = "5" - 7;     // x.valueOf() является -2, typeof x является числом
var x = 5 - "x";     // x.valueOf() является NaN, typeof x является числом

Попробуйте сами

Если вы вычесть строку из строки, это не вызовет ошибку, а вернет NaN(Не число):

Пример

"Hello" - "Dolly"    // возвращает NaN

Попробуйте сами

Использование === для сравнения

== Сравнительные операторы всегда выполняют преобразование типов перед сравнением (для соответствия типам).

===== Оператор forzairovoche для сравнения значений и типов:

Пример

0 == "";        // true
1 == "1";       // true
1 == true;      // true
0 === "";       // false
1 === "1";      // false
1 === true;     // false

Попробуйте сами

Использование Parameter Defaults

Если при вызове функции отсутствует параметр, то значение отсутствующего параметра будет установлено undefined

undefined Значение может повредить ваш код. Установка defaultValue для параметров - это хорошая привычка.

Пример

function myFunction(x, y) {
    if (y === undefined) {
        y = 0;
    }
}

Попробуйте сами

Пожалуйста, читайтеПараметры функцииЭту главу для получения дополнительной информации о параметрах функции.

используйте default для завершения switch

используйте по умолчанию для завершения вашего switch Предложение. Даже если вы считаете, что это не необходимо.

Пример

switch (new Date().getDay()) {
    случай 0:
        day = "Воскресенье";
        прервать;
    случай 1:
        day = "Понедельник";
         прервать;
    случай 2:
        day = "Вторник";
         прервать;
    случай 3:
        day = "Среда";
         прервать;
    случай 4:
        day = "Четверг";
         прервать;
    случай 5:
        day = "Пятница";
         прервать;
    случай 6:
        day = "Суббота";
         прервать;
    по умолчанию:
        day = "Неизвестно";
} 

Попробуйте сами

Избегайте использования eval()

eval() Функция используется для того, чтобы текст можно было использовать как код. В большинстве случаев это не необходимо.

Поскольку позволяет запускать любое код, это также означает安全问题.