标签:
原生JS提供了typeof操作符来判断类型,判断基本类型时没问题,但当判断复杂类型时便有点不尽人意。
基本类型有哪些?
众说纷纭,争议的是null和function算不算基本类型?个人觉得能被typeof出正确类型的都是基本类型,来看以下代码:
/*基本类型*/ alert(typeof nudefined);//输出 "nudefined" alert(typeof function(){});//输出 "function" alert(typeof "a");//输出 "string" alert(typeof 1);//输出 "number" alert(typeof true);//输出 "boolean" /*复杂类型*/ alert(typeof []);//输出 "object" alert(typeof {});//输出 "object" alert(typeof new Date());//输出 "object" alert(typeof new RegExp());//输出 "object" alert(typeof null);//输出 "object"
以上用typeof都能正确输出基本类型值,而复杂类型输出的都是"object",那该怎么正确的得知复杂类型的正确类型值呢?
Object.prototype.toString.call() 来看ECMA5中的描述:
由于 JavaScript 中一切都是对象,任何都不例外,对所有值类型应用 Object.prototype.toString.call() 方法结果如下:
(小知识点:为什么讲JS中一切皆是对象,原因是你把任何类型当作对象的时候它就是对象,后台会自动把它包装成对象)
console.log(Object.prototype.toString.call(123)) //[object Number] console.log(Object.prototype.toString.call(‘123‘)) //[object String] console.log(Object.prototype.toString.call(undefined)) //[object Undefined] console.log(Object.prototype.toString.call(true)) //[object Boolean] console.log(Object.prototype.toString.call({})) //[object Object] console.log(Object.prototype.toString.call([])) //[object Array] console.log(Object.prototype.toString.call(function(){})) //[object Function]
所有类型都会得到不同的字符串,几乎完美。当真完美。
Object.prototype.toString.call() 可以简化成 {}.toString.call()。
标签:
原文地址:http://www.cnblogs.com/yangzonglong/p/4310344.html