• JavaScript知识点小记2


    1 数据类型、判断方法

       基本类型:Undefined、Null、Boolean、Number、String

       引用类型:Object

      Ps:特殊对象类型:Array、Function、Math、Date、JSON、RegExp、Error

    精确区分数据类型的方法:Object.prototype.toString.call()

    console.log(Object.prototype.toString.call("34"));//[object String]
    console.log(Object.prototype.toString.call(66));//[object Number]
    console.log(Object.prototype.toString.call(function(){}));//[object Function]
    
    let val1=null;
    let val2=val1||' ';
    console.log(val2); //空
    
    
    let var1=undefined;
    let val2=var1||'';
    console.log(val2);//空
    
    
    let var1="hay";
    let val2=var1||'';
    console.log(val2); //hay
    

    2 执行上下文

      当前代码的执行环境

    3 this

      this的指向是在函数被调用的时候确定的。

    (1)       若一个函数中有this,但其没有以对象的形式调用,而是以函数名的形式执行,则this指向全局对象。

    function test(){ 
        console.log(this); 
    } 
    test();//window
    

    (2)       若一个函数中有this,且该函数是以对象方法的形式调用,则this指向的是调用该方法的对象。

    var obj={ 
        test:function(){ 
            console.log(this); 
        } 
    } 
    obj.test();//obj
    

    (3)       若一个函数中有this,且包含该函数的对象也同时被另一个对象所包含,尽管这个函数是被最外层的对象所调用,this指向的也只是它的上一级对象。

    var obj={ 
        test:{ 
            fun:function(){ 
                console.log(this); 
            } 
        } 
    } 
    obj.test.fun();//test
    

    (4)       若一个构造函数或类方法中有this,则其指向由该构造函数或类创建出来的实例对象。

    class Test{ 
        constructor(){ 
            this.test = "test";  //类实例 
        } 
        option(){ 
            console.log(this);   //类实例 
        } 
    }
    

    ps:

    • 判断 this 在全局中OR函数中,若在全局中则 this 指向全局,若在函数中则只关注这个函数并继续判断。

    • 判断 this 所在函数是否作为对象方法调用,若是则 this 指向这个对象,否则继续操作。

    • 创建一个虚拟上下文,并把this所在函数作为这个虚拟上下文的方法,此时 this 指向这个虚拟上下文。

    • 在非严格模式下虚拟上下文是全局上下文,浏览器里是 window ,Node.js里是 Global ;在严格模式下是 undefined 。

    4 事件绑定的几种方法?

    (1)直接在元素上绑定回调函数

    <button id="btn" onclick="clickBtn()">click </button>
    

    (2)js获取DOM元素对象后,对onclick属性赋值,绑定事件

    document.getElementById('btn').onclick=clickBtn;
    

    (3)js获取DOM对象后,调用对象的addEventListener函数绑定事件

    document.getElementById('btn').addEventListener('click',clickBtn);
    

    5 callee、caller

    (1)callee,对象的属性,该属性是一个指针,指向参数arguments对象的函数,即用于指向当前对象。

    function fac(x){
        if(x<=1){
           return 1;
        }else{
           return x*fac(x-1);
        }
    } 
    
    function fac(x){
         if(x<=1){
            return 1;
       }else{
            return x*arguments.callee(x-1);
         }
    }
    

     ps:使用callee之后,无论引用函数的名字是什么,都可以保证递归调用顺利。

    (2)caller

        函数对象的一个属性,该属性保存着调用当前函数的函数的引用,若在全局作用域中调用当前函数,则其值为null。

    function a(){//父函数
        b();
        };
        function b(){
        console.log(b.caller);
        };
        a(); //结果就是弹出函数a和内容 
    

     (3)callee+caller

       由(2)知,当函数名改过时,需要进行替换,比较麻烦。

    (function a(){
        b();
    })();  
    
    function b(){
      alert(arguments.callee.caller);//用arguments.callee代替了b
    }; 
    

    学习 & 感谢 & 推荐

    https://mp.weixin.qq.com/s/I7A1iC8Et6uOGZ234DsTlA

    https://blog.fundebug.com/2017/07/06/12-tricks-that-js-rocks/

    http://www.cnblogs.com/GumpYan/p/5718633.html

     https://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651552414&idx=2&sn=0436b66836ae9e08f5f86d8626811875&chksm=8025ad5fb7522449870890e6fa11961b78140537624575146de20dc60aa9e71dbd879355b260&mpshare=1&scene=23&srcid=0803gOTp44l8BS4hCDvBSmOH#rd

    宝剑锋从磨砺出,梅花香自苦寒来。
  • 相关阅读:
    lightoj-1047
    lightoj-1044
    lightoj-1045
    lightoj-1082
    LeetCode偶尔一题 —— 19. 删除链表的倒数第N个节点
    Python 3.52官方文档翻译 http://usyiyi.cn/translate/python_352/library/index.html 必看!
    Python3 time模块
    JavaScript CSS 等前端推荐
    Python之 七级字典查询
    将Sublime Text 3设置为Python全栈开发环境(转一个链接)
  • 原文地址:https://www.cnblogs.com/haimengqingyuan/p/7237134.html
Copyright © 2020-2023  润新知