Нужен кэп
Пытается привести 'a' к числу, получает NaN, приводит его к строке и склеивает.
в js преобразование "нечисловой" строки в число дает NaN - not-a-number, особое числовое значение, которое числом вроде не является в силу логики и одновременно является, в силу того, что было получено в результате численных операций. `+буква` - как раз и является неочевидным преобразованием в число. Но одновременно, `+` - оператор конкатенации(склеивания) строк. Так что картинка выглядит для интерпретатора, как:
(буква(b) +(склеить) буква(а) +(склеить) +(преобразовать в число) буква(а) +(склеить) буква(а)).вНижнийРегистр
=>
('ba' +(склеить) NaN +(склеить) 'a').toLowerCase
=>
('baNaNa').toLowerCase
(буква(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..., С-куны поправьте если не так.
всё так
Конец прочитал как сыкуны поправьте)))
только не на ячейку, сдвиг идет по размеру типа указателя, то, что это след. "ячейка" массива, просто частный случай, указатель может быть и не на элементе массива.
JS: true.false === false.true
Абсолютно ничего удивительного, указатели работают вполне ожидаемым образом. А JS позволяет выстрелить себе в ногу простой опечаткой.
жаваскрипт придумали чтобы обезьянка на страничке танцевала, ничего удивительного в том что он странный
от того что 95% людей идиоты он более нормальным не становится
от того что 95% людей идиоты он более нормальным не становится
Пиздец странно, ну. Это как русские туристы приезжают с Польшу или Чехию и угарают с того, что местные слова похожи на русские, но другие.
Наслаждайтесь. Ворнинг, у чувствительных возможны судорожные припадки.
Вот здесь в конце про NaN веселее. https://www.destroyallsoftware.com/talks/wat
Но на самом деле это уже скучно. Народ внезапно понял, что это неустранимая проблема слаботипизированных языков, которые пытаются приводить всё ко всему по мудрёным правилам. Как не старайся - всегда будут странные пограничные случаи.
Но на самом деле это уже скучно. Народ внезапно понял, что это неустранимая проблема слаботипизированных языков, которые пытаются приводить всё ко всему по мудрёным правилам. Как не старайся - всегда будут странные пограничные случаи.
У parseInt второй параметр - основание системы счисления, так что всё работает согласно документации. Хотя новичков пугать таким поведением можно
То, что .map передаёт в функцию ещё какие-то параметры, помимо самих элементов - нихрена не очевидное поведение.
А спецификацию мы читаем глазами
Чего человека минусят? Всё правильно говорит. Читаем документацию жопой - получаем неожиданный результат.
И кстати:
['10', '10', '10'].map(str => parseInt(str))
И кстати:
['10', '10', '10'].map(str => parseInt(str))
Это и без проверки было очевидно. Вообще ничего странного не вижу.
Прикольно. Тестовая задачка?
Ага. Если тебе предлагают ее на собеседовании, то компания тест не проходит.
Можно было бы и адаптировать под русскоязычного читателя =)
для ленивых, но любопытных:
('b' + 'a' + + 'a' + 'a' ).toLowerCase()
('b' + 'a' + + 'a' + 'a' ).toLowerCase()
(String.fromCodePoint(new Date(410227200 * 1000).getYear(), Math.sqrt(6241), 's'.charCodeAt()) + Object.getPrototypeOf(Object.prototype)).toLowerCase();
Чтобы написать коммент, необходимо залогиниться