检查对象参数是否未定义
check if object parameter is undefined
我有一个类似于这里的情况:Javascript检查对象属性是否存在,即使对象是未定义的
我的问题是,如果你有一个属性链会发生什么。例子:
var obj = {'a': {'b': {'c': {'d': 'I exists'}}}}
我需要检查'd'是否被定义。为了不出现错误,我必须这样检查:
if (typeof obj != 'undefined' && typeof obj['a'] != 'undefined' && typeof obj['a']['b'] != 'undefined' && typeof obj['a']['b']['c'] != 'undefined' && typeof obj['a']['b']['c']['d'] != 'undefined')
你可以看到这有多烦人。以999级深层元素为例。有没有办法消除前n-1个条件?
使用try-catch解决方案:
var check = function(obj) {
try {
return (typeof obj.a.b.c.d !== 'undefined');
} catch (e) {
return false;
}
};
alert(check({
'a': {
'b': {
'c': {
'd': 'I exists'
}
}
}
}));
你可以这样尝试:
function checkUndefined(obj) {
var x = Array.prototype.slice.call(arguments, 1);
for (var i = 0; i < x.length; i++) {
if (!obj || !obj.hasOwnProperty(x[i])) {
return false;
}
obj = obj[x[i]];
}
return true;
}
就像Tushar在他的回答中所说的:
你不能摆脱第一个
n - 1
条件
所以你只需要缩短你的语句,这样就不会那么长了。
检查下面我创建的例子:
<<p> JSFIDDLE例子/strong>var obj = {'a': {'b': {'c': {'d': 'I exists'}}}};
for (var key in obj)
{
if (obj && obj.a.b.c.d)
{
console.log(obj.a.b.c.d);
}
}
您可以按以下方法检查值是否为真。
你不能去掉第一个n - 1
条件,但是你可以缩短语句
if (obj && obj.a && obj.a.b && obj.a.b.c && typeof obj.a.b.c.d !== 'undefined')
// Use of obj.a.b.c.d is considered safe here
试着像下面这样写你自己的属性检查器:
JavaScript:function test(object) {
var restOfKeys = [];
for (var _i = 1; _i < arguments.length; _i++) {
restOfKeys[_i - 1] = arguments[_i];
}
var propertyToTest;
if (object === undefined || !restOfKeys.length) {
return false;
}
propertyToTest = restOfKeys.shift();
if (restOfKeys.length) {
return test.apply(void 0, [object[propertyToTest]].concat(restOfKeys));
}
return object[propertyToTest] !== undefined;
}
var toTest = { a: { b: { c: "asd" } } };
alert(test(toTest, "a", "b", "c"));
打印稿:
function test(object: any, ...restOfKeys: string[]) {
let propertyToTest: string;
if (object === undefined || !restOfKeys.length) {
return false;
}
propertyToTest = restOfKeys.shift();
if (restOfKeys.length) {
return test(object[propertyToTest], ...restOfKeys);
}
return object[propertyToTest] !== undefined;
}
var toTest = { a: { b: { c: "asd" } } };
alert(test(toTest, "a", "b", "c"));
源代码在此
var obj = {a:undefined,b:undefined,c:undefined,d:'I exists'};
if(typeof obj['a'] === 'object'){alert(typeof obj['a']);}
else if(typeof obj['b'] === 'object'){alert(typeof obj['b']);}
else if(typeof obj['c'] === 'object'){alert(typeof obj['c']);}
else{alert(typeof obj['d']+' : '+obj['d']);}
查看这里http://www.w3schools.com/js/js_datatypes.asp的数据类型这里是http://www.w3schools.com/js/js_arrays.asp for array
相关文章:
- 如何在JavaScript中检查变量是否为null和/或未定义
- 检查对象的所有属性是否未定义
- AngularJs 检查是否未定义和空的最佳实践
- 如何检查服务器是否返回未定义然后忽略它
- 离子警报 - 检查结果是否未定义
- 什么更快?运行空函数或检查函数是否未定义
- 理解Javascript中的“未定义”:它是如何工作的,如何安全地检查它以及是否可以重新分配
- Jquery Ajax 和 Json:如何检查是否未定义
- 检查是否有未定义的数组
- 函数返回undefine,即使我在返回之前检查了变量是否未定义
- 在执行脚本之前,请查看对象是否未定义
- Javascript数组中未定义的值是否使用任何内存或在for in循环中迭代
- Javascript是否为具有未定义值的变量分配32位内存
- 如何进行单元测试以查看角度是否未定义
- 在javascript中测试变量是否为null,而不会导致未定义的错误
- 检查变量是否大于某物,但不是未定义的
- 检查数组位置是否真的未定义
- 为什么我无法检查对象节点是否未定义
- 是否存在 document.getElementById('element')的情况;将返回未定义
- 检查未定义是否不起作用