Двойное отрицание (!!) в javascript - в чем цель?
Возможный дубликат:
Что такое!! (не) в JavaScript?
Я столкнулся с этой частью кода
function printStackTrace(options) {
options = options || {guess: true};
var ex = options.e || null, guess = !!options.guess;
var p = new printStackTrace.implementation(), result = p.run(ex);
return (guess) ? p.guessAnonymousFunctions(result) : result;
}
И не мог не спросить, почему двойное отрицание? И есть ли альтернативный способ достижения такого же эффекта?
(код из https://github.com/eriwen/javascript-stacktrace/blob/master/stacktrace.js)
Ответы
Ответ 1
Отбрасывает значение boolean. Первый !
отменяет его один раз, преобразуя значения так:
-
undefined
to true
-
null
to true
-
+0
to true
-
-0
to true
-
''
to true
-
NaN
to true
-
false
to true
- Все остальные выражения для
false
Затем другой !
снова отменяет его. Конкретный листинг для булевых, что эквивалентно ToBoolean просто потому, что !
определяется как его отрицание. Его ненужное здесь, однако, потому, что оно используется только как условие условного оператора, которое точно определит правду.
Ответ 2
var x = "somevalue"
var isNotEmpty = !!x.length;
Позвольте разбить его на части:
x.length // 9
!x.length // false
!!x.length // true
Поэтому он использовал преобразование значения "truethy" \ "falsy" в логическое значение.
Следующие значения эквивалентны false в условных операторах:
- ложь
- NULL
- undefined
- Пустая строка
""
(\ ''
)
- Число 0
- Число NaN
Все остальные значения эквивалентны true.
Ответ 3
Двойное отрицание превращает "правдивое" или "ложное" значение в логическое значение, true
или false
.
Большинство из них знакомы с использованием правдивости в качестве теста:
if (options.guess) {
// runs if options.guess is truthy,
}
Но это не обязательно означает:
options.guess===true // could be, could be not
Если вам нужно принудительно ввести "истинное" значение в истинное логическое значение, !!
- это удобный способ сделать это:
!!options.guess===true // always true if options.guess is truthy