Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS中,验证对象是否存在以及是否存在某个属性的最佳和最快方法是什么?_Javascript_Json - Fatal编程技术网

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它已经快了。此外,这真的不应该影响性能。