• 判断数据类型


    1、toString()

     1 var arr = [1,2,3];
     2 console.log(arr.toString());//1,2,3
     3 
     4 var bo = true;
     5 console.log(bo.toString());//true
     6 
     7 var date = new Date();
     8 console.log(date.toString());//Fri Nov 17 2017 15:18:18 GMT+0800 (中国标准时间)
     9 
    10 var m = function(){
    11     return false;
    12 }
    13 console.log(m.toString());//function (){return false;}
    14 
    15 var num = 123;
    16 console.log(num.toString());//123
    17 
    18 var s = "abc";
    19 console.log(s.toString());//abc
    20 
    21 var a={"name":"zhangsan"};
    22 console.log(a.toString());//[object Object]
    23 
    24 console.log(typeof(arr));//object
    25 console.log(typeof(null));//object
    26 console.log(typeof(a));//object
    27 console.log(Object.prototype.toString.call(arr));//[object Array]
    28 console.log(Object.prototype.toString.call(null));//[object Null]
    29 console.log(Object.prototype.toString.call(a));//[object Object]

    通过上面例子我们则可以看到toString()为何能区分数组,null以及对象。typeof对数组,null以及对象判断的结果都是object,所以区分它们三者的一种办法即使用Object的原型上的方法toString

    此处加一知识点:call和apply。

    call和apply都可以改变this的指向,apply方法,它接收两个参数,第一个参数就是需要绑定的this变量,第二个参数是Array,表示函数本身的参数。call和apply不同的是——apply()把参数打包成Array再传入;call()把参数按顺序传入;

    比如调用Math.max(3, 5, 4),分别用apply()call()实现如下:

    Math.max.apply(null, [3, 5, 4]); // 5
    Math.max.call(null, 3, 5, 4); // 5

    对普通函数调用,我们通常把this绑定为null

    所以Object.prototype.toString.call(arr))是将this指定到这个arr上了。

    下面系统说一下判断数据是否为数组的方法:

    2、数组的判断

    法一:

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

    法二:

    Array.isArray(obj);   //obj是待检测的对象 

    法三:

    • 通过instanceof运算符来判断

    注意:instanceof运算符左边是子对象(待测对象),右边是父构造函数(这里是Array),

    即:子对象 instanceof  父构造函数 

    instance: 实例:凡是用new 构造函数()创建出的对象,都称为是构造函数的实例

    arr instanceof Array

    法四:

    • 使用isPrototypeOf()函数

    原理:检测一个对象是否是Array的原型(或处于原型链中,不但可检测直接父对象,还可检测整个原型链上的所有父对象)

    使用方法: parent.isPrototypeOf(child)来检测parent是否为child的原型;

    需注意的是isPrototypeOf()函数实现的功能和instancof运算符非常类似;

    Array.prototype.isPrototypeOf(arr) //true表示是数组,false不是数组 

    法五:

    利用构造函数constructor

    obj.constructor == Array
  • 相关阅读:
    python -django 之第三方支付
    python 的排名,已经python的简单介绍
    第三方登录
    linux 基础命令
    JWT 加密
    Docker 简介
    中文分词库:结巴分词
    Django websocket 长连接使用
    jQuery截取字符串的几种方式
    Python 操作redis
  • 原文地址:https://www.cnblogs.com/gtlm/p/7852111.html
Copyright © 2020-2023  润新知