Последние учебники веб-разработки
×

JS Руководство

JS ГЛАВНАЯ JS Введение JS Куда JS Вывод JS Синтаксис JS Заявления JS Комментарии JS переменные JS операторы JS арифметика JS присваивание JS Типы данных JS функции JS Объекты JS Объем JS Мероприятия JS Строки JS Методы струнных JS чисел JS Методы Number JS математический JS Даты JS Форматы даты JS Методы Дата JS Массивы JS Методы массивов JS Booleans JS Сравнения JS условия JS переключатель JS петля For JS В то время как Loop JS Ломать JS Тип преобразования JS RegExp JS ошибки JS отладка JS Подъемно JS Строгий режим JS Гид по стилю JS Лучшие практики JS Ошибки JS Представление JS Зарезервированные слова JS JSON

JS формы

Формы проверки Формы API

JS объект

Определения объектов Свойства объекта Методы объекта Прототипы объектов

JS функции

Определения функций Функциональные параметры Функция Призвание Функция Затворы

JS HTML DOM

DOM вступление DOM методы DOM Документ DOM элементы DOM HTML DOM CSS DOM Анимации DOM Мероприятия DOM EventListener DOM навигация DOM Вершины DOM Nodelist

JS браузер BOM

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

JS Примеры

JS Примеры JS HTML DOM JS HTML вход JS HTML Объекты JS HTML Мероприятия JS браузер JS викторина JS Резюме

JS Рекомендации

JavaScript Объекты HTML DOM Объекты


 

JavaScript Распространенные ошибки


Эта глава указывает на некоторые распространенные ошибки JavaScript.


Нечаянно Использование оператора присваивания

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

Это , if оператор возвращает false (как и ожидалось) , поскольку х не равен 10:

var x = 0;
if (x == 10)
Попробуй сам "

Это , if оператор возвращает true (может быть , не как и следовало ожидать), потому что 10 верно:

var x = 0;
if (x = 10)
Попробуй сам "

Это , if оператор возвращает false (возможно , не как и следовало ожидать), поскольку 0 является ложным:

var x = 0;
if (x = 0)
Попробуй сам "

Задание всегда возвращает значение задания.


Ожидая дряблая Сравнение

В обычном сравнении, тип данных не имеет значения. Это , если оператор возвращает true :

var x = 10;
var y = "10";
if (x == y)
Попробуй сам "

В строгом сравнении, тип данных имеет значение. Это , если оператор возвращает false :

var x = 10;
var y = "10";
if (x === y)
Попробуй сам "

Это распространенная ошибка забывать, что заявления переключатель использовать строгое сравнение:

Этот случай переключатель будет отображать предупреждение:

var x = 10;
switch(x) {
    case 10: alert("Hello");
}
Попробуй сам "

Этот случай переключатель не будет отображаться предупреждение:

var x = 10;
switch(x) {
    case "10": alert("Hello");
}
Попробуй сам "

Непонятный Дополнение & Concatenation

Дополнение о добавлении номеров.

Конкатенация о добавлении строк.

В JavaScript обе операции используют один и тот же оператор +.

Из-за этого, добавляя число как число будет производить различный результат от добавления номера в виде строки:

var x = 10 + 5;          // the result in x is 15
var x = 10 + "5";        // the result in x is "105"
Попробуй сам "

При добавлении двух переменных, это может быть трудно предвидеть результат:

var x = 10;
var y = 5;
var z = x + y;           // the result in z is 15

var x = 10;
var y = "5";
var z = x + y;           // the result in z is "105"
Попробуй сам "

Непонимание поплавков

Все числа в JavaScript сохраняются в виде 64-битных чисел с плавающей точкой (поплавки).

Все языки программирования, в том числе JavaScript, имеют трудности с точными значениями с плавающей запятой:

var x = 0.1;
var y = 0.2;
var z = x + y            // the result in z will not be 0.3
if (z == 0.3)            // this if test will fail
Попробуй сам "

Для того, чтобы решить эту проблему выше, он помогает умножать и делить:

пример

var z = (x * 10 + y * 10) / 10;       // z will be 0.3
Попробуй сам "

Взломать JavaScript Строка

