Интерпретация кода 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 для его полного использования и значения.