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
}
}