JavaScript позволит разорвать оператор на две строки:

Пример 1

var x =
"Hello World!";
Попробуй сам "

Но, преодолев заявление в середине строки не будет работать:

Пример 2

var x = "Hello
World!";
Попробуй сам "

Вы должны использовать "обратный слэш", если вы должны разорвать заявление в строке:

Пример 3

var x = "Hello \
World!";
Попробуй сам "

кладя запятой

Из-за неуместного точкой с запятой, этот блок кода будет выполняться независимо от значения х:

if (x == 19);
{
    // code block 
}
Попробуй сам "

Ломать оператор возврата

Это поведение по умолчанию JavaScript, чтобы автоматически закрыть заявление в конце строки.

Из-за этого эти два примера будет возвращать один и тот же результат:

Пример 1

function myFunction(a) {
    var power = 10 
    return a * power
}
Попробуй сам "

Пример 2

function myFunction(a) {
    var power = 10;
    return a * power;
}
Попробуй сам "

JavaScript также позволит вам разбить оператор на две строки.

Из-за этого, пример 3 также будет возвращать один и тот же результат:

Пример 3

function myFunction(a) {
    var
    power = 10; 
    return a * power;
}
Попробуй сам "

Но что произойдет, если вы нарушите оператор возврата в две строки, как это:

Пример 4

function myFunction(a) {
    var
    power = 10; 
    return
    a * power;
}
Попробуй сам "

Функция возвращает неопределенное!

Зачем? Потому что думает JavaScript вы имели в виду:

Пример 5

function myFunction(a) {
    var
    power = 10; 
    return;
    a * power;
}
Попробуй сам "

объяснение

Если оператор является неполным, как:

var

JavaScript будет пытаться завершить заявление, прочитав следующую строку:

power = 10;

Но так как это утверждение является полным:

return

JavaScript автоматически закроет его следующим образом:

return;

Это происходит потому, что закрытие (окончание) заявления с запятой не является обязательным в JavaScript.

JavaScript закрывает оператор возврата в конце линии, потому что это полное утверждение.

Никогда не прерывайте оператор возврата.


Доступ к Массивам с именованными индексами

Многие языки программирования поддерживают массивы с именованными индексами.

Массивы с именованными индексами называются ассоциативными массивами (или хэшей).

JavaScript не поддерживает массивы с именованными индексами.

В JavaScript массивы используют пронумерованные индексы:

пример

var person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
var x = person.length;         // person.length will return 3
var y = person[0];             // person[0] will return "John"
Попробуй сам "

В JavaScript объекты использовать именованные индексы.

Если вы используете с именем индекса, при доступе к массиву, JavaScript будет переопределить массив стандартного объекта.

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

Пример:

var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
var x = person.length;         // person.length will return 0
var y = person[0];             // person[0] will return undefined
Попробуй сам "

Завершение Массив Определение с запятой

Неправильно:

points = [40, 100, 1, 5, 25, 10,];

Некоторые двигатели JSON и JavaScript потерпит неудачу, или вести себя неожиданно.

Верный:

points = [40, 100, 1, 5, 25, 10];

Завершение определения объекта с запятой

Неправильно:

person = {firstName:"John", lastName:"Doe", age:46,}

Некоторые двигатели JSON и JavaScript потерпит неудачу, или вести себя неожиданно.

Верный:

person = {firstName:"John", lastName:"Doe", age:46}

Неопределенное не нулево

С помощью JavaScript нуль для объектов, не определен для переменных, свойств и методов.

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

Если вы хотите, чтобы проверить, если объект существует, это вызовет ошибку, если объект не определен:

Неправильно:

if (myObj !== null && typeof myObj !== "undefined") 

Из-за этого, вы должны проверить TypeOf () сначала:

Верный:

if (typeof myObj !== "undefined" && myObj !== null) 

Ожидая Область применения Блок Уровень

JavaScript не создает новые возможности для каждого кодового блока.

Это верно во многих языках программирования, но не так в JavaScript.

Это распространенная ошибка, среди новых разработчиков JavaScript, чтобы поверить, что этот код возвращает неопределенное значение:

пример

for (var i = 0; i < 10; i++) {
    // some code
}
return i;
Попробуй сам "