zoukankan      html  css  js  c++  java
  • js检测数组类型

    1.instanceof

      当只有一个全局执行环境时适用,如果包含多个框架,就存在两个以上不同版本的Array构造函数,如果从一个框架向另一个框架传递数组,传入的数组与在第二个框架中原生创建的数组分别具有不同的构造函数,即为不同类型

    if (value instanceof Array) {
        //对数组执行某项操作      
    }
    instanceof 示例

    2. Array.isArray() 方法

      因为是ES5新增的,只支持IE9+、Firefox 4+、Safari 5+、Opera 10.5+和Chrome

    if (Array.isArray(value)) {
        //对数组执行某些操作  
    }
    Array.isArray() 示例

    3.Object.prototype.toString.call()方法

      适用于所有环境,只支持原生的对象,Object的toString()方法不能检测非原生构造函数的构造函数名。开发人员自定义的任何构造函数都将返回[object Object]

      原理:在任何值上直接调用Object的原生toString()方法,都会返回[object NativeConstrctorName]格式的字符串,每个类内部都有一个class属性,这个属性中就指定了上述字符串中构造函数名。

    var value = []
    console.log(Object.prototype.toString.call(value))//"[Object Array]"

      由于原生数组的构造函数名和作用域无关,因此使用toString()方法就能保证输出一样的值。 

      为什么不使用对象自己的toString() 方法?  

    var value = []
    console.log(value.toString())//" "
    
    value = ['pp','oo']
    console.log(value.toString())//"pp,oo"
    
    value = ['pp',"oo"]
    console.log(Object.prototype.toString.call(value))//[object Array]

      Array的tostring()方法被重写了(很多原生对象均如此),所以它会调用自己构造函数上的toString()方法,返回其他的字符串

      还可以用此方法来判断是不是原生函数或者正则表达式  

    function isFunction(value){
            return Object.prototype.toString.call(value) === “[object Function]”
    }//不适用于IE中以COM对象实现的任何函数
    
    function isRegExp(value){
            return Object.prototype.toString.call(value) === “[object RegExp]”
    }
  • 相关阅读:
    Eclipse/MyEclipse 选择Android NDK目录时提示“Not a valid NDK directory”
    Eclipse更改颜色主题
    Android模拟器访问本机服务器
    DIV水平垂直居中的CSS兼容写法
    Python3中使用PyMySQL连接Mysql
    Windows7 IE11 F12控制台DOC资源管理器报错的问题解决方法
    Windows 7无法卸载及安装IE11的解决方法
    查看端口占用
    VS2010/VS2013中ashx代码折叠的问题
    手机页面关于头部固定定位与input出现的问题
  • 原文地址:https://www.cnblogs.com/ranjianxi/p/6547028.html
Copyright © 2011-2022 走看看