typeof一般是用于检测简单数据类型的;
(1)语法:
(2)缺点:
(3)举例说明
console.log(typeof 0) // number
console.log(typeof '0') // string
console.log(typeof true) // boolean
console.log(typeof undefined) // undefined
console.log(typeof null) //object
typeof [] // object
typeof function(){} // function
let sy=Symbol('xx')
console.log(typeof sy); //symbol
isNaN是window的方法,可以用于检测数据是否为数字类型;
语法
window.isNaN(value)
举例说明
isNaN(111) // false
缺点
结果存在不准确性
数字、(转化为Number类型不为NaN的)字符串、(转化为Number类型不为NaN的)的数组、null都会被认作数字
isNaN('11') // false
isNaN('a') // true
isNaN(11) // false
isNaN(null) // false
isNaN(undefined) // true
isNaN([11]) // false
isNaN([11.,12]) // true
(1)语法: 数据 instanceof 构造函数
(2)执行原理(本质):检测右面构造函数的原型对象是否在左侧数据地原型链上;
(3)缺点:结果存在不准确性;
(4)以检测数组为例(前提:数组的构造函数为Array)
console.log([111] instanceof Array); // true
console.log([111] instanceof Function); // false
console.log([111] instanceof Object); // true


Array原型上存在isArray方法,用于检测数据是否为数组;
(1)语法:Array.isArray(value)
(2)举例说明:
console.log(Array.isArray([111])) //true
console.log(Array.isArray({ 1: '111' })) //false
(1)语法:Object.prototype.toString.call(数据)
(2)优点:
(3)原理:
(4)举例说明
console.log(Object.prototype.toString.call(1)) // [object Number]
console.log(Object.prototype.toString.call('1')) // [object String]
console.log(Object.prototype.toString.call(true)) // [object Boolean]
console.log(Object.prototype.toString.call(null)) // // [object Null]
console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
console.log(Object.prototype.toString.call(Symbol('xx')))// [object Symbol]
console.log(Object.prototype.toString.call([111])) // [object Array]
console.log(Object.prototype.toString.call({ 1: '11' }))// [object Object]
console.log(
Object.prototype.toString.call(function a () {
console.log('11')
})
) // [object Function]