typeof不能检测js对象是否是数组的原因是: typeof会将object, array和null都返回为object

下面哪些方式在同一个窗口下能够检测一个js对象是数组类型?

A
Array.isArray()

B
instanceof

C
typeof

D
Object.prototype.toString.call()

正确答案:ABD

A:Array 为 js 的原生对象,它有一个静态方法:Array.isArray(),能判断参数是否为数组

B:instanceof 运算符返回一个布尔值,表示对象是否为某个构造函数的实例(题目中 instance of , emem)

C: typeof 能判断类型有:number、string、boolean、symbol、undefined、function; object、array、null 的变量都返回 object

D:Object.prototype.toString() 为 Object 对象的实例方法,默认情况下(即不重写该方法),返回参数的类型字符串。
console.log(Object.prototype.toString.call(['a']).slice(8,-1)); // 'Array'

A选项没啥好说的,原生支持的方法

B选项 instanceof 运算符返回一个布尔值,表示对象是否为某个构造函数的实例,这时可能就有同学要提出疑问了:

我用这个方法,似乎无法分辨数组与对象的区别啊, arr instanceof Array/Object 似乎都会返回 true !这不是不严谨吗?
注意审题:检测一个JS对象是数组类型,既定的事实是我们当前是一个对象,然后要判断它是否为数组,不懂直接看图解

C选项 typeof 能判断类型有:number、string、boolean、symbol、undefined、function;

object、array、null的变量都返回 object,所以错

D选项直接上图

posted @ 2023-11-11 11:55  龙陌  阅读(136)  评论(0)    收藏  举报