hasOwnProperty判断是否是自身属性

123 阅读1分钟

hasOwnProperty(propertyName)用来检测该对象自身是否具有某属性。如果有,返回true, 如果没有,返回false。 但是,javaScript没有将hasOwnProperty作为敏感词,当开发者自己将对象的一个属性命名为hasOwnProperty时:

var obj = {
    hasOwnProperty: {
        return false;
    },
    name: 'helloWorld'
}

这样obj.hasOwnProperty('name')将永远返回false。

所以就无法再使用对象原型的 hasOwnProperty 方法来判断属性是否是来自原型链。 所以需要这样使用:

{}.hasOwnProperty.call(obj, 'name')
//或者:
Object.property.hasOwnProperty.call(obj, 'name')

实际运用:【将data中对象,转为params拼接到url上】

function getStringParams(data){
    let arr = []
    for(let key in data{
         if({}.hasOwnProperty.call(data, key)){
             arr.push(`${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`)
         }
    }
   return arr.join('&')
}
 // 类型转换
    function myTypeof(val) {
      var type = typeof (val)
      var toString = Object.prototype.toString
      var typeObj = {
        '[object Object]': 'object',
        '[object Array]': 'array',
        '[object Number]': 'number',
        '[object String]': 'string',
        '[object Boolean]': 'boolean',
      }
      // type 是 null
      if (val === 'null') {
        return 'null'
      }
      // type 是引用类型 
      if (type === 'object') {
        var result = toString.call(val)
        return typeObj[result]
      } else {
        // type 是基本类型
        return type
      }
    }