• 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
  • 相关阅读:
    eclipse设置字体大小
    如何利用服务器下发的Cookie实现基于此Cookie的会话保持
    Docker学习笔记_安装和使用Python
    Docker学习笔记_安装和使用mysql
    Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/images/json: dial unix /var/run/docker.sock: conne
    Ubuntu18.04创建新的系统用户
    Docker学习笔记_安装和使用nginx
    Docker安装和使用Tomcat
    虚拟机ubuntu18.04设置静态IP
    我学习参考的网址
  • 原文地址:https://www.cnblogs.com/ysk123/p/10009104.html
Copyright © 2020-2023  润新知