null + {0:1}[0] + [,[1],][1][0]
В арифметических операциях null преобразуется в 0
console.log( null + 5 ); // 5
console.log( 5 + null ); // 5
console.log( 5 * null ); // 0
{0: 1}[0] — Из объекта {0: 1} достается значение свойства "0", т.е. 1.
console.log( {0: 1}[0] ); // 1
let obj = {0: 1};
console.log( obj[0] ); // 1, то же самое.
obj = {a: 1};
console.log( obj['a'] ); // тоже 1. Пусть 0 не запутывает...
console.log( {a: 1}['a'] );
[,[1],][1][0] выполняется слева направо.
[,[1],] — создается массив из двух ячеек, [empty, [1]] (в массиваx и объектах последняя запятая игнорируется)
let arr = [,[1],];
console.log( arr.length ); // 2
console.log( arr[0] ); // undefined
console.log( arr[1] ); // [1] ◄*
console.log( [,[1],][1] ); // [1] ◄*
А если [,[1],][1] дает массив [1], получается ( [,[1],][1] )[0] → [1][0]
Где [1] — массив с одним элементом 1, который находится под индексом 0. Этот элемент и получается при выполнении:
console.log( [1][0] ); // 1
let arr = [1];
console.log( arr[0] ) // 1 (то же самое).
///
console.log( [5, 7, 9][0] ); // 5
console.log( [5, 7, 9][1] ); // 7
console.log( [5, 7, 9][2] ); // 9
null + {0:1}[0] + [,[1],][1][0]
↓ ↓ ↓
0 + 1 + 1 = 2
Ну и, список ваших попыток из вопроса:
null + {0:1}[0] + [,[2],][1][0]); // 3
0 + 1 + 2
null + {0:1}[0] + [,['2'],][1][0]); // 12
0 + 1 + '2'
// это конкатенация со строкой, а не суммирование, получается строка "12"
null + {0:1}[1] + [,[1],][1][0]); // NaN
0 + undefined+ 1 // у объекта {0:1} нет свойства 1
// любая арифметика с undefined дает NaN
null + {0:1}[0] + [,[1],][1][1]); // NaN
0 + 1 + ( [1] )[1] // у массива [1] нет индекса 1, только нулевой
0 + 1 + undefined
null + {0:1}[0] + [,[1],][2][0]); // TypeError: Cannot read property '0' of undefined
0 + 1 + (undefined)[0] // У массива [,[1],] нет [2]-го элемента. undefined
[] + {} === "[object Object]", а{} + [] === 0– Алексей Шиманский Apr 11 '21 at 07:04null + 1 = 1и[,[1],][1][0] = 1– Алексей Шиманский Apr 11 '21 at 07:07