JavaScript API响应-检查变量是否存在
在API响应中,我想检查变量是否存在。如果没有,我希望为其指定一个空值:JavaScript API响应-检查变量是否存在,javascript,Javascript,在API响应中,我想检查变量是否存在。如果没有,我希望为其指定一个空值: if(!data3.fields[i+2].values.value[0]) { data3.fields[i+2].values.value[0] = ""; } else { break; } 控制台中的错误为: 未捕获的TypeError:无法读取未定义的属性“值” 这让我很困惑,因为我认为这正是我的观点,如果这句话是正确的。你知道这里发生了什么吗?它不像PHP那样工作(它检查整个“链”)。在您的示例中,实
if(!data3.fields[i+2].values.value[0]) {
data3.fields[i+2].values.value[0] = "";
} else {
break;
}
控制台中的错误为:
未捕获的TypeError:无法读取未定义的属性“值”
这让我很困惑,因为我认为这正是我的观点,如果这句话是正确的。你知道这里发生了什么吗?它不像PHP那样工作(它检查整个“链”)。在您的示例中,实际上检查
值的值[0]
是否存在,但不检查值是否存在。完整版本应为:
if( data3 && && data3.fields[i+2] && data3.fields[i+2].values && !data3.fields[i+2].values.value[0]) {}
在代码ata3.字段[i+2]中,值未定义,您正试图访问“未定义”的值[0]
或者更简单一点,如果您想测试d
是否有值,您必须确保a
、b
和c
aldo有值:
if( a && a.b && a.b.c && !a.b.c.d){ /* ... */ }
如果确定存在检查,则可以删除检查左侧的检查。例如:如果您知道a.b
始终存在,您可以简单地说:
if( a.b.c && !a.b.c.d){ /* ... */ }
如果确实要确保完整的属性链没有未定义,则必须检查每个步骤,如果至少&&
条件为false,则不会执行后续步骤
if (data3 && data3.fields && data3.fields[i+2] && data3.fields[i+2].values && data3.fields[i+2].values.value && data3.fields[i + 2].values.value[0]) {
data3.fields[i + 2].values.value[0] = "";
} else {
break;
}
另一种方法是执行此操作并捕获异常:
try {
data3.fields[i + 2].values.value[0] = "";
} catch (e) {
break;
}
错误告诉您data3.fields[i+2]。值未定义。无法在未定义的
上检查属性.value
if (data3.fields[i+2] === undefined) {
data3.fields[i+2] = {
values: {
value: ['']
}
};
}
如果您总是希望嵌套路径默认为空字符串,则需要验证每个属性/索引在此过程中所属
if (data3.fields[i+2] === undefined) {
data.fields[i+2] = {};
}
if (data3.fields[i+2].values === undefined) {
data3.fields[i+2].values = {};
}
if (data3.fields[i+2].values.value === undefined) {
data3.fields[i+2].values.value = [];
}
// and finally your empty string assignment
if (data3.fields[i+2].values.value[0] === undefined) {
data3.fields[i+2].values.value[0] = '';
}
根据您的需求,您可能可以在知道data3后立即分配存根。字段[i+2]
是未定义的
if (data3.fields[i+2] === undefined) {
data3.fields[i+2] = {
values: {
value: ['']
}
};
}
if
检查无法防止您尝试使用未定义的变量。在您的实例中,values
属性是undefined
。如果您想测试它,您需要首先检查该特定属性
if(data3.fields[i+2].values !== undefined && data3.fields[i+2].values.value[0]){
//do something with data3.fields[i+2].values.value[0]
}
此外,如果您处于甚至不知道data3是否存在的场景中(例如,您正在检查环境中是否存在第三方脚本或其他内容),则需要使用typeof
运算符以确保安全。例如
if(typeof(ga) !== 'undefined'){ //typeof returns a string. This would be testing for google analytics on a page.
数据
,字段
,字段[i+2]
,值
或值
都可能在该查询中未定义,如果其中任何一个为空
,则可能会出现重复情况。如果需要容纳空值,则条件的限制性会降低。在OPs问题中,data3.fields[i+2]
是未定义的
,不是空的,所以后面的所有内容都是空的。如果只替换“代码”>“(DATA3.Field[i+1]==未定义)< /COD> < <代码> >(DATA3.Field[i+1])/代码>它将迎合博思,我想使用一些类似于Loasy'的东西!数据3.字段[i+2]
,但这样的更改也会捕获false
、'
、0
,等等。。。