Чи безпечно припускати суворе порівняння у викладенні JavaScript switch?


105

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

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, яке говорить про те, що у заяві перемикання буде використано суворе порівняння 0 !== false, але я нічого не можу знайти, і я не впевнений, чи добре це буде працювати в різних двигунах JavaScript. Хтось знає, чи гарантовано порівняння, проведене за допомогою перемикача, є суворим?

Відповіді:


103

Подивіться на ECMA 262, розділ 12.11 , другий алгоритм, 4.c

c. Якщо вхід дорівнює clauseSelector, як визначено оператором ===, то ...


11
Це було вечірками , як , що з 1999 року (стор 68, з 12,11, значення БлокаCase # 3.)
WALF

Тоді що? Я не впевнений, чому ви тут відрізали цитату.
Олег Вікторович Волков

34

http://qfox.nl/notes/110 відповідає на ваше запитання. (Цей хлопець знає багато про солодку крупу JavaScript)

Для комутаторів у Javascript використовується сувора перевірка типу (===). Тож вам ніколи не потрібно турбуватися про примус, який заважає кілька wtfjs :). Якщо ви, з іншого боку, розраховували на примус, велика удача, бо не можете цього примусити.


jsfiddle.net/to469fLm/4 , ви можете узагальнити функцію
примусу

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.