Я просматривал код для фабрики angularjs, чтобы лучше понять, как это работает. Код содержит заявление if
, которое я не совсем понимаю.+ !! оператор в выражении if
В plnkr демо автор писал:
if ((+!!config.template) + (+!!config.templateUrl) !== 1) {
throw new Error('Expected modal to have exactly one of either `template` or `templateUrl`');
}
It is slightly different in the github repo:
if (!(!config.template^!config.templateUrl)) {
throw new Error('Expected modal to have exactly one of either `template` or `templateUrl`');
}
Очевидно сообщением об ошибке он проверяет, чтобы увидеть, если один из этих двух существует. Я просто не знаю, как это получается. Я не смог найти информацию о ^
или +!
Мой вопрос: как это работает, если заявление работает? (^
или +!
или +!!
специфически)
^является Javascript побитовое Оператор XOR. – Jacques
'Я не смог найти никакой информации о^или +!', Вы не использовали правильное ключевое слово. поиск 'javascript operator' –
Первый! принимает значение - как config.template (что, вероятно, число из-за + !!), преобразует его в true или false на основании того, является ли оно нулевым (false) или ненулевым (true) - которое инвертирует логический смысл - то второй! инвертирует его обратно в один и тот же логический смысл вместо того, чтобы быть инвертированным, тогда + обрабатывает true/false как число 1 или 0. Поэтому, если он не установлен, + !! приведет к * номеру * 0, в противном случае это будет * номер * 1 * независимо от того, какое фактическое значение числа .template равно *. Затем они могут делать + между двумя выражениями. – simpleuser