Интерпретация кода javascript-символа Тильды перед тернарным оператором IF
Я проверял код ответов.js в express и наткнулся на этот код:
res.contentType =
res.type = function(type){
return this.set('Content-Type', ~type.indexOf('/')
? type
: mime.lookup(type));
};
мой вопрос в том, что делает ~
оператор do перед type.indexOf()
заявление? Какова его цель и когда он используется?
2 ответов
это побитовое не, хотя его использование здесь вполне непрозрачная.
он используется для преобразования -1
в результате indexOf
(т. е. строка не найдена) в 0
, что является ложным значением (так как ~-1 == 0
и 0
является false в логическом контексте), и это позволяет всем другим значениям оставаться истинными.
это можно было бы написать более ясно, как (type.indexOf('/') != -1) ? ... : ...
на простом английском языке, он говорит, "лечить -1
результат (т. е., если /
не найден) от indexOf
as false
; в противном случае, воспринимайте результат как true
".
Тильда-это побитовое не оператор, так же как !
- Это логическое не оператор. Возможно, вы захотите взглянуть на документация оператора в сети разработчиков Mozilla для его полного использования и значения.