js中和对象相关的操作(判断类型,是否有属性。。)

1.判断一个对象上是否有某属性
① 通过点. 或者方括号[]

let test = { name: ‘he’ }   
test.name , test[‘name’]   // 都会输出he。当属性不存在会返回undefined
test[‘toString’]  // ƒ toString() { [native code] }    原型链上有的toString方法,也能返回

② in 运算符
如果指定的属性在指定的对象或其原型链中,则in 运算符返回true。无法区分是自身还是原型上的属性

let test = { name: ‘he’ }   
‘name’ in test   // true
‘undefine’  in test   // true   undefined属性也可正常判断

③ hasownProperty()

    test.hasownProperty('name’)  // true. 自身的属性
    test.hasownProperty(‘toString’)  // fasle ,原型链上的属性

2.判断JS数据的类型
①.typeof

只会返回以下几种类型 number, boolean, string, function,object,undefined
注意: typeof(Null, Array,对象) 返回的都是是object (typeof 的局限性)

②.instanceof
instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。

用法:A instanceof B ,判断A是否是B的实例(检测的是原型),返回true或false

var b = '123';    alert(typeof b);  //string
alert(b instanceof String);  //false
var c = new String("123");  alert(typeof c);  //object
alert(c instanceof String);  //true

③.constructor
函数定义时,js引擎会为函数添加prototype对象指向原型,在prototype上添加constructor属性,指向该函数. 从原型链角度讲,这个时候构造函数F就是新对象f的类型。
在这里插入图片描述
注: 基本类型 null和undefined这两不能适用constructor。因为他是无效对象,因此不会有constructor存在,需要用其他方法判断
基本用法:

var a='we'
a.constructor === String   // true

④.Object.prototype.toString.call()
toString()是Object原型上的方法,调用该方法默认返回当前对象的[[Class]], 这是内部属性,返回格式[object 类型]

 Object.prototype.toString.call('')   //[object String]
 Object.prototype.toString.call([1,2,3])  // [object Array]

⑤.判断数据类型(结合以上 typeof 和instanceof ,适用于所有数据的方法)

function getDataType (obj) {
  if (obj === null) {
    return 'null'
  } else if (typeof obj === 'object') {
    if (obj instanceof Array) {
      return 'array'
    } else {
      return 'object'
    }
  } else { return typeof obj }
}

例子:

  1. 判断一个对象是否属于数组

①Objct.prototype.toString.call(obj)="[object Arrary]" (最佳)
②obj instanceof Array
③typeof obj
"object" &&obj.constructor==Array

3.判断一个变量是否为空对象
注意: 存在一个问题,对象上不可枚举的属性以下都不可行
①. json对象转化成json字符串,在判断该字符串是否为{}
var b = (JSON.stringify(obj) === ‘{}’)

②. Object.keys() 【ES6新增】
Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组。如果我们的对象为空,他会返回一个空数组。将所有可枚举属性键名列举到数组中,判断数组长度是不是0
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值