zoukankan      html  css  js  c++  java
  • javascript 之 typeof 与 instanceof

      

    1.typeof:返回一个表达式的数据类型的字符串

    返回结果为js的数据类型,包括number,boolean,string,object,undefined,function。

    var a = 1;
    console.log(typeof(a));  //=>number
    
    
    var b = new Number(1);
    console.log(typeof(b));  //=>object

     对于a和b变量的类型,不管是直接用值创建的还是用类型的构造函数创建的,Number才是想要的结果。

    而准确的类型信息保存在变量的内部属性的值中,通过使用定义在 Object.prototype 上的方法 toString来获取

    var a = 1;
    var b = new Number(1);
    console.log(Object.prototype.toString.call(a)); //[object Number]
    console.log(Object.prototype.toString.call(b)); //[object Number]

    我们稍微处理一下,得到更直接结果:

    slice(start,end)方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法splice()

    var a = 1;
    var b = new Number(1);
    console.log(Object.prototype.toString.call(a).slice(8,-1));
    console.log(Object.prototype.toString.call(b).slice(8,-1));

    为了更好的使用,我们封装一个方法,用来判断某个变量是否是某种类型:

    function getType(obj) {
        return  Object.prototype.toString.call(obj).slice(8, -1);
    } 
    console.log(getType('123'));
    console.log(getType(Number(1)));
    console.log(getType([1,2,3]));

    或者

    function is(obj,type) {
        var clas = Object.prototype.toString.call(obj).slice(8, -1);
        return obj !== undefined && obj !== null && clas === type;
    }

    2. instanceof :或一个变量是否为一个对象的实例

    instanceof 操作符用来比较两个内置类型的变量时一样力不从心,同样会对结果不满意。

    console.log("abc" instanceof String); // false
    console.log("abc" instanceof Object); // false

    console.log(new String("abc") instanceof String); // true
    console.log(new String("abc") instanceof Object); // true

     只有在比较自定义的对象时才准确反映关系。

    function Person() {}
    function Man() {}
    Man.prototype = new Person();
    
    console.log(new Man() instanceof Man); // true
    console.log(new Man() instanceof Person); // true
  • 相关阅读:
    前沿技术解密——VirtualDOM
    Ques核心思想——CSS Namespace
    Unix Pipes to Javascript Pipes
    Road to the future——伪MVVM库Q.js
    聊聊CSS postproccessors
    【译】十款性能最佳的压缩算法
    Kafka Streams开发入门(9)
    Kafka Streams开发入门(8)
    【译】Kafka Producer Sticky Partitioner
    【译】99th Percentile Latency at Scale with Apache Kafka
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3530200.html
Copyright © 2011-2022 走看看