Если вы изучаете javascript, вы должны понимать, как javascript обрабатывает значения, как он их сравнивает и как он работает с ними, и вам нужно это понимать.

В javascript одна концепция известна под многими именами, такими как преобразование типов, приведение типов и принуждение. Когда мы пытаемся сравнить два значения разных типов данных или пытаемся работать с ними, javascript для этого преобразует их в один и тот же тип данных.

Арифметические операторы

console.log(2 + "2" - "4") // 18

В данном случае мы работаем.

Когда мы работаем со значениями двух разных типов, какое значение будет преобразовано в то, что определяется Оператором.

В этом коде сначала у нас есть 2, что является числом, затем мы добавляем строку к числу, когда мы добавляем строку к числу, число преобразуется в строку, поэтому они объединятся, и мы получим «22». и затем мы вычитаем из него 4. когда мы вычитаем число из строки, строка преобразуется в число. следовательно, конечный результат будет 22 - 4, что дает 18.

если строку нельзя преобразовать в число, то что?

console.log("charan" - 4) // NaN (Not a Number)

Трудно всегда помнить, что во что будет преобразовано? Но все же вот что

const str = "10";
const num = 5;

console.log(str + num); // "105" - Number to String conversion
console.log(num + str); // "510" - Number to String conversion

console.log(str - num); // 5 - String to Number conversion
console.log(num - str); // 5 - String to Number conversion

console.log(str * num); // 50 - String to Number conversion
console.log(num * str); // 50 - String to Number conversion

console.log(str / num); // 2 - String to Number conversion
console.log(num / str); // 0.5 - String to Number conversion

Это хорошо для работы со строками и числами. Но что, если мы хотим перейти на другой уровень, например массивы и объекты?

console.log({} + []) // [object Object]

когда мы пытаемся добавить объект в массив, оба операнда здесь преобразуются в строку, объект оценивается как [object Object], а пустой массив оценивается как empty string, после чего это просто конкатенация.

console.log(true + []) // true 
console.log(typeof (true + [])) //string

Что происходит в этом случае, так это то, что javascript пытается преобразовать true в соответствующее примитивное значение, которое равно “true”, пустой массив преобразуется в пустую строку. Но все меняется, когда мы делаем что-то подобное

console.log(true + false) // 1

Здесь javascript пытается преобразовать оба в соответствующие числовые значения, поскольку мы говорим, что 1 соответствует действительности, а 0 — ложно.

Операторы сравнения

Если Javascript, мы можем сравнивать значения двух разных типов, используя либо ==, либо ===.

Когда мы делаем == , мы в основном говорим, что сравним оба значения, этот javascript выполнит приведение и приведет оба значения к одним и тем же данным, а затем проверит, равны ли они или нет. если мы делаем === , это говорит javascript не выполнять какое-либо приведение типов перед их сравнением.

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

console.log(2 == "2") // true
console.log(2 === "2") // false

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

Когда мы используем оператор сравнения, результат всегда будет оцениваться как логическое значение. Но как насчет таких операндов, как объекты и массивы?

console.log({}==[]) // false

объекты и массивы сравниваются по их ссылкам в памяти, а не по фактическим значениям, поэтому, если вы сравниваете два объекта, это всегда будет ложно. Так что никакого принуждения здесь не будет.

Заключение Многие говорят, что javascript странный, потому что они не понимают, как он работает за кулисами. Я надеюсь, что эта статья прояснила для вас многое, чем раньше. Увидимся в следующем.