方法一、typeof -检测数据类型运算符
<script>
console.log("数值",typeof 10) //number
console.log("布尔",typeof true) //boolean
console.log("字符串",typeof '你好') //string
console.log("数组",typeof []) //object
console.log("函数",typeof function(){}) //function
console.log("对象",typeof {}) //object
console.log("undefined",typeof undefined) //undefined
console.log("null",typeof null); //object
</script>
方法二、instanceof-检测实例是否属于这个类
可以正确判断对象的类型,不可以判断基本数据类型。内部运行机制,判断在它的原型链上能否找到这个类型的原型
<script>
console.log("数值",10 instanceof Number) //false
console.log("布尔",true instanceof Boolean) //false
console.log("字符串",'你好' instanceof String) //false
console.log("数组",[] instanceof Array) //true
console.log("函数",function(){} instanceof Function) //true
console.log("对象",{} instanceof Object) //true
</script>
方法三、constructor-检测实例和类的关系,从而检测数据类型
<script>
console.log("数值",(10).constructor=== Number) //true
console.log("布尔",(true).constructor=== Boolean) //true
console.log("字符串",('你好').constructor=== String) //true
console.log("数组",([]).constructor=== Array) //true
console.log("函数",(function(){}).constructor=== Function) //true
console.log("对象",({}).constructor=== Object) //true
</script>
方法四、Object.prototype.toString.call()
<script>
var a = Object.prototype.toString
console.log("数值",a.call(10)) //[object Number]
console.log("布尔",a.call(true)) //[object Boolean]
console.log("字符串",a.call('你好')) //[object string]
console.log("数组",a.call([])) //[object Array]
console.log("函数",a.call(function(){})) //[object Function]
console.log("对象",a.call({})) //[object Object]
console.log("undefined",a.call(undefined));//[object Undefined]
console.log("null",a.call(null)); //[object Null]
</script>