ben*_*nto 4 javascript properties object
可能重复:
javascript测试是否存在嵌套对象键
我试图构建一个错误消息formset
通过测试,如果某个对象是没有 undefined
的,如果它不是undefined
,那么我结束了该错误信息填充它.主要的问题是我必须验证每个嵌套对象是否是undefined
,这导致一些相当丑陋的代码.这是一个例子:
errorsForField: function(fieldName, formsetName, formNumber) {
if (typeof this.model.errors != 'undefined'){
var fieldError = document.createElement('span');
$(fieldError).addClass('field-error');
// THE FOLLOWING LINE THROWS ERROR.
if (formsetName && _.isUndefined(this.model.errors[formsetName][fieldName]) != true) {
$(fieldError).text(this.model.errors[formsetname][fieldName]);
} else if (typeof this.model.errors[fieldName] != "undefined"){
$(fieldError).text(this.model.errors[fieldName]);
}
this.errors[fieldName] = fieldError.outerHTML;
return fieldError.outerHTML;
}
return false;
},
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,指出我不能确定[fieldName]
的undefined object
this.model.errors[formsetName]
.换句话说,我必须先确定是否this.model.errors[formsetName]
为空,然后测试是否[fieldname]
为空undefined
.
这似乎是一个非常麻烦的解决方案.有任何改变这个的建议吗?
您可以创建一个库函数,它将属性名称作为参数并返回最终值(如果存在),或者为null:
function TryGetPropertyValue(o, propertyName1 /*, ... propertyNameN */) {
var names = [].slice.call(arguments, 1);
while (o && names.length) {
o = o[names.shift()];
}
return names.length ? null : o;
}
Run Code Online (Sandbox Code Playgroud)
称之为:
var err = TryGetPropertyValue(this.model.errors, formsetName, fieldName) ||
TryGetPropertyValue(this.model.errors, fieldName);
if (err != null) {
$(fieldError).text(err);
}
Run Code Online (Sandbox Code Playgroud)
如果您希望它返回undefined
而null
不是找不到该字段,您可以稍微更改该功能:
function TryGetPropertyValue(o, propertyName1 /*, ... propertyNameN */) {
var names = [].slice.call(arguments, 1);
while (o && names.length) {
o = o[names.shift()];
}
if (names.length == 0) {
return o;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3206 次 |
最近记录: |