Я тестировал преобразование значений в целое число в javascript и печатал вывод в консоли, когда сталкивался с этим странным поведением.
console.log(+[]) ==> 0
console.log(+[123]) ==> 123
console.log(+['123']) ==> 123
console.log(+[123, 456]) ==> NaN
console.log(+['123asdf']) ==> NaN
Я думал, что значения были преобразованы с помощью parseInt, но оказалось, что это было не так. Я перешел в таблицу преобразования javascript http://www.w3schools.com/js/js_type_conversion.asp
Это дает мне более полное представление о том, как выполняются преобразования. В соответствии с этой таблицей
[] => 0
[20] => 20
[10,20] => NaN
["twenty"] =>NaN
["ten","twenty"] => NaN
Таким образом, они берут первое значение массива и преобразуют его, используя указанные правила. Правила parseInt не применяются.
Я протестировал, чтобы прийти к такому выводу. Вы можете вложить в нее все, что хотите, это даст вам тот же результат.
console.log(+[[[[[[[[[[[10]]]]]]]]]]]) => 10
Итак, тогда я подумал, хорошо, если это случай
console.log(+[undefined]) will return NaN
console.log(+[null]) will return 0
console.log(+[false]) will return 0
это значения, ожидаемые от таблицы преобразования javascript, до целого числа, но оказываются
console.log(+[undefined]) => 0
console.log(+[null]) => 0
console.log(+[false]) => NaN
Последнее самое странное, потому что false преобразуется в 0, а не в NaN. Может ли кто-нибудь объяснить странное поведение или объяснить, как это преобразование выполняется?