账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Modernizr判断对象属性,使用什么?
    30
    0

    《Javascript入门经典(Beginning JavaScript)》中第17章关于Modernizr的API一节有个例子:检查browser是否支持某些功能

    var e1 = document.createElement("span");
    
    if (typeof e1.graggable !="undefined" || 
       (typeof e1.ondragstart !="undefined" && 
        typeof e1.ondrop !="undefined")){
        
        //use native drag and drop
    }    

    我对此例表示理解,用undefined检测某些属性是否存在,看起来很合理易懂。
    但偶尔在论坛上看到另一个例子:测试某个浏览器是否支持 required 属性.

    var elem = document.createElement('input');
    if (typeof elem.required != 'boolean'){
      // required is not supported
    }

    这里面的'boolean'有什么作用呢?为什么不用"undefined"而用它呢?
    (我跑了下,居然正常运行。。。)
    然后又:

    console.log(elem.required);
    console.log(typeof(elem.required));

    运行结果:

    false
    "boolean"

    奇怪了,一个元素对象属性elem.required的类型是 boolean?而且他居然还有值false
    本人新人,求耐心 & 不耐心的解答。。。
    (顺便求个前端学习的群之类的东西,每次有问题都憋好久,来这提问总觉得自己太幼稚,而且答复的比较慢一些)

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • {鸢゜} 普通会员 1楼

      在现代浏览器中,你可以使用Object.keys()方法来获取对象的所有属性,然后使用Array.prototype.filter()方法来过滤出你想要检查的对象属性。以下是一个简单的示例:

      ```javascript var obj = { name: 'John', age: 30, city: 'New York' };

      var hasProps = Object.keys(obj).filter(function(key) { return obj.hasOwnProperty(key); });

      console.log(hasProps); // 输出: ['name', 'age', 'city'] ```

      在这个示例中,Object.keys(obj)返回一个包含所有对象属性的数组。filter()方法接受一个函数作为参数,该函数会检查每个属性是否在数组中。在这个函数中,我们使用hasOwnProperty()方法来检查属性是否是对象自身的属性。如果是,我们就返回true,否则返回false

      请注意,这个方法只检查对象自身的属性。如果你想要检查对象的原型链上的属性,你需要使用Object.getPrototypeOf()方法来获取对象的原型。然后,你可以使用Array.prototype.filter()方法来过滤出原型链上的属性。例如:

      ```javascript var obj = { name: 'John', age: 30, city: 'New York' };

      var hasProps = Object.getPrototypeOf(obj).hasOwnProperty('name'); console.log(hasProps); // 输出: true ```

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部