Как я пишу swtich для следующего условного выражения?
Если URL содержит "нечто", то настройки base_url являются "панелью".
Следующее достигает требуемого эффекта, но у меня есть чувство, что это было бы более управляемо в переключателе:
var doc_location = document.location.href;
var url_strip = new RegExp("http:\/\/.*\/");
var base_url = url_strip.exec(doc_location)
var base_url_string = base_url[0];
//BASE URL CASES
// LOCAL
if (base_url_string.indexOf('xxx.local') > -1) {
settings = {
"base_url" : "http://xxx.local/"
};
}
// DEV
if (base_url_string.indexOf('xxx.dev.yyy.com') > -1) {
settings = {
"base_url" : "http://xxx.dev.yyy.com/xxx/"
};
}
Вы не можете сделать это в переключателе (Это не совсем правда, как указывает Шон в комментариях. См. Примечание в конце.)
, если не выполните полное сопоставление строк; это выполняет сопоставление подстроки .
Если вам нравится, что ваше регулярное выражение вверху удаляет все что вы не хотите сравнивать в своем совпадении, вам не нужно совпадение подстроки, и вы могли бы сделать:
switch (base_url_string) {
case "xxx.local":
// Blah
break;
case "xxx.dev.yyy.com":
// Blah
break;
}
... но опять же, это работает, только если это полная строка, которую вы ' повторное соответствие. Это не сработает, если base_url_string
будет, скажем, «yyy.xxx.local», тогда как ваш текущий код будет соответствовать таковому в ветке «xxx.local».
Обновление : Хорошо, технически вы можете использовать переключатель
для сопоставления подстроки, но я бы не рекомендовал его в большинстве ситуаций. Вот как ( живой пример ):
function test(str) {
switch (true) {
case /xyz/.test(str):
display("• Matched 'xyz' test");
break;
case /test/.test(str):
display("• Matched 'test' test");
break;
case /ing/.test(str):
display("• Matched 'ing' test");
break;
default:
display("• Didn't match any test");
break;
}
}
Это работает из-за того, как работают операторы JavaScript switch
, в частности, два ключевых аспекта: Во-первых, случаи рассматриваются в исходный текст порядок, а во-вторых, что выражения селектора (биты после ключевого слова case
) являются выражениями , которые оцениваются, когда оценивается этот case (а не константы как на некоторых других языках). Итак, поскольку наше тестовое выражение истинно
, первое выражение case
, которое приводит к true
, будет тем, которое будет использоваться.
Просто используйте свойство location.host
switch (location.host) {
case "xxx.local":
settings = ...
break;
case "xxx.dev.yyy.com":
settings = ...
break;
}