zoukankan      html  css  js  c++  java
  • JavaScript之原型|typeof|instanceof

    //var 变量X --> 对象 --> 构造器 --> 原型对象 
    function Person(){};
    var stu = new Person();
    //var stu = new Person.constructor();//等效
    
    
    //instanceof:用来确定一个实例是否是由特定函数构造器所创建的;还可以用于判断函数是否继承了其原型链中任何对象(必须要了解:原型链)
    stu instanceof Person;//true
    typeof stu; // "object"
    stu.prototype; //undefined
    stu.constructor; // f Person(){}
    

    var 变量X --> 对象 --> 构造器 --> 原型对象

    instanceof:

        1.用来确定一个实例是否是由特定函数构造器所创建的;

        2.还可以用于判断函数是否继承了其原型链中任何对象(必须要了解:原型链)

    function Person(){this.name};
    function Student(){this.school};
    Student.prototype = new Person();//原型链,实现继承
    /*
        注意:
               强烈不推荐: 父类原型直接赋值给子类原型,否则子类原型上的任何修改都将会影响到父类的原型,因为他们是同一个对象
               但也有的好处:所有原型中继承的函数都是实时更新的(live-update)
               Eg:Student.prototype = Person.prototype;
    
    */
    
    var stu = new Student();
    console.log("stu instanceof Student:",stu instanceof Student);//true
    console.log("stu instanceof Person:",stu instanceof Person);//true  
    
    
    //////////////////////|分隔符|/////////////////////
    function a(){}
    (new a()) instanceof Function //false
    
    function a(){}
    (new a()) instanceof a // true
    
    function a(){}
    (new a()) instanceof Object // true
    

     

    hasOwnProperty(item):

      objectInstance.hasOwnProperty(item))//用于判断一个属性是否是对象实例定义的,还是从原型导入的 

    //扩展:对JavaScript原生对象的扩展
    //原理:原型对象
    Object.prototype.keys = function(){
    	var keys = [];
    	for(var item in this)
    		if(this.hasOwnProperty(item))//用于判断一个属性是否是对象实例定义的,还是从原型导入的
    		    keys.push(item);
    	return keys;
    }
    
    var obj = {"name":"johnny","age":21};
    obj.keys();//["name"."age"]
    

    ECMAScript中的(六大)基本数据类型

    1.简单数据类型

      Undefined、Null、Boolean、Number、String

    2.复杂数据类型

      Object

    备注:

      ECMAScript不支持任何创建自定义的机制,而所有值都最终都将是上述6种数据类型之一。

      但由于ECMAScript数据类型具有动态性,因此便没有再定义其他数据类型的必要了。

    //变量的动态性:这意味着相同的变量可用作不同的类型:
    var x                // x 为 undefined
    var x = 6;           // x 为数字
    var x = "Bill";      // x 为字符串
    

     typeof(A):检测给定变量的数据类型----typeof

    函数对象:typeof(function a(){}) //"function"
      说明:
        1.在safari、chrome中,返回“function”,其他浏览器中返回“object”。
        2.从技术角度讲,函数在ECMAScript中是对象,不是一种数据类型。
        3.然而,函数也确实有一些特殊的属性。因此通过typeof操作符区分函数和其他对象也是必要的。  
    
    对象:typeof({}) //"object"
            typeof(null) //"object"
    数组对象:typeof([]) //"object"
    
    undefined:typeof(undefined) //"undefined"(便是变量未定义,也可对某变量赋undefined为具体值)
      说明:
        1.undefined派生自null
        2.关于四大值属性(Infinity、NaN、undefined、null字面量),详见MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects
    
    字符串:typeof("") //"string"
    数值:typeof(34) // "number"
            typeof(NaN) // "number"
    布尔:typeof(true) //"boolean"
    

    参考文献

  • 相关阅读:
    (BFS 二叉树) leetcode 515. Find Largest Value in Each Tree Row
    (二叉树 BFS) leetcode513. Find Bottom Left Tree Value
    (二叉树 BFS DFS) leetcode 104. Maximum Depth of Binary Tree
    (二叉树 BFS DFS) leetcode 111. Minimum Depth of Binary Tree
    (BFS) leetcode 690. Employee Importance
    (BFS/DFS) leetcode 200. Number of Islands
    (最长回文子串 线性DP) 51nod 1088 最长回文子串
    (链表 importance) leetcode 2. Add Two Numbers
    (链表 set) leetcode 817. Linked List Components
    (链表 双指针) leetcode 142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/7892702.html
Copyright © 2011-2022 走看看