• js 类型检测


    1、检测字符串、数值、布尔值、undefined、function 使用typeof(在Safari和Chrome中检测正则也会返回 "function")

    2、检测null 应用“===”

    3、检测其它对象:

          方法一:利用instanceof/constructor  

          (再某些ie版本中存在跨iframe问题,每个iframe下都有自己的一套原型链,跨frame实例化的对象彼此是不共享原型链)

    alert(A  instanceof  Object)
    alert(A  instanceof  Array)
    alert(A  instanceof  RegExp)  
    alert(A.constructor==Array)
          例如:

          方法二:利用 Object.prototype.toString.call()  

          (解决了方法一跨iframe 失效的问题)

          例如:

    Object.prototype.toString.call ({})          //"[objectObject]"
    Object.prototype.toString.call ([1,2,3,4]);  //"[objectArray]"
    Object.prototype.toString.call(newDate());   //"[objectDate]"
    Object.prototype.toString.call(/^hello/);    //"[objectRegExp]"
    Object.prototype.toString.call(newError())   //"[objectError]"
    Object.prototype.toString.call(newNumber())  //"[objectNumber]"

          参考jquery解决方案

        var class2type = {};
        $.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (i, name) {
            class2type[ "[object " + name + "]" ] = name.toLowerCase();
        });
        $.type = function (obj) {
            return obj == null ?
                String(obj) : class2type[ toString.call(obj) ] || "object"
        };

           另外,ECMAScript 5 定义了一个新方法Array.isArray(),该函数在参数为数组时返回true,例如

           Array.isArray([])     // true

           所以我们可以定义:  

    if(typeof Array.isArray=="undefined"){
       Array.isArray=function(obj){
           return Object.prototype.toString.call(obj)==="[object Array]";
       }
    }


  • 相关阅读:
    java Future 模式
    多线程的优点和代价
    转:Java同步synchronized使用
    管程
    【移动开发人员沙龙 北京站】第二期 报名火热来袭
    POJ 3111 K Best(最大化平均值)
    坐标和依赖
    分析cocos2d-x在Android上的编译过程(1):cocco2d-x是怎样生成的Android的文件夹结构
    执行startx后Ubuntupassword正确进不去的问题
    leetcode 刷题之路 64 Construct Binary Tree from Inorder and Postorder Traversal
  • 原文地址:https://www.cnblogs.com/hdchangchang/p/3965344.html
Copyright © 2020-2023  润新知