判断一个值是对象还是数组,数组或对象判空,判断数组或对象中是否包含某个值

一.判断一个值是对象还是数组

1. 通过es6的一个方法Array.isArray()判断

Array.isArray(  ) 用于确定传递的值是否是一个数组,返回一个布尔值。

let a = [1,2,3]

Array.isArray(a); //true
Array.isArray({}/null/function); //false

这个方法只能判断出变量是否为数组,并不能确定是否为对象

2. 通过 instanceof 运算符判断

instanceof运算符用于检验构造函数的prototype属性是否出现在对象的原型链中的任何位置,返回一个布尔值。

let a = [];

a instanceof Array; //true
a instanceof Object; //true

let b = {};

b instanceof Array; //false
b instanceof Object; //true

通过上面代码可以发现,数组不仅是Array类型的实例,也是Object类型的实例。因此我们在判断一个变量是数组还是对象时,应该先判断数组类型,然后再去判断对象类型

⚠️不用typeof判断的原因:

  null、对象、数组返回的都是object类型(引用类型);对于函数类型返回的则是function。

3. 通过 constructor 属性判断

 判断一个变量是否是数组或者对象,从另一个层面讲,就是判断变量的构造函数是Array类型还是Object类型。因为一个对象的实例都是通过构造函数生成的,所以,我们可以直接判断一个变量的constructor属性。

let a = [];

a.constructor === Array; //true

a.constructor === Object; //false

let b = {};

b.constructor === Array; //false

b.constructor === Object; //true

每个变量都会有一个__proto__属性,表示的是隐式原型(原型链的知识)。一个对象的隐式原型指向的是构造该对象的构造函数的原型,因此,每一个变量都有constructor属性

二. 对象或数组判空

1. a.length === 0 判断数组是否为空

2.JSON.stringfy(b) === ' { } '  判断对象是否为空

三. 对象或数组中是否包含某个值

1.判断数组中存在某个值

1)for循环

for (let i = 0; i < array.length; i++) { if (array[i] == 3) { return true } }

2) includes

array.includes(3)  //输出true表示存在

3)indexOf

array.indexOf(3)  // 输出这个数的下标 ,不为-1则表示存在

4)filter

array.filter(c=>c==3).length>0 // 输出true 存在   filter返回的是一个数组

5)find

array.find(c=>c===3}) // 输出3   find返回的是找到的第一个元素

6)some

array.some(c=>c===3) // 输出true  some找到第一个元素则返回布尔值,且不在继续检测

7)Set中has

new Set(array).has(3)  // 输出true

2. 判断对象中存在某个值

1) 使用“!==”进行判断(属性的值为undefined的时候无法区分)

let  obj = {name:"zhang" , age:undefined,};

obj.name !== undefined;  // true 有这个属性
obj.sex !== undefined; // fasle  无 sex 这个属性

obj.age !== undefined;   // fasle  但有这个属性

2)  in 运算符,in 的语法是: attr in obj ,表达式返回一个布尔值。(in可以区分存在但值为undefined的属性

'name' in obj; // true 有这个属性
'sex'   in obj;// fasle  无 sex 这个属性

'age '  in obj ; // true

3)  对象的 hasOwnProperty() 方法也可以检测指定属性名是否在对象内,返回布尔值。( 只能检测对象的私有属性,继承属性检测不出来)

obj.hasOwnProperty(‘name’); // true  有这个属性
obj.hasOwnProperty(‘sex’);// fasle  无 sex 这个属性

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值