Строковое преобразование происходит, когда требуется представление чего-либо в виде строки.
Например, alert(value) преобразует значение к строке.
Также мы можем использовать функцию String(value)
let value = true;
console.log(typeof value); // boolean
value = String(value); // теперь value это строка "true"
console.log(typeof value); // stringlet value = 10;
value = String(value);
console.log(typeof value);console
let str = "123";
console.log(typeof str); // string
let num = Number(str); // становится числом 123
console.log(typeof num); // numberlet age = Number("Любая строка вместо числа");
console.log(age); // NaN, преобразование не удалосьconsole.log( "6" / "2" );console.log( "6" / "два" );console.log( "6" * "2" );console
console
console
Неявное приведение типов
console.log( "6" + "2" );console
console.log( Boolean(1) ); // true console.log( Boolean(0) ); // false console.log( Boolean("Привет!") ); // true console.log( Boolean("") ); // false
console.log( Boolean(" ") );
// true
?
Сложение +, умножение *, вычитание - и так далее.
Операнд – то, к чему применяется оператор. Например, в умножении 5 * 2 есть два операнда: левый операнд равен 5, а правый операнд равен 2. Иногда их называют «аргументами» вместо «операндов».
let x = 1;
x = -x;
console.log( x ); // -1let x = 1, y = 3;
console.log( y - x ); // 2, бинарный минус// Не влияет на числа
let x = 1;
console.log( +x ); // 1
let y = -2;
console.log( +y ); // -2
// Преобразует не-числа в число
console.log( +true ); // 1
console.log( +"" ); // 0Унарный, то есть применённый к одному значению, плюс + ничего не делает с числами. Но если операнд не число, унарный плюс преобразует его в число.
let a, b, c;
a = b = c = 2 + 2;
console.log( a ); // 4
console.log( b ); // 4
console.log( c ); // 4Давайте отметим, что в таблице приоритетов также есть оператор присваивания =. У него один из самых низких приоритетов: 3.
Именно поэтому, когда переменной что-либо присваивают, например, x = 2 * 2 + 1, то сначала выполнится арифметика, а уже затем произойдёт присваивание =.
console.log( 5 % 2 ); // 1, остаток от деления 5 на 2
console.log( 8 % 3 ); // 2, остаток от деления 8 на 3
console.log( 6 % 3 ); // 0, остаток от деления 6 на 3console.log( 2 ** 2 ); // 4 (2 * 2)
console.log( 2 ** 3 ); // 8 (2 * 2 * 2)
console.log( 2 ** 4 ); // 16 (2 * 2 * 2 * 2)let counter = 2;
counter++; // работает как counter = counter + 1
console.log( counter ); // 3let counter = 2;
counter--;let counter = 1;
let a = ++counter; // (*)
console.log(a); // 2let counter = 1;
let a = counter++; // (*) меняем ++counter на counter++
console.log(a); // 1В первом случае в переменную a запишется сразу увеличенное число. Во втором же случае в a запишется старое значение, т.к counter увеличится после присваивания! (a = counter++)
let n = 2;
n += 5; // теперь n=7 (работает как n = n + 5)
n *= 2; // теперь n=14 (работает как n = n * 2)
console.log( n ); // 14let n = 2;
n *= 3 + 5;
console.log( n ); // 16
//(сначала выполнится правая часть, превратив выражение в n *= 8)Вызов с присваиванием имеет в точности такой же приоритет, как обычное присваивание, то есть выполнится после большинства других операций
Операторы сравнения, как и другие операторы, возвращают значение. Это значение имеет логический тип.
console.log( 2 > 1 ); // true (верно)
console.log( 2 == 1 ); // false (неверно)
console.log( 2 != 1 ); // true (верно)let result = 5 > 4;
// результат сравнения присваивается переменной result
console.log( result ); // trueЧтобы определить, что одна строка больше другой, JavaScript использует «алфавитный» или «лексикографический» порядок.
Другими словами, строки сравниваются посимвольно.
console.log( 'Я' > 'А' ); // true
console.log( 'Кот' > 'Код' ); // true
console.log( 'Сонный' > 'Сон' ); // trueАлгоритм сравнения двух строк:
При сравнении значений разных типов, JavaScript приводит каждое из них к числу.
console.log( '2' > 1 ); // true, строка становится числом 2
console.log( 'f' == 1 ); // true, строка становится числом 1console.log( true == 1 ); // true
console.log( false == 0 ); // trueЛогическое значение true становится 1, а false – 0.
console.log( 0 == false ); // trueИспользование обычного сравнения == может вызывать проблемы. Например, оно не отличает 0 от false:
Та же проблема с пустой строкой:
console.log( '' == false ); // trueЭто происходит из-за того, что операнды разных типов преобразуются оператором == к числу. В итоге, и пустая строка, и false становятся нулём.
Если переменные a и b имеют разные типы, то проверка a === b немедленно возвращает false без попытки их преобразования.
console.log( 0 === false );
// false, так как сравниваются разные типы (число !== логический)Ещё есть оператор строгого неравенства !==, аналогичный !=
Немного правил, как писать красивый код. Пользуйтесь этой картинкой, как шпаргалкой!
Пригодится в будущем