parseInt("")
является NaN
, потому что стандарт говорит, так что даже если +""
является 0
вместо (также просто потому, что стандарт говорит так, подразумевая, например, что "" == 0
).
Не смотрите на логику в этом, потому что нет глубокой глубокой логики, просто история.
Вы, на мой взгляд, делаете БОЛЬШУЮ ошибку ... чем скорее вы ее исправите, тем лучше будет для вашей жизни программирования с помощью Javascript. Ошибка заключается в том, что вы предполагаете, что каждый выбор, сделанный в языках программирования, и каждая техническая информация о них логичны. Это просто неправда.
Специально для Javascript.
Пожалуйста, помните, что Javascript был «спроектирован» в спешке и, только из-за судьбы, он стал чрезвычайно популярным за одну ночь. Это вынудило сообщество стандартизировать его перед серьезной мыслью о деталях, и поэтому оно было в основном «заморожено» в его нынешнем печальном состоянии перед серьезными испытаниями на местах.
Есть части, которые настолько плохо, что даже не смешно (например with
заявления или оператор ==
равенства, которое так сломан, что серьезные JS Иды предупреждают о любой использовать его: вы получите такие вещи, как A==B
, B==C
и A!=C
даже с использованием только нормальных значений и без «специального» значения как null
, undefined
, NaN
или пустые строки ""
, а не из-за точных проблем).
Чехлы особых случаев повсюду в Javascript, и попытка поставить их в логическую структуру - это, к сожалению, потраченное впустую усилие. Просто изучите его странности, много читайте и наслаждайтесь фантастической средой выполнения, которую он предоставляет (это где Javascript действительно сияет ... браузеры и их JIT - поистине впечатляющая часть технологии: вы можете написать несколько строк и получить действительно полезное программное обеспечение на гаджион различных вычислительных устройств).
Официальный стандарт, в котором перечислены все странности, довольно трудно читать, поскольку он очень точен, и, к сожалению, правила, которые он должен указать, действительно сложны.
Кроме того, как получает языка больше возможностей правил станут еще более сложным, например, что для ES5 просто еще один странного «особого» случая (например, ToPrimitive
поведения операции Date
объектов) становится «нормальный» случай ES6 (где ToPrimitive
можно настроить).
Не уверен, что эта «нормализация» - это что-то, что нужно радоваться ... реальная проблема - это замороженная отправная точка, и теперь нет простых решений (если вы не хотите выбросить весь существующий код javascript, то есть).
Обычный путь для языка начинается чистым и приятным, симметричным и малым. Затем, сталкиваясь с проблемами реального мира, язык получает (заражается) некоторые уродливые части (потому что мир уродлив и асимметричен).
Javascript такой. Кроме того, что он не начинал красиво и чисто, и, кроме того, не было времени отполировать его, прежде чем бросать его в игру.
Ну, именно так оно и предназначалось для работы. Или, может быть, развился так, чтобы работать. В любом случае, слишком поздно, чтобы изменить его. И есть хорошие варианты использования для обоих методов. Вам просто нужно выбрать тот, который подходит. – Thilo
Также обратите внимание, что 'Number' также поддерживает числа с плавающей запятой, а не только целые числа. – Thilo
В идеале или нет, это не так, как это работает. Вы можете пользоваться https://www.youtube.com/watch?v=FqhZZNUyVFM, хотя – pvg