ЛУЧШИЙ САЙТ ДЛЯ РАЗРАБОТЧИКОВ
×

JavaScript учебник

JS HOME JS Introduction JS Where To JS Output JS Statements JS Syntax JS Comments JS Variables JS Operators JS Arithmetic JS Assignment JS Data Types JS Functions JS Objects JS Scope JS Events JS Strings JS String Methods JS Numbers JS Number Methods JS Arrays JS Array Methods JS Array Sort JS Array Iteration JS Dates JS Date Formats JS Date Get Methods JS Date Set Methods JS Math JS Random JS Booleans JS Comparisons JS Conditions JS Switch JS Loop For JS Loop While JS Break JS Type Conversion JS Bitwise JS RegExp JS Errors JS Debugging JS Hoisting JS Strict Mode JS this Keyword JS Style Guide JS Best Practices JS Mistakes JS Performance JS Reserved Words JS Versions JS Version ES5 JS Version ES6 JS JSON

JS Forms

JS Forms Forms API

JS Objects

Object Definitions Object Properties Object Methods Object Constructors Object Prototypes

JS Functions

Function Definitions Function Parameters Function Invocation Function Call Function Apply Function Closures

JS HTML DOM

DOM Intro DOM Methods DOM Document DOM Elements DOM HTML DOM CSS DOM Animations DOM Events DOM Event Listener DOM Navigation DOM Nodes DOM Collections DOM Node Lists

JS Browser BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS AJAX

AJAX Intro AJAX XMLHttp AJAX Request AJAX Response AJAX XML File AJAX PHP AJAX ASP AJAX Database AJAX Applications

JS JSON

JSON Intro JSON Syntax JSON vs XML JSON Data Types JSON Objects JSON Arrays JSON Parse JSON Stringify JSON PHP JSON HTML JSON JSONP

JS References

JavaScript Objects HTML DOM Objects


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 () используется для выполнения текста в виде кода. Почти во всех случаях это не должно быть необходимо использовать.

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