Идиоматический способ установки значения по умолчанию в javascript
Какой был бы самый идиоматический способ сделать следующее в javascript:
Если myParam не передается в MyFunc вызывающим, тогда я хочу установить его значение по умолчанию. Но сначала я хочу попробовать и получить его от другого объекта, который может еще не существовать:
function MyFunc(myParam) {
if (!myParam) {
if (!myObj) {
myParam = 10;
}
else {
myParam = myObj.myParam;
}
}
alert(myParam);
}
Я начал писать:
myParam = myParam || myObj.mParam || 10
но понял, что если myObj не существует, это может потерпеть неудачу. Я мог бы предположить следующее:
myParam = myParam || (myObj && myObj.mParam) || 10
Это может даже сработать. Но это лучший способ?
Как, например, Джон Ресиг?
Ответы
Ответ 1
Если myObj является глобальным, ему необходимо ссылаться на объект окна, иначе он выдает ошибку, если myObj
- undefined.
myParam = myParam || (window.myObj ? window.myObj.mParam : 10);
или
myParam = myParam || (window.myObj && window.myObj.mParam) || 10;
Это также работает:
myParam = myParam || ((typeof myObj !== "undefined") ? myObj.mParam : 10);
Ответ 2
Я думаю, что другие ответы доказали, что существует целый ряд способов, с помощью которых один лайнер может потерпеть неудачу. Моя версия ниже, возможно, более читаема и явно не проверяет существование объекта/свойства, но не намного короче:
function MyFunc(myParam){
if (!myParam){
try{
myParam = myObj.myParam;
}
catch(e){
myParam = 10;
}
}
}