• JavaScript 中typeof、instanceof 与 constructor 的区别?


    typeof、instanceof 与 constructor 详解

    typeof  一元运算符

    返回一个表达式的数据类型的字符串,返回结果为js基本的数据类型,包括number,boolean,string,object,undefined,function.

    语法:typeof(data) 或 typeof data

    实例:

    var test = [123, true, "abc", {}, function() {}];
    for(var i = 0; i <= test.length; i++) {
        console.log(typeof test[i]);
    }
    //            number
    //            boolean
    //            string
    //            object
    //            function
    //            undefine
    注: typeof null == object  

    instanceof  二元运算符

    返回一个布尔值,该值指示一个对象是否为特定类的一个实例。

    语法: object instanceof class

    如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 class 存在于对象的原型链中(为 true),则该运算符返回 true。如果 object 不是 class 的实例,或 object 为 null,则该运算符返回 false。

    其本质是判断  class.prototype 是否存在于object对象的原型链上,关于原型链请点击这里

    实例:

    function A(){
                    
    }
    var a = new A();
    console.log( a instanceof A);//true
    console.log(a instanceof Object);//true

    constructor 属性,存在于Object.prototype的属性

    返回对象的构造函数

    语法: object.constructor

    返回值是函数的引用,不是函数名:

     JavaScript 数组 constructor 属性返回 function Array() { [native code] }

     JavaScript 数字 constructor 属性返回 function Number() { [native code] } 

    JavaScript 字符串 constructor 属性返回 returns function String() { [native code] } 

    如果一个变量是数组你可以使用 constructor 属性来定义。

    实例:

    function A(){
                    
    }
    var a = new A();
    console.log(a.constructor,a.constructor === A);    //true
    console.log(a.constructor === Object);    //false
    	
    对象的构造器 constructor 是可以改变的,但我们一般不建议这样做,因为这样会使程序的逻辑混乱。

    实例:

                function A(){
                    
                }
                function B(){
                    
                }
                A.prototype.constructor = B;
                var a = new A();
                console.log(a.constructor,a.constructor === A);    //false
                console.log(a.constructor === B);    //true





  • 相关阅读:
    Python学习日记(三) 学习使用dict
    Python学习日记(二) list操作
    Python学习日记(一) String函数使用
    Linux 下查找并删除文件命令
    spring mvc处理静态文件
    集合工具类CollectionUtils、ListUtils、SetUtils、MapUtils探究(转)
    如何选择IO流
    java并发框架Executor介绍
    mybatis如何传入一个list参数
    大规模SOA系统中的分布事务思考
  • 原文地址:https://www.cnblogs.com/fanlinqiang/p/7741213.html
Copyright © 2020-2023  润新知