Подумайте, какой результат будет у выражений ниже. Тут не только преобразования типов. Когда закончите - сверьтесь с решением.
'' + 1 + 0
true + false
6 / "3"
"2" * "3"
4 + 5 + "px"
"$" + 4 + 5
"4" - 2
"4px" - 2
7 / 0
({})[0]
parseInt("09")
5 && 2
2 && 5
5 || 0
0 || 5
null + 1
undefined + 1
[1] + 1
[] + null + 1
[[0]][0][0]
Решение
Решение
'' + 1 + 0 = "10"
true + false = 1
6 / "3" = 2
"2" * "3" = 6
4 + 5 + "px" = "9px"
"$" + 4 + 5
= "$45"
"4" - 2
= 2
"4px" - 2
= NaN
7 / 0
= Infinity
({})[0]
= undefined // (1)
parseInt("09")
= "0" или "9" // (2)
5 && 2
= 2
2 && 5
= 5
5 || 0
= 5
0 || 5 = 5
null + 1 = 1 // (3)
undefined + 1 = NaN // (4)
[1] + 1 = "11" // (5)
[] + null + 1 = "null1" // (6)
[[0]][0][0] = 0 // (7)
- Фигурные скобки — это создание пустого объекта, у него нет свойства
'0'. Так чтоundefined.
Обратите внимание на внешние, круглые скобки. Если их убрать и запустить{}[0]в отладочной консоли браузера — будет0, т.к. скобки{}будут восприняты как пустой блок кода, после которого идёт массив. - В некоторых браузерах parseInt без второго аргумента интерпретирует 09 как восьмиричное число.
nullпри численном преобразовании становится0undefinedпри численном преобразовании становитсяNaN- Массив преобразуется в строку
"1". Оператор"+"при сложении со строкой приводит второй аргумент к строке — значит будет"1" + "1" = "11". - Массив преобразуется в пустую строку
"" + null + 1, оператор"+"видит, что слева строка и преобразуетnullк строке, получается"null" + 1, и в итоге"null1". [[0]]— это вложенный массив[0]внутри внешнего[ ]. Затем мы берём от него нулевой элемент, и потом еще раз.Если это непонятно, то посмотрите на такой пример:
alert( [1,[0],2][1] );
Квадратные скобки после массива/объекта обозначают не другой массив, а взятие элемента.
#226