检测数组、函数、正则表达式比较好的方法

来源:互联网 发布:天猫国际和淘宝全球购 编辑:程序博客网 时间:2024/06/05 15:40

最近在看<JavaScript高级程序设计>第22章高级技巧, 看到了可以检测某个内容是否为数组或函数等等内容, 于是觉得在这里总结一下会比较好.

大家知道, 在任何值上面调用Object原生的toString()方法, 都会返回一个[Object NativeConstructorName]格式的字符串, 每个类在内部都有一个[[Class]]属性, 这个属性中就制定了上述字符串中的构造函数名, 而且这个Object的toString()方法不能检测非原生构造函数的构造函数名. 因此, 开发人员定义的任何构造函数都将返回[object Object]. 因此可以用这个特性以下面的方式来检测一个东西是否为数组:

  1. function isArray(value){
  2.     return Object.prototype.toString.call(value) == "[object Array]";
  3. }

由于原生数组的构造函数名与全局作用域无关, 因此使用toString()就能保证返回一致的值.

同样, 也可以基于这一思路来测试某个值是不是原生的函数或者正则表达式:

  1. function isFunction(value){
  2.     return Object.prototype.toString.call(value) == "[object function]";
  3. }
  4. function isRegExp(value){
  5.     return Object.prototype.toString.call(value) == "[object RegExp]";
  6. }

还有, 用于检测一个对象是否为JSON对象可以使用这种方式:

  1. isJson = function(obj){
  2.     var isjson = typeof(obj) == "object" &&                            Object.prototype.toString.call(obj).toLowerCase() == "[object object]" &&     !obj.length;
  3.     return isjson;
  4. }
0 0