JavaScript类型的检测

来源:互联网 发布:淘宝商品如何靠前 编辑:程序博客网 时间:2024/05/22 03:37

JavaScript有两种数据类型,基本类型和引用类型。

基本类型包括:数字,字符串,布尔值,undefined;

引用类型包括:Object,Array,RegExp。

用typeof可以基本上区分开基本类型和引用类型,除了null。

(function () {console.log(typeof 1); //numberconsole.log(typeof 'kk'); //stringconsole.log(typeof true); //booleanconsole.log(typeof undefined); //undefinedconsole.log(typeof null); //objectconsole.log(typeof {}); //objectconsole.log(typeof []); //objectconsole.log(typeof /\d/); //object})();

因此,可通过下列代码区分基本类型与引用类型:

(function () {var test = 'test';var checkType = function (data) {if (typeof data === null) {return '基本类型';} else if (typeof data === 'string' || typeof data === 'number' || typeof data === 'boolean' || typeof data === 'undefined') {return '基本类型';} else {return '引用类型';}};console.log(checkType(test)); //基本类型})();

注:typeof检测正则表达式时,在safari5及chrome7以下版本返回function,这是因为ECMA-262规定任何内部实现call方法的对象都应该在应用typeof操作符时返回function。

区分开基本类型与引用类型后,也许我们还想从引用类型中找出不同值的对象,比如Object,Array,RegExp等,这就需要另一个操作符instanceof。它是根据对象的原型链来判断的:

(function () {var reg = new RegExp(),obj = {},arr = [];console.log(reg instanceof RegExp); //trueconsole.log(obj instanceof Object); //trueconsole.log(arr instanceof Array); //trueconsole.log(function () {} instanceof Function); //true})();

注:所有引用类型都是Object的实例,所以在检测一个引用类型值和Object构造函数时,都返回true。如:

console.log([] instanceof Object); // true

如果页面包含iframe,而且需要在iframe之间的变量进行类型判断,则需要采用下面的方法(因为iframe都拥有独自的window对象,而且引用类型也是各自独立的,所以上述方法无法正确识别数据类型):

(function () {// 判断类型var arr = [1, 2],reg = /\d/;function isArray(val) {return Object.prototype.toString.call(val) === '[object Array]';}function isFunction(val) {// 由于ie以COM形式实现函数,所以此函数不能在ie下不能正常使用return Object.prototype.toString.call(val) === '[object Function]';}function isRegExp(val) {return Object.prototype.toString.call(val) === '[object RegExp]';}function isNativeJSON(val) {// 判断是否为原生JSON对象return window.JSON && Object.prototype.toString.call(val) === '[object JSON]';}console.log(isArray(arr)); // trueconsole.log(isFunction(function () {})); // trueconsole.log(isRegExp(reg)); // trueconsole.log(isArray(reg)); // falseconsole.log(isNativeJSON(JSON)); // true})();




0 0
原创粉丝点击