2017-02-01 4 views
2

Im пытаясь понять, почему сравнивая стандартные функции всегда возвращает логическое falseJavascript: Сравнение стандартных функций всегда возвращает * ложь *

подобно для функции IsNaN

>isNaN === true 
false 
>isNaN === false 
false 

Но

>Boolean(isNaN) 
true 

Теперь, чтобы сделать вещи немного интереснее

>!isNaN === false 
true 
>!isNaN === true 
false 

Это происходит со стандартной функцией, например Number, Object и т. Д.

Кто-нибудь знает, что происходит под капотом в JavaScript?

+1

'===' - это оператор строгого равенства, _Strict равенство сравнивает два значения для равенства. Перед сопоставлением ни одно значение не преобразуется в какое-либо другое значение. Если значения имеют разные типы, значения считаются неравными._ см. Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness – Satpal

+0

'===' возвращает true только тогда, когда его операнды являются такой же тип. ''5'! == 5',' 0! == false'. ('isNaN == true' тоже не является истинным, но нет причин ожидать, что он будет вести себя так же, как приведение в boolean. В' 2 == true' вы бы наложили 'true' на число или '2' в boolean?) – Ryan

ответ

2

Я рекомендую вам прочитать truthy and falsy значения, короче говоря, isNaN - это функция, она фактически существует, поэтому вы можете использовать ее в качестве короткой руки для проверки true, очень полезной для повседневного программирования.

Когда вы используете ===, проверка типа завершена, а затем bool! = A.

Когда вы предварительно нажимаете на него !, вы на самом деле выбираете тип boolean и меняете значение на true, поэтому это сравнение меняется.

+0

Спасибо. Ссылка помогла мне более точно понять концепции. –

1

Вот список Truthy и Falsy значений.

isNaN правдиво, потому что это функция.

0
>isNaN === true 
false 
>isNaN === false 
false 

Потому что isNaN - это функция.


>Boolean(isNaN) 
true 

Потому что опять же, isNaN является функцией и функции truthy значения. Пожалуйста, см. Ниже: output specs for Boolean

Смежные вопросы