• js Object.prototype.hasOwnProperty() 与 for in 区别


    hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性

    语法

    obj.hasOwnProperty(prop)
    

    参数

    prop要检测的属性 [字符串] 名称或者 [Symbol]。

    返回值

    用来判断某个对象是否含有指定的属性的 [Boolean] 。

    描述

    所有继承了 [Object]的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 [in]运算符不同,该方法会忽略掉那些从原型链上继承到的属性。

    示例

    使用 hasOwnProperty 方法判断属性是否存在

    下面的例子检测了对象 o 是否含有自身属性 prop:

    o =newObject();
    o.prop ='exists';functionchangeO(){
      o.newprop = o.prop;delete o.prop;}
    
    o.hasOwnProperty('prop');// 返回 truechangeO();
    o.hasOwnProperty('prop');// 返回 false
    

    自身属性与继承属性

    下面的例子演示了 hasOwnProperty 方法对待自身属性和继承属性的区别:

    o =newObject();
    o.prop ='exists';
    o.hasOwnProperty('prop');// 返回 true
    o.hasOwnProperty('toString');// 返回 false
    o.hasOwnProperty('hasOwnProperty');// 返回 false
    

    遍历一个对象的所有自身属性

    下面的例子演示了如何在遍历一个对象的所有属性时忽略掉继承属性,注意这里 [for...in] 循环只会遍历可枚举属性,所以不应该基于这个循环中没有不可枚举的属性而得出 hasOwnProperty 是严格限制于可枚举项目的(如同 [Object.getOwnPropertyNames()])。

    var buz ={
        fog:'stack'};for(var name in buz){if(buz.hasOwnProperty(name)){alert("this is fog ("+ name +") for sure. Value: "+ buz[name]);}else{alert(name);// toString or something else}}
    

    使用 hasOwnProperty 作为属性名

    JavaScript 并没有保护 hasOwnProperty 属性名,因此某个对象是有可能存在使用这个属性名的属性,使用外部的 hasOwnProperty 获得正确的结果是需要的:

    var foo ={
        hasOwnProperty:function(){returnfalse;},
        bar:'Here be dragons'};
    
    foo.hasOwnProperty('bar');// 始终返回 false// 如果担心这种情况,可以直接使用原型链上真正的 hasOwnProperty 方法({}).hasOwnProperty.call(foo,'bar');// true// 也可以使用 Object 原型上的 hasOwnProperty 属性
    Object.prototype.hasOwnProperty.call(foo,'bar');// true
  • 相关阅读:
    JVM问题定位分析(一)
    性能分析--上下文切换(context switch)
    JVM--如何通过软引用和弱引用提JVM内存使用效率
    docker挂载文件宿主机与容器内部数据不同步问题
    使iptables规则在CentOS 7中持久化
    dstat
    curl
    Django REST framework 之JWT认证
    【区别】摘要、数字签名、数字证书
    使用django.core.mail的EmailMultiAlternatives发送邮件a标签链接不生效问题
  • 原文地址:https://www.cnblogs.com/ysk123/p/10009104.html
Copyright © 2020-2023  润新知