zoukankan      html  css  js  c++  java
  • 类型判断总结

    1.能用typeOf检测出的类型

      undefined,string,number,boolean。

      注:undefined也可使用undefined===void(0);来检测。

    2.能用Objcet.prototype.toString.call(obj)检测的类型

      function,array,null,object,reg,error。

      注:null也可以使用obj===null判断。

    3.window

      window对象用Objcet.prototype.toString.call(obj)在IE9及以上版本中均可以使用,但在IE6,7,8中调用结果是[object Object],我们可以用一个技巧来识别IE6,7,8下的window

    window==document;//true
    document==window;//false

      jQuery中,是这样做的:

    isWindow: function( obj ) {
            /* jshint eqeqeq: false */
            return obj != null && obj == obj.window;
    }

    4.数字

      jQuery中是这样做的

    isNumeric: function( obj ) {
            // parseFloat NaNs numeric-cast false positives (null|true|false|"")
            // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
            // subtraction forces infinities to NaN
            // adding 1 corrects loss of precision from parseFloat (#15100)
            return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
        }

    5.NaN

    function isNaN(obj){
      return obj!==obj;  
    }

    6.空对象

      jQuery中是这样做的

    isEmptyObject: function( obj ) {
            var name;
            for ( name in obj ) {
                return false;
            }
            return true;
        }

    7.纯对象

      jQuery中是这样做的

    // 最常使用的判断之一,纯对象判断
    // 纯对象是有 new 或 {} 创建的对象
    // 意味着纯对象不能从其他对象原型中继承而来,只能从Object原型中继承
    isPlainObject: function( obj ) {
         var key;
         // 首先必须是一个object
         // 针对IE,需要检查对象的constructor属性
         // 把DOM节点和window对象都过滤掉
         if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
              return false;
         }
          try {
              // Not own constructor property must be Object
              if ( obj.constructor &&                      // 不包含构造器
                   !hasOwn.call(obj, "constructor") &&
                   !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
                   return false;
              }
         } catch ( e ) {
              // IE8或9在某些主机上会抛出异常
              return false;
         }
          // 支持: IE<9
         // 先处理继承的属性,之后才会处理自身属性
         if ( support.ownLast ) {
              for ( key in obj ) {
                   return hasOwn.call( obj, key );
              }
         }
         // 一般浏览器是先遍历自己的属性,因此利用空变量来略过之前的自身属性,直接跳到最后一个属性
         // 如果最后一个属性是自身的,那么证明了所有属性都是自身的
         for ( key in obj ) {}
         return key === undefined || hasOwn.call( obj, key );
    },
  • 相关阅读:
    Class类
    HTML表单格式化
    HTML表单组件
    html常用标签
    Html概述
    Myeclipse2016安装Aptana
    长元音
    对比法记音标
    Java基础八--构造函数
    WPS2012交叉引用技巧,word比wps这点强更新參考文献
  • 原文地址:https://www.cnblogs.com/shytong/p/5502136.html
Copyright © 2011-2022 走看看