• Javascript判断object还是list/array的类型(包含javascript的数据类型研究)


    前提:先研究javascript中的变量有几种,参考:

    http://www.w3school.com.cn/js/js_datatypes.asp

    http://glzaction.iteye.com/blog/1285147

    测试1:

    typeof关键字

    var obj= {test:'test'};

    typeof obj;//输出object

    var list = [{test:'test'}];

    typeof list;//输出object

    var str = 'str';

    typeof str;//输出string

    var i = 1;

    typeof i;//输出number

    var b = false;

    typeof b;//输出boolean

    var n = null;

    typeof n;//输出object

    n==null;//输出true

    var n;

    typeof n;//输出undefined

    直接输出一个没有定义的变量

    typeof a;//输出undefined

    function func(){}

    typeof func;//输出function

    以上可以发现,只能判断list和obj同时输出了object

    在判断某个对象是否为指定类型时,可以用==或者===,比如:typeof func === 'function'或者typeof func == 'function'

    测试2:

    Object.prototype.toString.call( obj )

    var obj= {test:'test'};

    Object.prototype.toString.call( obj );//输出[object Object]

    var list = [{test:'test'}];

    Object.prototype.toString.call( list );//输出[object Array]

    var str = 'str';

    Object.prototype.toString.call( str );//输出[object String]

    var i = 1;

    Object.prototype.toString.call( i );//输出[object Number]

    var b = false;

    Object.prototype.toString.call( b );//输出[object Boolean]

    var n = null;

    Object.prototype.toString.call( n );//输出[object Null]

    n==null;//输出true

    var n;

    Object.prototype.toString.call( n );//输出[object Undefined]

    直接输出一个没有定义的变量

    Object.prototype.toString.call( a );//输出:Uncaught ReferenceError: n1 is not defined,会报异常,阻止执行下面

    function func(){}

    Object.prototype.toString.call( function );//输出[object Function]

    这个方法可以很明确的直到obj和list的类型

    判断时使用Object.prototype.toString.call( list )==='[object Array]'或者Object.prototype.toString.call( list )=='[object Array]',==或者===一样的效果。

    测试3:

    如果使用jquery,可以使用$.isArray(obj)的方法,如下:

    var a = ["A", "AA", "AAA"];
    if($.isArray(a)) {
      console.log("a is an array!");
    } else {
      console.log("a is not an array!");
    }

    但是测试发现,只能判断数组,没有判断对象的方法。

    测试4:

    instanceof 关键字

    var obj= {test:'test'};

    var str = 'str';

    var i = 1;
    var b = false;

    var list = [{test:'test'}];

    var n = null;

    function func(){}

    通过测试,使用如:obj instanceof Object的形式,只能是判断两种类型Object和Array,其中Boolean、Number、String可以判断,但是会返回false,如上面i和b变量;如果判断为null或者undefind会报Uncaught TypeError: Right-hand side of 'instanceof' is not an object这样的错误。

    测试5:

    直接通过Array.isArray(obj),javascript的原生方法,不过这个只能判断数组。

    测试5:

    通过obj.constructor关键字

    var obj= {test:'test'};

    var str = 'str';

    var i = 1;
    var b = false;

    var list = [{test:'test'}];

    var n = null;

    function func(){}

    通过测试,使用如:str == String.constructor的形式,只能判断Object、Array、String、Boolean、Number,对于null、function、undefind这些会报异常。

    参考:

    http://stackoverflow.com/questions/4775722/check-if-object-is-array

    http://www.jb51.net/article/21945.htm

  • 相关阅读:
    Ubuntu 设置网卡固定IP
    gawk Notes(2)
    再读simpledb 之 存储的实现
    [zZ]HDFSRAID使用Erasure Code来实现HDFS的数据冗余
    初识gawk, gawk Notes(1)
    gawk notes(3)
    Shell Notes(2)
    凶残的突击面试
    Google 图片下载工具
    Shell Notes(3)
  • 原文地址:https://www.cnblogs.com/EasonJim/p/6239100.html
Copyright © 2020-2023  润新知