2014-01-02 3 views
-1

Я передаю параметры функции в библиотеке JavaScript я писал:Как проверить, если параметр был передан

ffff.setup({ 
    'size':{'width':'100','height':'100'} 
}); 

В функции, я их забрать:

var ffff = { 
    setup: function(config) { 
     if (config["size"]["width"]) {my_width = config["size"]["width"];} 
     if (config["size"]["height"]) {my_height = config["size"]["height"];} 
    } 
} 

Моя ошибка, если не указать параметр, я получаю ошибку Cannot read property 'height' of undefined: (ошибка происходит на if (config["size"]["height"]))

ffffr.setup({ 
    'size':{'width':'100'} 
}); 

Как определить, была ли предоставлена ​​переменная или нет?

+2

Возможный дубликат [Как проверить, определена ли переменная в JavaScript?] (Http://stackoverflow.com/questions/519145/how-can-i-check-whether-a-variable-is-defined-in -javascript) – Mathletics

+1

Зачем вам нужно назначать их локальным переменным? Вы можете просто использовать объект. Кроме того, должны ли быть глобальными? Потому что вы не объявили их ... – elclanrs

+0

Где вы обращаетесь к 'файлу'? – Barmar

ответ

0

Try:

if (typeof variable === 'undefined') { 
    // variable is undefined 
} 

Или:

if (typeof (conf) === 'object') { 
    // object is undefined 
} 
4

Там могут быть более элегантные подходы к этому (например, расширяет JQuery(), если вы используете эту библиотеку), но на самом базовом уровне вы можете просто сделать

if(typeof config['size'] !== "undefined" && typeof config['size']['height'] !== "undefined") 
+1

Нет смысла делать проверку 'typeof', поскольку объект, безусловно, существует, вы можете просто использовать оператор' in', например: 'if ('size' в config && 'height' в config.size)' – elclanrs

+0

@elclanrs кажется, имеет самое лучшее исправление. –

0

Проверьте, если она определена, и использовать тройной оператор для установки по умолчанию

(param===undefined)?default_value:param; 

, что это будет сделать, это проверить, если она определена, и установить его на то, что вы хотите, чтобы, если это не определено, но держать это то же самое иначе

1

Если вы смотрите на объект конфигурации, вы можете использовать .hasOwnPropertyMDN

if(config.hasOwnProperty("propName")){ 
//use config.propName 
} 
1
if (config.size && config.size.width) ... 
+0

или как @elclanrs, указанный выше: if ('size' в config && 'height' в config.size) –

Смежные вопросы