Итак, у меня есть модульный компонент ... что означает, что он может появляться в нескольких приложениях. Все они являются внутренними, поэтому поведение компонента может «расти» по мере добавления дополнительных продуктов.Лучшая проверка работоспособности для переменной JavaScript
В целом, есть, вероятно, лучше дизайн, чтобы сделать то, что я хочу сделать, но в интересах быстрого развития, я делаю это:
function someFunc(opt) {
if(typeof(taEnvironment) !== "undefined")) {
if(taEnvironment === "webApp") {
// do stuff when a variable taEnvironment exists and its value is "webapp"
}
}
}
Это утомительно делать это каждый раз, когда мне нужно проверить на «webApp», поэтому я хочу отвлечь его немного. Предлагаемый рефакторинг выглядит как это:
function someFunc(opt) {
if(environment("webApp")) {
// do stuff when a variable taEnvironment exists and its value is "webapp"
}
}
//...elsewhere in the same module...
function environment(env) {
var envSet = false;
if(typeof(env) === "undefined") {
return envSet;
}
if(typeof(taEnvironment) !== "undefined")) {
if(taEnvironment === env) {
envSet = true;
}
return envSet;
}
2-часть вопроса:
Даже просто глядя на первый не переработан фрагмент кода; это обычный способ проверить такие переменные? Вы не можете комбинировать проверку типа с проверкой значения, потому что если она не определена, вы получите отказ при проверке значения. Поэтому сначала я проверяю typeof для «undefined», а затем вложен внутри, я проверяю значение. Это SEEMS, как единственный способ сделать это, но если есть лучший образец, я все уши!
В зависимости от ответа на # 1 - если # 1 является разумным или ожидаемым способом делать вещи, имеет ли смысл предлагаемый рефактор? Или я не создаю каких-либо значительных преимуществ?
Полагаю, у вас есть некоторое использование для этого, где вы не проходите литераловую строку, а 'env' может быть' undefined'. – crush
Несмотря на то, что кажется, что вы не знаете, где будет объявлено 'taEnvironment', я бы все же объявлял его в самом внешнем закрытии, содержащем весь код, если это вообще возможно. 'Typeof foo ===" undefined "' hack просто слишком болезнен и почти всегда можно избежать. Я имею в виду, если вы можете создать функцию в той же области, что и ответы ниже, почему вы не можете просто «var taEnvironment;» вместо этого? –
var taEnvironment объявляется внутри отдельного приложения где-то. Проверка работоспособности предназначена для проектов, в которых нет необходимости; то разработчику не обязательно нужно объявлять его. Объявляемая taEnvironment считается факультативной. @crush: не совсем. Это, наверное, слишком много. ;) –