Edit: Мой ответ был совершенно неправильно, которую я узнал после моего разговора с Nina Scholz в своей реакции на эту тему. Я обновил соответствующим образом.
Существует множество способов проверки значений в зависимости от типа, который вы ожидаете использовать. Поэтому проблема заключается не столько в производительности, сколько в правильной оценке. Начиная с примерами:
if(x != null)
Это будет вычисляться false
, если значение х равно либо null
или `неопределенными.
Следующий случай:
if(!!x)
Это совершенно другая операция. Он отличает значение x как булево, и в большинстве случаев if(x)
будет работать одинаково. Но теперь, если значение ложно, например 0, пустая строка, выражение возвращает false
. Таким образом, если ожидает номер, вы должны проверить для нулевого значения:
if(x || (0 === x))
Имейте в виду, что если х были ничем иным, как межд выражение возвращает истину.
И тот случай, когда вы ожидаете строку:
if(x || ('' === x))
То же самое и здесь, если х было, скажем, 12, то выражение возвращает истину.
Я мог бы продолжить с большим количеством примеров. К сожалению, существуют определенные выражения, которые работают неожиданным образом. Например, должно быть легко проверить, является ли значение числом, вызывая isNaN (число), но если это значение является пустой строкой или представлением индекса массива ('2'), isNaN возвращает false.
Я рекомендую вам проверить this table со всеми преобразованиями типов, чтобы вы стали более осведомлены о том, как проверить правильность значения.
, не зная ожидаемых данных, трудно решить. –
Ваши два утверждения не эквивалентны! – Sirko
'x! == null' и' !! x' не тестируют одно и то же. Что относительно 'x = false'? – Biffen