2014-12-03 7 views
1

Рассмотрим следующий код:Если я использую два оператора отрицания на строке, я использую принуждение типа?

!!('foo'); 

Оператор отрицанием использует абстрактную операцию ToBoolean выполнять преобразование типа, но мой вопрос - ли это включать в себя тип принуждения?

ответ

1

Учитывая, что принуждение является просто implicit преобразования, что является либо cast или любого рода processed conversion, чем да, это связано с принуждением, потому что вы Ждут» t преобразовать его явно.

+0

Так что тип принуждения - это не специфическая особенность JavaScript как таковой, а поведение, связанное с определенными операторами в JavaScript (и других языках). – Ben

+2

Точно. Любой язык может реализовать коверсию. C#, например, даже позволяет вам переопределять операторов таким образом, чтобы вы могли «управлять» принуждениями. –

0

!! (x), похоже, возвращает тот же результат, что и Boolean (x). Вы можете это увидеть сами, введя следующее в консоль JavaScript:

Boolean(false) === !!(false) 
Boolean(0) === !!(0) 
Boolean("") === !!("") 
Boolean(null) === !!(null) 
Boolean(undefined) === !!(undefined) 
Boolean(NaN) === !!(NaN) 

Все значения являются «правдивыми» в JavaScript. Не проверял все доступные значения в JavaScript; это может занять некоторое время. ;-)

+0

Да, я считаю, что это эквивалентно. См. 11.4.9 в спецификации. – Ben

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

  • Нет связанных вопросов^_^