zoukankan      html  css  js  c++  java
  • JavaScript 判断对象是否具有某属性的方法

    方法1:.[]符号

    let test = {name: 'lei'} // 创建对象
    
    test.name // 获取name属性值,返回:lei
    test["name"] //  获取name属性值,返回:lei
    
    test.age // 获取不存在的属性age,返回:undefined
    test["toString"] // 获取原型上的属性,返回:toString() {[native code]}
    
    test.val = undefined // 新增一个值为值为 undefined 的属性 val
    test.val // 获取val属性值,返回:undefined
    

    从示例可以发现,使用obj.x !== undefined来判断 obj 对象是否存在 x 属性有一定局限性,即:如果 obj.x 的值为 undefined,则不能正确判断 Obj 对象是否有 x 属性

    方法2:in运算符

    let test = {name: 'lei', val: undefined} // 创建对象
    
    'name' in test // 返回:true
    'val' in test // 返回:true
    'toString' in test // 返回:true
    'age' in test // 返回: false
    

    从示例可以发现,与方法1不同,可以判断出值为 undefined 的属性是存在的,局限性是,不能区分对象本身属性原型链的属性

    方法3:hasOwnProperty方法

    let test = {name: 'lei', val: undefined} // 创建对象
    
    test.hasOwnProperty('name') // 返回:true,是对象自身属性
    test.hasOwnProperty('age') // 返回:false,属性不存在
    test.hasOwnProperty('toString') // 返回:false,不是对象自身属性,是原型链属性
    

    从示例可以发现,hasOwnProperty() 可以判断 对象自身属性,适用于对象自身属性判断的场景
    注意:在ESLint规则中,禁用了 state.hasOwnProperty(key) 用法,需要修改为 Object.prototype.hasOwnProperty.call(state, key)

  • 相关阅读:
    Working with Deployment Configurations in CodeDeploy
    ECS 容器实例生命周期
    设置 API Gateway 金丝雀版本部署
    Elastic Beanstalk 滚动环境配置更新
    Kinesis Data Firehose 中的数据保护
    为 API Gateway REST API 资源启用 CORS
    高级 AWS Elastic Beanstalk 环境配置
    Amazon SWF Actors
    AWS CloudFormation 模板结构
    字符编码
  • 原文地址:https://www.cnblogs.com/lqqgis/p/14704615.html
Copyright © 2011-2022 走看看