: Разрешите поинтересоваться в целях повышения образованности — О чём это вы все так оживлённо беседуете?
Какая-то ошибка в обработке данных. NaN - not a number - букв. "не число" - ошибка интерпретатора языка джава скрипт. Возникает, когда программа ждёт число, но получает что-то другое.
[object] - собственно, объект - тип данных. Скорее всего, программой ожидались какие-то строковые или числовые данные, но пришел объект. Например объект, содержащий данные пользователя, будет выглядеть примерно так: user = { name: 'Вася', age: 25 }, если мы захотим вывести, скажем имя пользователя, то нам нужно будет обратиться к соответствующему свойству объекта user, примерно так: user.name. Если же попытаться вывести объект целиком, то как раз и получим "ошибку" [object]
undefined - какие-то отсутствующие, не назначенные данные. Возникает при попытке обратиться к каким-то несуществующим данным. Если брать объект из примера выше, то user.nickName выведет undefined, потому что у нашего объекта нет такого свойства.
то как раз и получим "ошибку" [object]Это не ошибка, это объект после преобразования в строку посредством Object.prototype.toString()
Потому и написал в кавычках. Это не ошибка с точки зрения программы, но ошибка с точки зрения пользователя.
А мне интересно, почему js спокойно разршает работать с undefined, NaN, а какой-нибудь c++ сразу начнет ругаться? Просто включаю на фон видосики разные для общего развития и слышал фразу "Тут мы делаем проверку на нулл" довольно часто.
Че-то все пишут какую-то чушь.
JS, как язык, имеет слабую динамическую типизацию, это значит что одни типы могут превращаться на лету в другие, что называется неявным приведением типов (гуглить type casting).
Это была фишка языка, но сейчас все стараются на крупных проектах использовать надстройки со статической типизацией, например такие штуки как flowtype или typescript
Потому что JS - язык с динамической типизацией, а плюсы со статической.
Поэтому в JS в переменной может оказаться всё что угодно (например, такого поля может вообще не существовать и мы получим undefined, хотя ожидаем число или объект), и это выяснится только во время исполнения программы, а в плюсах типы заранее определены и проверка на типы выполняется при компиляции. Но и тут мы не защищены от того, что в переменной вместо экземпляра класса будет null, а в плюсах ещё и указатель может указывать в никуда.
Вот такой вот он язык. Многие его за это ругают. Для меня это первый яп, сравнивать мне особо не с чем, так что для меня это не проблема. Особенно с линтером и проптайпсами. Ещё тайпскрипт есть, но лично у меня на работе его не используют.
Но это ведь правда, он же написал «изначально». JavaScript, как и многие ставшие популярными сейчас языки, придумывался как «язык для домохозяек» с минимальным порогом вхождения. Это сейчас он используется повсеместно и имеет весь тулинг для полноценной профессиональной разработки крупных приложений. Но изначально это было не так и с тех времён осталось много проблем и компромиссов для обратной совместимости
1) JS не является строго-типизированным языком программирования. Тип данных хранящийся в переменной определяется уже в процессе исполнения.
2) Проверять на null полезно даже в строго типизированных языках, так как обозначает отсутствие ссылки на объект.
В общем, такая разница напрямую следует из идеологии (не знаю как это назвать) языка. C++ язык высокого уровня, но позволяющий напрямую обращаться к памяти, а js - скриптовый язык, и памятью при исполнении js кода распоряжается интерпретатор.
Потому что js выполняется внутри "виртуальной машины", а с++ исполняется процессором практически "напрямую". И если внутри виртуальной машины можно спокойно обработать нестандартные ситуации, то ошибки в инструкциях процессора обычно ведут к остановке выполнения всего блока инструкций.
Ну и как любят на пикабу пример из жизни:
Возьмём для примера движение как исполнение инструкций)
Мальчик(код) едет на трёхколёсном велосипеде (js) по палубе плывущего корабля (виртуальная машина). Чтобы не случилось с мальчиком или велосипедом(мальчик сломается, велосипеду надоест катать мальчика и т.д.), корабль все равно будет продолжать движение и мальчик никак на него не может повлиять (условно конечно же, вариант что мальчик заложит 20кг взрывчатки возле двигателя мы не рассматриваем).
Мужик(код) плывёт на вёсельной лодке(с++) по морю (скомпилированный байткод исполняемый процессором посредством ядра операционной системы). Если что-то случится с мужиком или с лодкой - движение остановится.
Примерно как-то так.
Лол, ага, конечно, остановится. И виртуальная машина тут тоже не причем, не вводите людей в заблуждение.
Суть в типизации, у C++ она статическая, это значит что компилятор сразу знает всё о типах сущностей и делает проверки на этапе компиляции; а у js — динамическая, это значит что мы не знаем ничего о типе сущности пока код в этом месте не начнёт исполняться, соответственно нужно проверять типы во время исполнения.
Чувак, он вообще-то прав. Ты тоже прав, но ты говоришь про следствие от того, что описал он. Не тоороопись, подумоой
Да какое следствие, это архитектура и задумка языка, типизация это вещь на которой базируются языки, а не «неожиданный поворот». Под язык пишутся компиляторы, а не наоборот. То о чем он пишет — как раз таки неверная попытка отписать следствие
Вообще-то нет.
На плюсах можно спокойно написать программу с утечкой памяти.
Всё дело в типизацией языков.
Та тут просто люди состязаются в остроумии и попутно выясняют, кто из них круче в написании кода на JavaScript, Ну и по традиции немножко обсерают ближнего.
Ничё интересного, короч.
Скриншоты комментов
56K постов39.9K подписчиков
Правила сообщества
В сообществе можно размещать ЛЮБЫЕ скрины (комментов) с любого сайта!!
ПРИКРЕПИТЬ ССЫЛКУ НА КОМЕНТ ЕСЛИ ОН С Пикабу желательно, но не обязательно!!!
Если скрин не с пикабу, а со стороннего сайта( Твиттер,. Вк, Одноклассники и т.д.) то ссылка не обязательна.
Для сообщества подходит любой скрин, набранный на клавиатуре, даже если это не диалог (под вид Твита) Так же подходит скрин с картинкой и хотя бы одним комментарием под ним, с любого источника.