Эта глава указывает на некоторые распространенные ошибки 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
Попробуй сам " Для того, чтобы решить эту проблему выше, он помогает умножать и делить:
Взломать JavaScript Строка
JavaScript позволит разорвать оператор на две строки:
Но, преодолев заявление в середине строки не будет работать:
Вы должны использовать "обратный слэш", если вы должны разорвать заявление в строке:
кладя запятой
Из-за неуместного точкой с запятой, этот блок кода будет выполняться независимо от значения х:
if (x == 19);
{
// code block
}
Попробуй сам " Ломать оператор возврата
Это поведение по умолчанию JavaScript, чтобы автоматически закрыть заявление в конце строки.
Из-за этого эти два примера будет возвращать один и тот же результат:
JavaScript также позволит вам разбить оператор на две строки.
Из-за этого, пример 3 также будет возвращать один и тот же результат:
Но что произойдет, если вы нарушите оператор возврата в две строки, как это:
Функция возвращает неопределенное!
Зачем? Потому что думает JavaScript вы имели в виду:
объяснение
Если оператор является неполным, как:
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, чтобы поверить, что этот код возвращает неопределенное значение: