javascript - 如何检查是否设置了另一个对象内的对象内的变量(js)?

标签 javascript

我想这样做:

if(a.b.c) alert('c exists')   //produces error
if(a && a.b && a.b.c ) alert('c exists')   //also produces ReferenceError

我知道的唯一方法(编辑:这显然是唯一的方法):

if(typeof(a) != "undefined" && a.b && a.b.c) alert('c exists');

或者像这样的某种类型的函数......

if(exists('a.b.c')) alert('c exists');
function exists(varname){
    vars=varname.split('.');
    for(i=0;i<vars.length;i++){
       //iterate through each object and check typeof
    }
}
//this wont work with local variables inside a function

编辑:下面的解决方案 (归功于 Felix 的这篇文章,我只是稍微调整了一下 Check if object member exists in nested object )

这个有效:

if (typeof a != 'undefined' && a.b && a.b.c) alert('c exists')

但我发现最好的办法是将其放入一个函数中。我使用了 2 个不同的函数,一个是获取对象深处的变量,另一个只是检查它是否已设置。

/**
 * Safely retrieve a property deep in an object of objects/arrays
 * such as userObj.contact.email
 * @usage var email=getprop(userObj, 'contact.email')
 *      This would retrieve userObj.contact.email, or return FALSE without
 *      throwing an error, if userObj or contact obj did not exist
 * @param obj OBJECT - the base object from which to retrieve the property out of
 * @param path_string STRING - a string of dot notation of the property relative to
 * @return MIXED - value of obj.eval(path_string), OR FALSE
 */
function getprop(obj, path_string)
{
    if(!path_string) return obj
    var arr = path_string.split('.'),
        val = obj || window;

    for (var i = 0; i < arr.length; i++) {
        val = val[arr[i]];
        if ( typeof val == 'undefined' ) return false;
        if ( i==arr.length-1 ) {
            if (val=="") return false
            return val
        }
    }
    return false;
}

/**
 * Check if a proprety on an object exists
 * @return BOOL
 */
function isset(obj, path_string)
{
    return (( getprop(obj, path_string) === false ) ? false : true)
}

最佳答案

试试这个:

if (a && a.b && a.b.c)

关于javascript - 如何检查是否设置了另一个对象内的对象内的变量(js)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5053572/

相关文章:

javascript - 使用 Javascript、ASP.NET 和 AJAX 防止重复的数据库输入

javascript间隔内存泄漏

Javascript:为什么数组切片方法可以将节点列表或参数转换为数组?

javascript - 更好的写法(jQuery)

javascript - JSX 生成 div 并推送到数组

javascript - 匹配的路由在路由哈希更改时不会更改

javascript - JavaScript 的广播 channel 是否限制为每秒接收一条消息?

javascript - Chrome 有时不请求 CSS 页面

javascript - 加速:visible:input selector avoiding filter

javascript - 检查可见 Div 不起作用?