в js преобразование "нечисловой" строки в число дает NaN - not-a-number, особое числовое значение, которое числом вроде не является в силу логики и одновременно является, в силу того, что было получено в результате численных операций. `+буква` - как раз и является неочевидным преобразованием в число. Но одновременно, `+` - оператор конкатенации(склеивания) строк. Так что картинка выглядит для интерпретатора, как:
(буква(b) +(склеить) буква(а) +(склеить) +(преобразовать в число) буква(а) +(склеить) буква(а)).вНижнийРегистр
=>
('ba' +(склеить) NaN +(склеить) 'a').toLowerCase
=>
('baNaNa').toLowerCase
То-есть, два плюса ставит человек, а странный - JavaScript? Ладно бы уже что-то недокументированое показывать, но пример выше сродни удивлению от факта, что в плюсах `int a[]={1,3};printf("%d", *(a+1));` выдает 3.
насколько я помню С (не очень, если честно), то тут все норм, "printf("%d", *(a+1))" выводит значение по его адресу *(a+1) т.е. на 1 ячейку от начала массива a..., С-куны поправьте если не так.
только не на ячейку, сдвиг идет по размеру типа указателя, то, что это след. "ячейка" массива, просто частный случай, указатель может быть и не на элементе массива.
жаваскрипт придумали чтобы обезьянка на страничке танцевала, ничего удивительного в том что он странный
от того что 95% людей идиоты он более нормальным не становится
Но на самом деле это уже скучно. Народ внезапно понял, что это неустранимая проблема слаботипизированных языков, которые пытаются приводить всё ко всему по мудрёным правилам. Как не старайся - всегда будут странные пограничные случаи.
Чего человека минусят? Всё правильно говорит. Читаем документацию жопой - получаем неожиданный результат.
И кстати:
['10', '10', '10'].map(str => parseInt(str))
» 4 in l <- false
Programmer Memes
@iammemeloper
Without a doubt, the best programming language
11:09 PM -Sep28, 2023 121.6K ¡ews
» let l = [1,2,3,4]
<- undefined
» 0 in l <- true
» "0" in l <- true
(буква(b) +(склеить) буква(а) +(склеить) +(преобразовать в число) буква(а) +(склеить) буква(а)).вНижнийРегистр
=>
('ba' +(склеить) NaN +(склеить) 'a').toLowerCase
=>
('baNaNa').toLowerCase
от того что 95% людей идиоты он более нормальным не становится
Но на самом деле это уже скучно. Народ внезапно понял, что это неустранимая проблема слаботипизированных языков, которые пытаются приводить всё ко всему по мудрёным правилам. Как не старайся - всегда будут странные пограничные случаи.
И кстати:
['10', '10', '10'].map(str => parseInt(str))
('b' + 'a' + + 'a' + 'a' ).toLowerCase()