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

    1. instanceof

    var arr = new Array();
    alert(arr instanceof Array); //true

    2. Object的constructor属性

    var arr = new Array();
    alert( arr.constructor==Array);//true

    注:前两种方法在跨frame构建时返回false,因为每个iframe都有一套自己的执行环境,跨frame实例化的对象彼此是不共享原型链的。

    var iframe=document.createElement("iframe");
    document.body.appendChild(iframe);
    xArray=window.frames[window.frames.lenght-1].Array;
    var arr=new xArray(1,2,3);
    alert(arr instanceof Array);
    alert(arr.constructor==Array);

    3. 数组对象的特性

    例如有slice、splice方法

    function isArray(arr){
        return arr && 
            typeof arr=='object'&&
            typeof arr.length=='number'&&
            typeof arr.splice=='function'&&
            !arr.propertyIsEnumerable('length');
    }

    但当arr对象也有length,splice属性,且length不可枚举,也会返回true.

    所以前三种都不完美,第四种是目前完美的

    4. Object.prototype.toString

    ecmascript3中:在toString方法被调用时,会执行下面的操作步骤:

    1. 获取this对象的[[Class]]属性的值.

    2. 计算出三个字符串"[object ", 第一步的操作结果Result(1), 以及 "]"连接后的新字符串.

    3. 返回第二步的操作结果Result(2).

    this对象的[[class]]属性:Boolean,Number,String,Object,Function,Array,Date,RegExp,Math,Error

    ecmascript5中,多个两步:

    1. if this的值为null,返回[object Null]

    2. if this值为Undefined,返回[object Undefined]

    3. ecmascript3的3步

    this对象的[[class]]属性多了两个:Arguments, Json

    var arr=new Array();
    alert(Object.prototype.toString.call(arr)=='[object Array]');
  • 相关阅读:
    IE兼容只读模式
    关于css实现单行、多行省略标记
    table表格字母无法换行
    IE浏览器兼容background-size
    IE兼容rgba()透明度
    修改输入框placeholder的默认样式
    Swarm+Docker+Portainer(集群,图形化)
    Docker的centos镜像内无法使用systemctl命令的解决办法
    Docker 制作Nginx镜像
    Xtrabackup 全量备份脚本
  • 原文地址:https://www.cnblogs.com/danranysy/p/4749626.html
Copyright © 2011-2022 走看看