Безопасно ли предполагать строгое сравнение в операторе переключения JavaScript? - PullRequest
93 голосов
/ 09 августа 2011

У меня есть переменная, которая может быть либо логической false, либо целым числом (включая 0).Я хочу выразить это в выражении switch, например:

switch(my_var){
    case 0:
         // Do something
         break;
    case 1:
         // Do something else
         break;
    case false:
         // Some other code
}

В моих тестах в Google Chrome оно, кажется, работает идеально, но я немного нервничаю, чтобы использовать его, потому что боюсь, что вв некоторых браузерах, если my_var равно false, он может выполнить первый случай, поскольку 0 == false.

Мне просто интересно, есть ли в JavaScript что-либо официальное, в котором говорится, что оператор switch будет использовать строгое сравнениетакой, что 0 !== false, но я сам ничего не могу найти, и я не уверен, будет ли это хорошо работать в разных движках JavaScript.Кто-нибудь знает, гарантированно ли строго выполняется сравнение, сделанное оператором switch?

Ответы [ 2 ]

94 голосов
/ 09 августа 2011

Взгляните на ECMA 262, раздел 12.11 , второй алгоритм, 4.c.

с. Если input равен clauseSelector, как определено оператором ===, то ...

31 голосов
/ 09 августа 2011

http://qfox.nl/notes/110 отвечает на ваш вопрос. (Этот парень много знает о мелочах JavaScript)

Переключатели в Javascript используют строгую проверку типов (===). Так ты никогда надо беспокоиться о принуждении, которое мешает нескольким недоумкам :). Если на С другой стороны, вы рассчитывали на принуждение, неудачу, потому что вы не можете заставить его.

...