• js类型比较


    比较数据类型做比较的三种方法typeofinstanceofObject.prototype.toString.call()

    javascript七大类型

    javascript的数据类型分为两类:原始类型和对象类型。

    原始类型(6个)

    四个普通类型:数字(number)、字符串(string)、布尔值(bool)、Symbol(ES6新增类型)
    两个特殊原始值:空(null)、未定义(undefined)

    对象类型(object)

    每个属性都由 <key:value>构成,value可以是任意类型(包括对象类型)

    typeof操作符获取类型

    typeof 返回值有 objectbooleanundefinednumberstringsymbolfunction

    • 确定不可以判断null,也不可以获取到具体的类型
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    console.log(typeof 42);


    console.log(typeof 'blubber');
    // expected output: "string"

    console.log(typeof true);
    // expected output: "boolean"

    console.log(typeof declaredButUndefinedVariable);
    // expected output: "undefined";

    let aa = null;
    console.log(typeof aa);
    // expected output: "object"

    instanceof操作符

    instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
    参考资料

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25大专栏  js类型比较n>
    26
    // 定义构造函数
    function (){}
    function D(){}

    var o = new C();


    o instanceof C; // true,因为 Object.getPrototypeOf(o) === C.prototype


    o instanceof D; // false,因为 D.prototype不在o的原型链上

    o instanceof Object; // true,因为Object.prototype.isPrototypeOf(o)返回true
    C.prototype instanceof Object // true,同上

    C.prototype = {};
    var o2 = new C();

    o2 instanceof C; // true

    o instanceof C; // false,C.prototype指向了一个空对象,这个空对象不在o的原型链上.

    D.prototype = new C(); // 继承
    var o3 = new D();
    o3 instanceof D; // true
    o3 instanceof C; // true 因为C.prototype现在在o3的原型链上

    • 可以确定当前数据是否是某个对象(Object)
    • 缺点:无法确定原始类型是否是原始类型

    通过Object.prototype.toString.call()判断类型

    这种判断算是比较靠谱的,可以判断出数据的七大类型以及内置对象(DateJson等)

    1
    2
    3
    4
    5
    6
    Object.prototype.toString.call(null); // "[object Null]"
    Object.prototype.toString.call(undefined); // "[object Undefined]"
    Object.prototype.toString.call(“abc”);// "[object String]"
    Object.prototype.toString.call(123);// "[object Number]"
    Object.prototype.toString.call(true);// "[object Boolean]"
    Object.prototype.toString.call(Symbol());// "[object Symbol]"

  • 相关阅读:
    pku2992 Divisors
    pku3090 Visible Lattice Points
    pku3615 Cow Hurdles
    禁止 verifier.dll 监控程序
    运行ogreSDK的samples
    #pragma pack(n) 啥时候可以不再忘记?
    游戏开发流程图。
    希望可以尽快的写篇自己的成果。
    windows与OS X下的std::string
    VS2008鼠标右键不灵敏,TFS的Local Path无法打开对应文件夹
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12037781.html
Copyright © 2020-2023  润新知