Приведение типов
Задача
Что выведет каждое выражение и почему?
[] + []; // ?
[] + {}; // ?
1 + '1' - 1; // ?
true + true; // ?
'5' - 2; // ?
'5' + 2; // ?
[1, 2] + [3, 4]; // ?
null + 1; // ?
undefined + 1; // ?
0.1 + 0.2; // ?Ответ
'' // [] + [] '[object Object]' // [] + {} 10 // 1 + '1' - 1 2 // true + true 3 // '5' - 2 '52' // '5' + 2 '1,23,4' // [1,2] + [3,4] 1 // null + 1 NaN // undefined + 1 0.30000000000000004 // 0.1 + 0.2
Разбор
Пошаговый разбор
Выражение Что происходит Результат [] + []Оба массива → строки ( ''), конкатенация''[] + {}[]→'',{}→'[object Object]', склейка'[object Object]'1 + '1' - 11 + '1'→'11'(строка), затем'11' - 1→10(минус приводит к числу)10true + truetrue→1,1 + 12'5' - 2-не работает со строками →'5'→53'5' + 2+со строкой → конкатенация'52'[1,2] + [3,4]оба массива → '1,2'и'3,4', склейка'1,23,4'null + 1null→01undefined + 1undefined→NaNNaN0.1 + 0.2ошибка представления IEEE 754 0.30000000000000004
Ключевые правила
- Оператор
+при любом строковом операнде делает конкатенацию; иначе — сложение чисел.- Операторы
-,*,/всегда приводят операнды к числу.- Объекты приводятся к примитиву через
valueOf→toString: массив даёт строку черезjoin(','), обычный объект —'[object Object]'.null→0,undefined→NaN,true→1,false→0при числовом приведении.