• 数组类型检测


    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]');
  • 相关阅读:
    redux
    ajax跨域例子
    flux
    BSON数据格式
    JS代码风格自动规整工具Prettier
    JS通用模块模式 UMD
    Promise库
    webpack打包理解
    前端自动提示功能插件-typeahead
    socket.io emit callback调用探秘
  • 原文地址:https://www.cnblogs.com/danranysy/p/4749626.html
Copyright © 2020-2023  润新知