Занимательный разбор одного выражения с квадратными скобками
сегодня в 10:20
>1+[[]+[]]-[]+[[]-[]]-1
9
Вообще трудно с первого взгляда понять почему так.
Что, думаете [[]+[]]-[]+[[]-[]]==9?
А вот и нет: > [[]+[]]-[]+[[]-[]]
"00"
Но мы же знаем что при прибавлении к строчке в JS происходит конкатенация, и казалось бы тогда первое выражение должно бы быть 99: > 1+"00"-1
99
Как же так?
Придется разбирать с начала, сначала про два нуля: > []+[]
""
Тут понятно, пустые массивы превратились в пустые строчки и сложившись породили пустую строку.> [""]-[]
0
Тут тоже понятно, если разобраться что второй пустой массив это с точки зрения арифметики ноль, и пустая строка (к которой приводится для арифметики первый массив) тоже ноль. Ноль минус ноль, пока имеет смысл. Так же сразу становится понятна вторая часть: > [[]-[]]
[0]
Значит у нас есть обычный ноль, и ноль в массиве, складывая они приводятся к строчкам и конкатенируются: > 0+[0]
"00"
С двойным зеро все понятно. Откуда взялось 9?
Читаем сложение, как положено, слева направо: > 1+[[]+[]]
"1"
С большим количеством квадратных скобок мы уже разбирались, массив с пустой строкой привелся к пустой строке и превратил целую единицу в единицу-строчку…> "1"-[]
1
…, а потом вычитание нуля превратило ее назад в целое число.> 1+[[]-[]]
"10"
Набор квадратных скобок справа равен [»0»], что превращается в строчное представление массива, и дописывается к единице, которая опять для этого превратилась в строчку.
И финальный аккорд совсем очевиден: > "10"-1
9
И ведь с виду все правильно…
-
↑
—
↓ -
354
-
Добавить в избранное 2
гуглер на все руки