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. Как это исправить? Любые другие идеи для этого?
Ответы
Ответ 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;
}
}