Привет, коллеги-исследователи JavaScript! Угадайте, откуда я пишу эту статью? Да, вы правильно догадались - зал ожидания! В моей машине ремонтируют рулевую рейку, и вы не поверите, какую связь я нашел между этим и безумным принуждением JavaScript.
Рулевая рейка превратилась во что-то совершенно неожиданное, прямо как преобразования типов в JavaScript! И позвольте мне сказать вам, что я не смог управлять им, как и некоторые из моих кодов JavaScript.
В этой статье я демистифицирую приведение типов в JavaScript и помогу вам понять основы преобразования типов. Понимание приведения не только улучшит читабельность вашего кода, но и предотвратит незаметные ошибки, которые могут закрасться в ваши программы.
Неявное и явное принуждение
Принуждение в JavaScript можно разделить на два типа: неявное и явное принуждение. Неявное приведение происходит автоматически, когда вы смешиваете разные типы данных, тогда как явное приведение требует от вас явного преобразования типа значения с помощью встроенных функций, как показано ниже.
Number(); String(); Boolean();
Приведение строки
Приведение строк преобразует другие типы данных, такие как числа и логические значения, в строки. Часто наблюдается при объединении данных оператором +. Например,
//following will implicitly convert the number 25 into a string. console.log("Age: " + 25) //Age 25
Числовое принуждение
Числовое принуждение преобразует строки и логические значения в числа. При использовании арифметических операций, таких как (-) (/) или (*), JavaScript неявно приводит значения к числам. Например, посмотрите на следующие операции.
("50"-10) //40 (50-"10") //40 ("50"/10) //5 (50/"10") //5 ("10"*5) //50 (10*"5") //50
Поведение унарного плюса (+)
Унарный плюс (+) ведет себя иначе. Если соседние операнды являются числами, плюс (+) добавит их, но если какой-либо из операндов является строкой, JavaScript принудит другой к строке.
Посмотрите на два примера ниже.
("40"+10) //"4010" (40+"10") //"4010"
Когда имеется более двух операндов, мы можем видеть, как JavaScript оценивает первые два операнда, а затем оценивает результат первых двух со следующим… и так далее. Посмотрите на примеры ниже.
("40"+10+10) //"401010"
Этапы оценки следующие
- 40 + 10 = 4010
- 4010 + 10 = 401010
(40+10+"10") //"5010"
Этапы оценки следующие
- 40 + 10 = 50
- 50 + “10” = “5010”
Точно так же мы получим «502030» из следующей операции.
(40+10+"20"+30) //"502030"
Принуждение с помощью логических сравнений
Логические операции также включают принуждение. Во время сравнений JavaScript пытается преобразовать операнды в общий тип перед вычислением выражения:
(10 == "10") //true ("10" == 10) //true ("10" == "10") //true (10 == 10) //true
Истинное и ложное принуждение
Истинное и ложное принуждение преобразует любое значение в соответствующее ему логическое представление (истинное или ложное).
Следующие значения в JavaScript являются ложными.
- false: логическое значение «false».
- 0: ноль (как 0, так и -0).
- "": пустая строка.
- null: обозначает отсутствие какого-либо значения.
- undefined: представляет переменную без присвоенного значения.
- NaN: обозначает "не число" и представляет собой недопустимую арифметическую операцию.
if (0) { // This block won't execute due to falsy coercion } if ('') { // This block won't execute due to falsy coercion }
Все остальные значения являются истинными и будут приведены к истинным.
if ("hello") { // This block will execute due to truthy coercion } if (" ") { // This block will execute due to truthy coercion }
Лучшие практики принуждения
Оператор свободного равенства JavaScript (==) выполняет приведение при сравнении двух значений разных типов. Это может привести к неожиданным результатам, поскольку оператор пытается сделать значения сопоставимыми, приведя их к общему типу. Лучше использовать оператор строгого равенства (===), чтобы избежать непреднамеренного принуждения.
Чтобы написать надежный и поддерживаемый код, всегда стремитесь к явному принуждению, когда это возможно. Это делает ваши намерения понятными другим разработчикам и снижает вероятность неожиданного поведения. Например, используйте Number() для преобразования строки в число или String() для явного преобразования значения в строку.
Когда наша рулевая рейка наконец-то залатана, и я прощаюсь с комнатой ожидания, я не могу не почувствовать новую признательность за причудливое принуждение JavaScript. Наше путешествие в царство преобразований типов было не чем иным, как захватывающим! Мы научились ориентироваться по дорогам неявного и явного принуждения, оттачивая свои навыки, чтобы направлять наш код в правильном направлении.
Удачного кодирования!