精华内容
下载资源
问答
  • JS 判断对象属性是否存在,判断是否包含某个属性,是否为自身属性 判断是否包含某对象 我们知道访问对象属性有两种形式,如下: var obj = { name:'听风是风' }; obj.name; //听风是风 obj['name']; //听风是风 ...

    JS 判断对象属性是否存在,判断是否包含某个属性,是否为自身属性

    判断是否包含某对象

    我们知道访问对象属性有两种形式,如下:

    var obj = {
      name:'听风是风'
    };
    obj.name;   //听风是风
    obj['name'];   //听风是风
    

    那么马上有同学就想到用这两种形式判断对象是否包含某个属性,因为原型链上如果某个属性不存在就会返回undefined,比如:

    if(!obj.age){
        console.log('obj没有age属性');
    }
    

    这么做行不行,行,但是存在缺陷。最特殊的情况就是我们有age字段,而它的值偏偏就是 undefined,那这样就尴尬了。

    怎么办呢,一般推荐使用 in 运算符,用法是属性名 in 对象,如果存在返回 true,反之为 false,来看个例子:

    var echo = {
        name:'听风是风',
        job:undefined
    };
    console.log('name' in echo);   //true
    console.log('job' in echo);    //true
    console.log('age' in echo);    //false
    

    但需要注意的是,in 只能判断对象有没有这个属性,无法判断这个属性是不是自身属性,啥意思?咱们接着说。

    判断是否是自身属性

    一个最简单的构造函数创建实例的例子:

    function Parent(){
        this.name = 'echo';
    };
    Parent.prototype.age = 26;
    var o = new Parent();
    o.name//echo
    o.age//26
    

    在这个例子中,对于实例 o 而言,name 就是是自身属性,这是它自己有的,而 age 是原型属性,o 虽然没有这个属性,但在需要时,它还是顺着原型链找到了自己的老父亲 Parent,并借用了这个属性。

    所以当我们用 in 判断时可以发现结果均为 true:

    'name' in o;//true
    'age' in o;//true
    

    针对这个问题,如果我们还要判断是否是自身属性,就得借用方法hasOwnProperty(),不信你看:

    o.hasOwnProperty('name');//true
    o.hasOwnProperty('age');//false
    

    说到底hasOwnProperty()做了两件事,除了判断对象是否包含这个属性,还判断此属性是不是对象的自身属性。

    所以我们可以简单总结一下,如果我们只需判断对象有没有某个属性,使用 in 运算符就好了。而如果我们还要关心这个属性是不是自身属性,那么推荐hasOwnProperty()方法。

    说了这么多,这两个判断有什么使用场景呢?

    关于 in 运算符判断对象有没有某个属性,最常见的,我们希望给某个对象添加一个方法,直接添加又担心其他同事已经声明过,存在覆盖的可能性,所以使用 in 来判断,没有这个属性,咱们再加。

    当然针对这个问题,使用 Symbol 来确保对象 key 的唯一性也是不错的做法,这个就看实际场景了。

    而关于hasOwnProperty()这个方法呢,我目前遇到的就是深拷贝实现时会使用,因为我们知道每个对象都有原型,而深拷贝时我们只是希望拷贝对象的自身属性,使用此方法做个区分就是非常奈斯的做法了。

    好了,这篇文章就说到这里了,全文结束。

    转自:https://www.cnblogs.com/echolun/p/12377650.html

    展开全文
  • 主要介绍了JS如何判断对象是否包含某个属性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Object.hasOwnProperty()是查找对象是否包含属性,非原型上的属性。 而 in操作符是可以查找对象上原型上的属性和非原型上的属性。 知道上面两个方法后,我们可以写出一个判断是否是对象原型上的属性的方法 // ...

    首先查找对象的属性有两个方法: Object.hasOwnProperty()in 操作符

    Object.hasOwnProperty()是查找对象是否包含该属性,非原型上的属性。
    而 in操作符是可以查找对象上原型上的属性和非原型上的属性。
    

    知道上面两个方法后,我们可以写出一个判断是否是对象原型上的属性的方法

        // 判断是否原型上的属性
        function hasPrototypeProperty(obj, property) {
            return !obj.hasOwnProperty(property) && property in obj;
        }
    
    
    展开全文
  • 判断对象中是否包含某个属性名 1.indexOf 可以判断数组是否包含某个值,返回该值对应的下标;对于不存在的值,返回-1; ES6还提供了其他几种判断对象是否包含属性名的方法: 2.in:属性名 in 对象(判断属性名...

    判断对象中是否包含某个属性名

    1.indexOf 可以判断数组是否包含某个值,返回该值对应的下标;对于不存在的值,返回-1;

    ES6还提供了其他几种判断对象是否包含属性名的方法:

    2.in:属性名 in 对象(判断属性名是否存在对象中存在,返回一个布尔值);

    var obj = {
            name:'张三',
            age:22,
            sex:'male'
        };
    console.log('name' in obj); /true
    console.log('personal' in obj); //false

    3.hasOwnProperty:对象.hasOwnProperty(属性名) (判断对象中是否含有某个属性名,返回一个布尔值);

    ​var obj= {
            name:'张三',
            age:22,
            sex:'male'
        };
    console.log(obj.hasOwnProperty('age')); //true
    console.log(obj.hasOwnProperty('personal')); //false
    
    ​

     

    展开全文
  • in 运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回 true,否则返回 false。它的左边是一个字符串,表示属性名,右边是一个对象。 var obj = { p: 1 }; 'p' in obj // true '...

    in 运算符

    in 运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回 true,否则返回 false。它的左边是一个字符串,表示属性名,右边是一个对象。

    var obj = { p: 1 };
    'p' in obj // true
    'toString' in obj // true
    

    in 运算符的存在一个问题,它不能识别哪些属性是对象自身的,哪些属性是继承的。就像上面代码中,对象obj本身并没有toString属性,但是in运算符会返回true,因为这个属性是继承的。怎么解决这个问题呢?看下文

    hasOwnProperty方法

    可以使用对象的hasOwnProperty方法判断一下,是否为对象自身的属性。

    var obj = {};
    if ('toString' in obj) {
      console.log(obj.hasOwnProperty('toString')) // false
    }
    
    展开全文
  • JavaScript 中的所有事物都是对象:...1、使用in关键字该方法可以判断对象的自有属性和继承来的属性是否存在。var o = {x: 1};"x" in o; //true,自有属性存在"y" in o; //false"toString" in o; //true,是一个继承...
  • js判断对象为空以及有好几种方法了,但是个人觉得不是特别方便。 比如: 1、把对象通过 JSON.stringify 转为字符串,再判断字符串是否等于 " {} " 2、for in循环,判断key是否存在 3、jq的方法 es6已经帮我们很...
  • javascript判断对象是否存在某属性有三种方法,三种方式各有优缺点,不同的场景使用不同的方式,有时还需要结合使用,比如遍历自身属性的时候,就会把 for ··· in ···和 hasOwnProperty()结合使用。javascript...
  • hasOwnProperty 用来判断对象否有自己的某个属性。这个方法会查找一个对象是否有某个属性,但是不会去查找它的原型链。 为了判断一个对象是否包含自定义属性而不是原型链上的属性, 我们需要使用继承自 Object....
  • 下面本篇就来给大家介绍几种使用javascript判断对象是否包含有某属性的常见方法,希望对大家有所帮助。一、使用“!==”“!==”方法在工作中很常见,可以看出该方法可以判断继承来的属性。let obj = { x: 1 };obj.x...
  • 一些情况下,我们需要知道对象属性是原型的还是实例的,如果看代码的话比较繁琐,下面讲解下如何可以直接判断 1. hasOwnProperty()函数用于指示一个对象自身(不包括原型链)是否具有指定名称...
  • 第一种:hasOwnProperty 方法 objc.hasOwnProperty('name');...第二种:undefined判断 objc.name!==undefined; //true 第三种:in关键字 var obj = {name:'tom'}; 'name' in obj //返回bool值
  • 我们在使用对象的时候,通过点或方括号可以获取对象属性值,如果该对象自身不存在这个属性,就会返回undefined。 var obj={ name:"小破船", doWhat:"借箭" }; console.log(obj.name);//小破船 console....
  • js判断对象为空已经有好几种方法了,但是个人觉得不是特别方便。 比如: 1、把对象通过 JSON.stringify 转为字符串,再判断字符串是否等于 " {} " 2、for in循环,判断key是否存在 3、jq的方法 es6已经帮我们很好的...
  • js判断对象中是否包含某个属性

    千次阅读 2020-05-05 17:09:22
    方法一(in)有返回true,否者返回false var obj = { name: 'dj', age: 18 } console.log('name' in obj) // true console.log('eat' in obj) // false 方法二(hasOwnProperty)有返回true,否者返回false ...
  • js 判断对象中是否包含某个属性

    万次阅读 2019-06-27 14:01:13
    var obj = {name:'张三',age:18}; obj.hasOwnProperty('name'); // --> true obj.hasOwnProperty('id'); // --> false
  • 小程序中js判断对象属性是否存在?

    千次阅读 2020-07-08 14:39:00
    小程序中js判断对象属性是否存在? 在小程序开发过程中,调用接口返回的数据,有数据返回是正常的,没有数据返回时有错误提示,需要验证下返回的记录集中是否存在对应的属性,做记录备用; 实例代码: if(typeof res...
  • js判断对象属性是否存在的三种方法

    万次阅读 2016-12-29 21:52:51
    1.in 可以检测自有属性和继承属性var o={x:1}...'toString' in o //返回true,因为对象o继承了原型的toString属性2.hasownproperty() 只能检测自有属性var o={x:1}; o.hasownproperty('x') //返回true o.hasownproperty

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 163,076
精华内容 65,230
关键字:

js判断对象包含属性