js 面试 1判断变量是否是数组 2 检测数据类型方法

1 是否是数组

  1. typeof 检测数据类型运算符

优点:使用简单

缺点:只能检测基本类型(除null外)

console.log(typeof(10)) //Number

console.log(typeof(false)) //boolean

console.log(typeof('hello')) //string

console.log(typeof([])) // object

console.log(typeof(function(){})) //function

console.log(typeof({})) //object

console.log(typeof(undefined)) //undefined

console.log(typeof(null)) //object

  1. instanceof 检测某个实例是否属于这个类

优点:可以正确判断对象类型(引用类型),内部运行机制是原型链上能否找到这个类型的原型。

缺点:不能正常判断基本类型 并且 不能跨iframe

console.log(100 instanceof Number) //false

console.log('100' instanceof String) //false

console.log(false instanceof Boolean) //false

console.log({} instanceof Object) //true

console.log(function(){} instanceof Function) //true

console.log([] instanceof Array) //true

console.log(/^$/ instanceof RegExp) //true

console.log(/^$/ instanceof Object) //true

前两种比较常用

  1. constructor

优点:基本能检测所有类型(除了null和undefined)

缺点:constructor容易被修改,也不能跨iframe

和instanceof很相似,也能检测出是基本类型,数组,正则。

但constructor检测正则 === Object 检测不出

console.log((10).constructor === Number) //true

console.log(([]).constructor === Array) //true

console.log((function(){}).constructor === Function) //true

console.log(({}).constructor === Object) //true

console.log(/^$/.constructor === RegExp) //true

console.log(/^$/.constructor === Object) //false

  1. Object.prototype.toString.call() 检测数据类型

优点:能检测出所有类型

缺点:在iE6下,undefined和null均为Obj

获取Object原型上的toString方法,让方法执行,并且改变方法中this关键字指向。

let monitor = Object.prototype.toString;

console.log(monitor.call(1)) //[object Number]

console.log(monitor.call('hello')) //[object String]

console.log(monitor.call(null)) //[object null]

console.log(monitor.call(undefined)) //[object undefined]

console.log(monitor.call(function(){})) //[object Function]

相关推荐
TomSmile_WorkSpace5 分钟前
RabbitMq项目实战--延迟队列实现超时订单处理
开发语言·后端·ruby
喜欢打篮球的普通人8 分钟前
Rust面向对象特性
开发语言·windows·rust
晨曦_子画8 分钟前
C#中:Any() 与 Count,选择哪一个??
开发语言·windows·c#
m0_6760995813 分钟前
Python高阶函数以及装饰器
开发语言·python
KO想偷懒14 分钟前
第8章利用CSS制作导航菜单
前端·css
昼夜ɑː18 分钟前
第8章利用CSS制作导航菜单
前端·css
Jiaberrr25 分钟前
uniapp中使用原生ajax上传文件并携带其他数据,实时展示上传进度
前端·javascript·vue.js·ajax·uni-app
Mr_Xuhhh1 小时前
递归搜索与回溯算法--递归(2)
开发语言·数据结构·c++·算法·链表·深度优先
小牛itbull1 小时前
ReactPress:深入解析技术方案设计与源码
javascript·react.js·reactpress
alexbai!1 小时前
el-date-picker picker-options属性中disabledDate设置时间的禁用和启用,并且支持到时分秒的禁用和启用
javascript·vue.js·elementui