• js中的数据类型及判断方法


    ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型。

    基本类型

    ● Boolean
    ● Null
    ● Undefined
    ● Number
    ● String
    ● Symbol (ECMAScript 6 新定义)

    对象类型

    ● Object

    对象类型涵盖了很多引用类型,任何非基本类型的都是对象类型。如Function、Array、Date,这里就不在赘述。

    两种类型的区别

    可变性

    基本类型:不可变类型,无法添加属性;即使添加属性,解析器无法再下一步读取它;

    var cat = "cat";
    cat.color = "black";
    cat.color  // undefined
    

    对象类型:可变类型,支持添加和删除属性。

    比较和传递

    基本类型:按值比较,按值传递;
    对象类型:按引用比较,按引用传递。

    // 基本类型
    var cat = "tom";
    var dog = "tom";
    cat === dog // true
    //对象类型
    var cat = {name:"tom"};
    var dog = {name:"tom"};
    cat === dog //false
    

    如何判断数据类型

    有四种方法:typeof、instanceof、 constructor、 prototype
    例如:

    var a = "abcdef";
    var b = 12345;
    var c= [1,2,3];
    var d = new Date();
    var e = function(){ console.log(111); };
    var f = function(){ this.name="cat"; };
    

    最常见的判断方法:typeof

    alert(typeof a)   ------------> string
    alert(typeof b)   ------------> number
    alert(typeof c)   ------------> object
    alert(typeof d)   ------------> object
    alert(typeof e)   ------------> function
    alert(typeof f)   ------------> function
    

    其中typeof返回的类型都是字符串形式,需注意,例如:

    alert(typeof a == "string") -------------> true
    alert(typeof a == String) ---------------> false
    

    另外typeof 可以判断function的类型;在判断除Object类型的对象时比较方便。

    判断已知对象类型的方法: instanceof

    alert(c instanceof Array) ---------------> true
    alert(d instanceof Date) ---------------> true 
    alert(f instanceof Function) ------------> true
    alert(f instanceof function) ------------> false
    

    注意:instanceof 后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。

    根据对象的constructor判断: constructor

    alert(c.constructor === Array) ----------> true
    alert(d.constructor === Date) -----------> true
    alert(e.constructor === Function) -------> true
    

    注意: constructor 在类继承时会出错

    通用但很繁琐的方法: prototype

    console.log(Object.prototype.toString.call(a)) -------> [object String];
    console.log(Object.prototype.toString.call(b)) -------> [object Number];
    console.log(Object.prototype.toString.call(c)) -------> [object Array];
    console.log(Object.prototype.toString.call(d)) -------> [object Date];
    console.log(Object.prototype.toString.call(e)) -------> [object Function];
    console.log(Object.prototype.toString.call(f)) -------> [object Function];
    

    注意大小写。

  • 相关阅读:
    CSP2018-09
    CSP2018-03
    CSP2017-12
    CSP2017-09
    CSP2017-03
    CSP2016-12
    [算法设计与分析] 奶酪 (并查集)
    5555
    阿超
    结对作业
  • 原文地址:https://www.cnblogs.com/cckui/p/7524585.html
Copyright © 2020-2023  润新知