zoukankan      html  css  js  c++  java
  • 【JavaScript】typeof 和 instanceof

    以下内容为学习记录,可以参考 MDN 原文。

    环境

    • node v12.18.1
    • npm 6.14.5
    • vscode 1.46
    • Microsoft Edge 83

    typeof 概念

    typeof 操作符返回一个字符串,表示未经计算的操作数的类型。

    typeof 示例

    console.log(typeof 42);
    // expected output: "number"
    
    console.log(typeof 'blubber');
    // expected output: "string"
    
    console.log(typeof true);
    // expected output: "boolean"
    
    console.log(typeof undeclaredVariable);
    // expected output: "undefined"
    

    typeof 演示

    // 数值
    typeof 37 === 'number';
    typeof 3.14 === 'number';
    typeof(42) === 'number';
    typeof Math.LN2 === 'number';
    typeof Infinity === 'number';
    typeof NaN === 'number'; // 尽管它是 "Not-A-Number" (非数值) 的缩写
    typeof Number(1) === 'number'; // Number 会尝试把参数解析成数值
    
    typeof 42n === 'bigint';
    
    
    // 字符串
    typeof '' === 'string';
    typeof 'bla' === 'string';
    typeof `template literal` === 'string';
    typeof '1' === 'string'; // 注意内容为数字的字符串仍是字符串
    typeof (typeof 1) === 'string'; // typeof 总是返回一个字符串
    typeof String(1) === 'string'; // String 将任意值转换为字符串,比 toString 更安全
    
    
    // 布尔值
    typeof true === 'boolean';
    typeof false === 'boolean';
    typeof Boolean(1) === 'boolean'; // Boolean() 会基于参数是真值还是虚值进行转换
    typeof !!(1) === 'boolean'; // 两次调用 ! (逻辑非) 操作符相当于 Boolean()
    
    
    // Symbols
    typeof Symbol() === 'symbol';
    typeof Symbol('foo') === 'symbol';
    typeof Symbol.iterator === 'symbol';
    
    
    // Undefined
    typeof undefined === 'undefined';
    typeof declaredButUndefinedVariable === 'undefined';
    typeof undeclaredVariable === 'undefined'; 
    
    
    // 对象
    typeof {a: 1} === 'object';
    
    // 使用 Array.isArray 或者 Object.prototype.toString.call
    // 区分数组和普通对象
    typeof [1, 2, 4] === 'object';
    
    typeof new Date() === 'object';
    typeof /regex/ === 'object'; // 历史结果请参阅正则表达式部分
    
    
    // 下面的例子令人迷惑,非常危险,没有用处。避免使用它们。
    typeof new Boolean(true) === 'object';
    typeof new Number(1) === 'object';
    typeof new String('abc') === 'object';
    
    // 函数
    typeof function() {} === 'function';
    typeof class C {} === 'function'
    typeof Math.sin === 'function';
    

    instanceof 概念

    instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

    instanceof 示例

    function Car(make, model, year) {
      this.make = make;
      this.model = model;
      this.year = year;
    }
    const auto = new Car('Honda', 'Accord', 1998);
    
    console.log(auto instanceof Car);
    // expected output: true
    
    console.log(auto instanceof Object);
    // expected output: true
    

    instanceof 演示

    var simpleStr = "This is a simple string"; 
    var myString  = new String();
    var newStr    = new String("String created with constructor");
    var myDate    = new Date();
    var myObj     = {};
    var myNonObj  = Object.create(null);
    
    simpleStr instanceof String; // 返回 false, 检查原型链会找到 undefined
    myString  instanceof String; // 返回 true
    newStr    instanceof String; // 返回 true
    myString  instanceof Object; // 返回 true
    
    myObj instanceof Object;    // 返回 true, 尽管原型没有定义
    ({})  instanceof Object;    // 返回 true, 同上
    myNonObj instanceof Object; // 返回 false, 一种创建非 Object 实例的对象的方法
    
    myString instanceof Date; //返回 false
    
    myDate instanceof Date;     // 返回 true
    myDate instanceof Object;   // 返回 true
    myDate instanceof String;   // 返回 false
    

    不是实例的检查

    正确:

    if (!(mycar instanceof Car)) {
      // Do something, like mycar = new Car(mycar)
    }
    

    错误:

    if (!mycar instanceof Car)
    
  • 相关阅读:
    python--执行文件的绝对路径
    python----slots属性安全类
    linux----LAMP之编译安装apache
    MySQL----alter table modify | change的不同
    数据库5
    数据库4
    数据库3
    数据库2
    数据库1
    MySQL exists 和 not exists 的用法
  • 原文地址:https://www.cnblogs.com/jiangbo44/p/13694032.html
Copyright © 2011-2022 走看看