Это неявное приведение типов. Динамическую типизацию вполне можно было нормально сделать.
Мы так в 9-м классе писали пробный вариант ГИА (государственной итоговой аттестации, если кто не знает). Писали в своей школе и со своими учителями.
Пишем русский язык, между парт ходит учительница. Замечает, что я подозрительно смотрю себе в кулак. Подходит, отнимает у меня бумажку, а там шпаргалка - "Жи Ши пиши с буквой И" :)
Потому что надо: у тебя было одно яблоко тебе дали ещё одно яблоко. Потому что в условии Ивана было яблоко, дали ещё одно (не уточнили чего одно). Есть текст яблоко, есть цифра 1. Что получается когда текст яблоко соединяем с цифрой 1? Правильно 1 яблоко.
Похоже мой язык тоже javascript.
Если тебе дали одно яблоко и одно что-то, то у тебя два чего-то. Одно из которых на самом деле является яблоком.
Я тут проверила в ассемблере и питоне. При 1+яблоко тоже даёт результат 1яблоко. Хотя может я неправильно вводу. Прошу проверить знающих задачу на других языках или перепроверить на питоне или ассемблере. Спасибо.
ассемблере и питоне
Странное сочетание.
Про ассемблер можно сказать, что Яблоко+1=аблоко. Это верно для x86 с его add для любых целочисленных типов и для двух однобайтовых кодировок (CP866, CP1251).
GNU Assembler ужасает.
Ассемблер это у бывшего коллеги-инженера. Проверял он. Питоном проверила племянница. Я сидела раздавала указания. Отсюда странное сочетание.
Я всегда знал, что нельзя доверять человеку, который говорит на языке с неявным приведением типов
А Википедия так и говорит, кстати:
Это один из наиболее противоречивых терминов в области типизации, так как он не имеет одного общепринятого значения, и разные авторы используют его в разных значениях
Вообще "Строгая" типизация только мутное понятие, поэтому я решил уточнить.
В пхп другая проблема: популярность и низкая стоимость входа дает среднее качество разработчика ниже плинтуса. Еще и обидчивость – почему-то характерная черта большинства пхпшников.
Пожалуйста, назови любой язык из повсеместно применяемых, который был бы хуже js. Даже php с определенной версии исправил достаточно недостатков, чтобы стать лучше.
Ну 1С может быть... но его и повсеместно применяемым языком-то назвать сложно.
Отсутствие нормальной типизации даже с TS. Постоянные попытки неявно скастить всё, что можно, куда угодно. Отсутствие вменяемой работы с арифметикой - integer и double слиты воедино. Игры в многопоточность, по факту остающиеся в одном потоке и тормозящие друг друга. Необходимость просто зазубрить кучу вещей из спеки, потому что реальное поведение не такое, какое было бы очевидным. Какого черта это всё вообще существует в де-факто стандарте индустрии?!
Java - не лучший язык, kotlin и даже C# гораздо лучше. Но просто сравни https://github.com/denysdovhan/wtfjs и ближайший аналог, который я нашел - http://javawtf.blogspot.com/
Про php или про js?
Для начала можно почитать https://habr.com/ru/post/142140/ и https://habr.com/ru/company/ruvds/blog/499670/
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>++++++++++++.>>++++++++.-----------.++++++++++++++++++++.--------------.+.+++++++++++.<<----------.>>----------.+++++.<<.>>------------.++++++++++++++++.-----------------.++++++++.+++++.--------.+++++++++++++++.------------------.++++++++.<<++++++++++.
!!'false' == !!'true' // -> true
!!'false' === !!'true' // -> true
true - это false, спасибо js!
Надо же пример показать, чтобы непонимающие плюсанули. Получается интерпретация программы интерпретаторами, не имеющими представления о языке.
При этом в документации написано, что любая непустая строка при переводе в логическое значение даёт true (истина).
Во всех нормальных языках строка не кастуется к boolean. Так что да, дурной именно javascript, потому что позволяет это сделать.
То что для кого-то проблема выучить несколько правил приведения типов не делает язык дурным. В чужой монастырь со своим уставом не ходят
А я таки буду. Дело не в учении дополнительных правил. Дело в том, что компилятор допускает целый класс ошибок, который он мог бы отследить.
Более того, ценой быстродействия. Вместо того, чтобы реализовать несколько примитивных типов с примитивными же правилами у нас есть монстр-инстанс, для каждой переменной, которая умеет всё.
Я могу предположить только проверку на null в условии. Но "if (a != null)" небольшая цена за отсутствие багов.
Мне кажется не один язык программирования не работает столько со строками как джс.
if(a) {console.log(a)} else { console.log(“лошадь в огурцах»)}
И таким не хитрым способом мы:
- Вывели текст если он есть
- обработали вывод если там Пустая строка
- обработало вывод если там undefined
- обработали вывод если там null
И я считаю это прекрасно
Swift:
print(a?.Description() ?? "<лошадь в огурцах>")
C# :
Debug.WriteLine(a?.ToString() ?? "<лошадь в огурцах>")
А если ну очень хочется игнорировать тип - используйте базовый тип как тип параметра функции. Но эта такая редкость, что я могу пересчитать использование такого подхода на пальцах одной руки.
Да это шутка. Ну ладно, а так?
0 == false // -> true
'' == false // -> true
null == false // -> false
!!null // -> false
Про пустую строку уже сказал.
null – это отдельный тип и он не равен ни true ни false.
Но при принудительном приведении результатом будет false.
Потому что для калькулятора нужно вводить это выражение со скобками, так как он при вводе нового действия автоматически считает предыдущее (то есть когда у тебя введено 2+2, а потом ты вводишь умножение, то калькулятор производит сложение, а потом только умножение). На семерке, кстати, калькулятор в обычном режиме умеет в скобки.
слышал, что в америкосии приоритета у умножения нет и действия выполняются в порядке очереди по строке. млжет под них пример. хз, правда или нет
if ( $your_lang == "JS")
{
$lang = "true";
}
else
{
$lang = "false";
}
return $lang;
https://pastebin.com/BaWjjmK1 - вот кстати код из той же категории :D
И да - это реальный код, из common-библиотеки одного из сборок эмулятора сервера L2 :)



























