js中的数据类型检测
2016-02-27 22:02
561 查看
js中的数据类型检测常用的方法是使用typeof,typeof运算符会返回下列6中类型之一:
"number"
"string"
"boolean"
"object"
"function"
"undefined"
例如:
结果如下:
从结果中可以看出使用typeof检测null值时,返回的是object,而不是null。这样其实并不能真正的检测出数据类型。可以向下面定义一个方法检测出null类型。
得到的结果如下:
而对于复杂的数据类型,比如对象或者数组,可以使用constructor属性。constructor属性可以判断绝大部分数据的类型,但是对undefined和null类型并不适用,因为javascript解释器会抛出异常。
数值直面量也不能使用constructor属性,可以加上一个小括号,将数值转化为对象,例如:
alert((1).constructor);
对于内置对象,使用toString()方法检测对象类型时最安全、最准确的。调用toString()方法把对象转化为字符串,然后通过检测字符串中是否包含数组所特有的标志字符可以确定对象的类型。
例如:
对于非内置对象,只能使用constructor属性和instanceof运算符来实现。
"number"
"string"
"boolean"
"object"
"function"
"undefined"
例如:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javascript"> var a="a"; var b=2; var c=undefined; var d=null; var e={}; function f(){ return true; } console.log(typeof(a)); console.log(typeof(b)); console.log(typeof(c)); console.log(typeof(d)); console.log(typeof(e)); console.log(typeof(f)); </script> </head> <body> </body> </html>
结果如下:
从结果中可以看出使用typeof检测null值时,返回的是object,而不是null。这样其实并不能真正的检测出数据类型。可以向下面定义一个方法检测出null类型。
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javascript"> var a="a"; var b=2; var c=undefined; var d=null; var e={}; function f(){ return true; } function type(o){ console.log((o===null)?"null":(typeof(o))); } type(a); type(b); type(c); type(d); type(e); type(f); </script> </head> <body> </body> </html>
得到的结果如下:
而对于复杂的数据类型,比如对象或者数组,可以使用constructor属性。constructor属性可以判断绝大部分数据的类型,但是对undefined和null类型并不适用,因为javascript解释器会抛出异常。
数值直面量也不能使用constructor属性,可以加上一个小括号,将数值转化为对象,例如:
alert((1).constructor);
对于内置对象,使用toString()方法检测对象类型时最安全、最准确的。调用toString()方法把对象转化为字符串,然后通过检测字符串中是否包含数组所特有的标志字符可以确定对象的类型。
例如:
function typeof(o){ var _toString=Object.prototype.toString; var _type={ "undefined":"undefined", "number":"number", "boolean":"boolean", "string":"string", "[object Function]":"function", "[object Array]":"array", "[object RegExp]":"regexp", "[object Date]":"date", "[object Erroe]":"error" } return _type[typeof o]||_type[_toString.call(o)]||(o?"object":"null"); }
对于非内置对象,只能使用constructor属性和instanceof运算符来实现。
相关文章推荐
- 《JavaScript语言精粹》知识点总结(一)
- JavaScript对浏览器的URL进行编码、解码
- JSON教程
- JavaScript构造函数模式+prototype(原型)模式拓展系统类和自定义类
- Json Utils
- JavaScript面向对象之---工厂模式
- BZOJ_P1013 [JSOI2008]球形空间产生器sphere(数论+高斯消元)
- responseBody js
- javascript多个判断条件的改写
- 对javascript中闭包概念的理解
- Json数据格式解析·编译器观点
- JavaScript特效5-完整tab选项卡
- [LeetCode][JavaScript]Count of Smaller Numbers After Self
- JSP九大内置对象
- JSP九大内置对象
- JSP九大内置对象
- JSP九大内置对象
- js实现事件模型bind与trigger
- avalonJS
- javascript高级程序设计笔记-第三章(基本概念)