typeof、instanceof和Object.prototype.toString.call()的区别

mark下

typeof
返回一个字符串,指示未经计算的操作数的类型。

const str = 'abcdefg'
typeof str // string

值得注意的是typeof 无法判断数组

const arr = []
typeof arr // object

typeof 只能判断基本类型,除此之外Date null regExp等都只是object的拓展
因此数组建议使用instanceof来判断

instanceof
instanceof运算符用于测试一个对象是否在其原型链上存在一个构造函数的prototype属性

function fn () {}
function oth () {}
const fun = new fn()
fun instanceof fn // true
fun instanceof oth // false

const arr = []
arr instanceof Array // true

Object.prototype.toString.call()

Object.prototype.toString.call(obj) 返回obj的类型字符串

const str = 'hello world'
const arr = []
const obj = {}
Object.prototype.toString.call(str) // '[object String]'
Object.prototype.toString.call(arr) // '[object Array]'
Object.prototype.toString.call(obj) // '[object Object]'
发布了12 篇原创文章 · 获赞 8 · 访问量 368

猜你喜欢

转载自blog.csdn.net/ZhuAiQuan/article/details/105419373
今日推荐