Подтвердить что ты не робот

Javascript: используйте либо переменную, либо, если она undefined, строка по умолчанию

У меня есть этот код:

var phrase = function (variable, defaultPhrase) {
    if (typeof variable === "undefined") {
        return defaultPhrase;
    }
    else {
        return variable;
    }
}

Он называется так:

Ext.Msg.show({title: phrase(js_shutdown,'Shutdown'), //...

Что я хочу сделать, так это использовать фразу по умолчанию, когда переменная не определена, но когда я передаю переменную undefined в phrase(), JS выдает ошибку переменной undefined. Как это исправить? Любые другие идеи для этого?

4b9b3361

Ответ 1

Вам не нужна функция. Обычно используется оператор ||:

Ext.Msg.show({ title: js_shutdown || 'Shutdown', //...

Вы можете видеть || как:

someValue || defaultValue

Для строк defaultValue используется, если someValue === "".

Если переменная не определена вообще, вам нужно встроить проверку typeof x === "undefined", потому что вы не можете передать переменную функции (что a ReferenceError).

Ответ 2

Обычно использование || достаточно, как и другие. Однако, если вы хотите иметь 0, false и null как приемлемые значения, вам действительно нужно проверить, является ли тип переменной undefined. Вы можете использовать тернарный оператор, чтобы сделать его однострочным:

var variable;
var defaultPhrase = "Default";
var phrase = (typeof variable === "undefined" ? defaultPhrase : variable);
console.log(phrase);
// => "Default"

Ответ 3

Это ошибка javascript для ссылки на переменную undefined без пробела в вызове функции. Итак, если переменная js_shutdown не существует в области видимости, то это:

Ext.Msg.show({title: phrase(js_shutdown,'Shutdown'), //...

- ошибка.

Например, этот код вызывает ошибку в строке, вызывающей функцию phrase():

var Ext = {};
Ext.Msg = {};
Ext.Msg.show = function() {console.log("success")};

function phrase(variable, defaultPhrase) {
    return(variable || defaultPhrase);
}

Ext.Msg.show({title: phrase(js_shutdown,'Shutdown')});​

потому что механизм javascript не может найти js_shutdown в любой области.

Но это нормально:

var Ext = {};
Ext.Msg = {};
Ext.Msg.show = function() {console.log("success")};

function phrase(variable, defaultPhrase) {
    return(variable || defaultPhrase);
}

Ext.Msg.show({title: phrase(window.js_shutdown,'Shutdown')});​

Вы можете видеть, что это работает здесь: http://jsfiddle.net/jfriend00/JFz6R/

Поскольку вы сказали JS-движку точно, где искать js_shutdown, а когда его нет, он просто передает undefined функции фразы (как вы хотите).

Ответ 4

Используйте логический оператор OR:

 var phrase = variable || defaultPhrase;

Или встроенный:

Ext.Msg.show({title: (js_shutdown || 'Shutdown')), //...

Ответ 5

В javascript обычно используется оператор OR || для предоставления альтернативного значения, когда переменная undefined:

return variable || defaultPhrase || ''

В случае, если variable - undefined, он будет оценивать значение false, тогда будет оценена вторая часть теста, если она также undefined, вы все равно можете вернуть пустую строку.

Ответ 6

Я бы обычно кодировал это как title: js_shutdown || 'Shutdown' при отсутствии возможных проблем с безопасностью.

Ответ 7

Не должно быть:

var phrase = function (variable, defaultPhrase){
    if(variable == undefined){
        return defaultPhrase;
    }else{
        return variable;
    }
}