Javascript 在JS中,验证对象是否存在以及是否存在某个属性的最佳和最快方法是什么?
在使用该对象执行任何操作之前,我必须进行有效性检查-Javascript 在JS中,验证对象是否存在以及是否存在某个属性的最佳和最快方法是什么?,javascript,json,Javascript,Json,在使用该对象执行任何操作之前,我必须进行有效性检查- 如果该对象存在 如果其存在,则其上也存在某个属性 前- var obj = { key: "value" } 现在最常用的方法是- if(obj) { if(obj.hasOwnProperty('key') { //Do some action (validity check pass) //For Example- console.log(obj.key); } } 但我正在寻找
var obj = {
key: "value"
}
现在最常用的方法是-
if(obj) {
if(obj.hasOwnProperty('key') {
//Do some action (validity check pass)
//For Example- console.log(obj.key);
}
}
但我正在寻找一种更快、更有效的方法来解决这个问题。我会:
if ( typeof obj != "undefined" && obj.hasOwnProperty('key') )
{
console.log('found');
}
else
{
console.log('not found');
}
像这样
var obj={
关键词:“价值”
}
var objx=null;
if(obj中的obj&“键”){
document.getElementById(“check_one”).innerHTML=“有效”;
}否则{
document.getElementById(“check_one”).innerHTML=“无效”;
}
if(obj中的obj和“notkey”){
document.getElementById(“check_two”).innerHTML=“有效”;
}否则{
document.getElementById(“check_two”).innerHTML=“无效”;
}
if(objx中的objx&“键”){
document.getElementById(“check_three”).innerHTML=“有效”;
}否则{
document.getElementById(“check_three”).innerHTML=“无效”;
}
勾选一项(应有效):
检查二(应无效):
检查三(应无效)
如果您关心原型链,那么没有更好的方法;你必须检查链条上的每个环节
如果没有,并且属性通常存在,那么访问属性并捕获任何异常可能是值得的,但是使用性能测试来查看
但我想说的是,问题在于您对输入的限制不够:要求代码的调用者提供一个对象,并让他们处理它
对我来说,它“闻起来”像两个独立的问题:“对象存在吗?”,如果存在,则提供默认值和“对象是否具有此属性?”,业务逻辑
如果是这样,使用标准模式设置默认值:“obj=obj | |{};”;然后测试就变成了一个单一的调用,很难做到“更快”。正如@Stuart和@phuzi所提到的,你完全可以将这两个语句组合成一个:
if(!!obj && obj.hasOwnProperty('key')
另外,hasOwnProperty
将忽略通过原型继承的所有属性。如果希望包含继承的属性,可以在此处使用运算符
if (!!ob && (prop in ob))
您可以缩短代码并使用单个if
if(obj&&obj.hasOwnProperty('key')){…
考虑一下。
从lodash
,答案已经被“更快更高效”贴出来了,你是说性能方面吗?@Manueloto是的。@KaranHudia它已经快了。此外,这真的不应该影响性能。