Меню
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP КАК СДЕЛАТЬ ПРОГРАММЫ SW3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS КИБЕРБЕЗОПАСНОСТЬ НАУКА О ДАННЫХ
     ❯   

JS Учебник


JS Версии


JS Объекты


JS Функции


JS Классы


JS Асинхронный


JS HTML DOM


JS Браузер BOM


JS Веб APIы


JS AJAX


JS JSON


JS или jQuery


JS Графика


JS Примеры


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




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



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


Случайное использование оператора присваивания

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

Этот if оператор возвращает false (как и ожидалось), потому что x не равно 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)
Попробуйте сами »

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


Ожидание бесполезного сравнения

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

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

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

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

Распространенная ошибка - забывать, что оператор switch использует строгое сравнение:

Переключатель регистра case switch отобразит предупреждение:

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

Переключатель регистра case switch не будет отображать предупреждение:

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


Смешение сложение и конкатенация

Сложение касается сложения чисел.

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

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

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

var x = 10 + 5; // результат в x равен 15
var x = 10 + "5"; // результат в x равен "105"
Попробуйте сами »

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

var x = 10;
var y = 5;
var z = x + y; // результат в z равен 15

var x = 10;
var y = "5";
var z = x + y; // результат в z равен "105"
Попробуйте сами »

Недоразумение чисел с плавающей точкой

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

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

var x = 0.1;
var y = 0.2;
var z = x + y // результат в z не будет 0.3
Попробуйте сами »

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

Пример
var z = (x * 10 + y * 10) / 10; // z будет 0.3
Попробуйте сами »

JavaScript Разрыв строк

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

Пример 1

var x =
"Привет Мир!";
Попробуйте сами »

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

Пример 2

var x = "Привет
Мир!";
Попробуйте сами »

Вы должны использовать "бэкслэш" (обратную косую черту), если вы должны разбить оператор в строке:

Пример 3

var x = "Привет \
Мир!";
Попробуйте сами »

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

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

if (x == 19);
{
// блок кода
}
Попробуйте сами »

Разрыв оператора return

По умолчанию в 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;
}
Попробуйте сами »

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

Пример 4

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

Функция вернет undefined!

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

Пример 5

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

Объяснение

Если объявление неполное, например:

var

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

power = 10;

Но поскольку это объявление завершено:

return

JavaScript автоматически закроет его вот так:

return;

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

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

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


Доступ к массивам с помощью именованных индексов

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

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

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

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

Пример
var person = [];
person[0] = "Щипунов";
person[1] = "Андрей";
person[2] = 46;
var x = person.length; // person.length вернет 3
var y = person[0]; // person[0] вернет "Щипунов"
Попробуйте сами »

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

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

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

Пример:

var person = [];
person["firstName"] = "Щипунов";
person["lastName"] = "Андрей";
person["age"] = 46;
var x = person.length; // person.length вернет 0
var y = person[0]; // person[0] вернет undefined
Попробуйте сами »

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

Завершающие запятые в определениях объектов и массивов допустимы в ECMAScript 5.

Пример объекта:

person = {firstName:"Щипунов", lastName:"Андрей", age:46,}

Пример массива:

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

ПРЕДУПРЕЖДЕНИЕ !!

Internet Explorer 8 выйдет из строя.

JSON не допускает использование конечных запятых.

JSON:

person = {"firstName":"Щипунов", "lastName":"Андрей", "age":46}

JSON:

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

Undefined не является Null

Объекты, переменные, свойства и методы JavaScript могут быть undefined.

Кроме того, пустые объекты JavaScript могут иметь значение null.

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

Вы можете проверить, существует ли объект, проверив, является ли тип undefined:

Пример:

if (typeof myObj === "undefined")
Попробуйте сами »

Но вы не можете проверить, является ли объект null, потому что это вызовет ошибку, если объект undefined:

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

if (myObj === null)

Чтобы решить эту проблему, вы должны проверить, не является ли объект null и не является ли undefined.

Но это все равно может выдать ошибку:

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

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

Поэтому вы должны протестировать на нет, undefined прежде чем сможете проверить на нет null:

Правильно:

if (typeof myObj !== "undefined" && myObj !== null)
Попробуйте сами »


×

Связаться с отделом продаж

Если вы хотите использовать услуги schoolsw3 как образовательное учреждение, команда или предприятие, отправьте нам электронное письмо:
sales@schoolsw3.com

Сообщить об ошибке

Если вы хотите сообщить об ошибке или внести предложение, отправьте нам электронное письмо:
help@schoolsw3.com

Schoolsw3 оптимизирован для обучения и подготовки. Примеры могут быть упрощены для улучшения чтения и обучения. Учебники, ссылки и примеры постоянно проверяются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего контента.
При использовании Schoolsw3 вы соглашаетесь прочитать и принять наши условия использования,
политику использования файлов cookie и конфиденциальности.

Авторское право 1999- принадлежит Refsnes Data. Все права защищены. Schoolsw3 работает на SW3.CSS.