为了账号安全,请及时绑定邮箱和手机立即绑定

直面JavaScript中的30个疑难杂症

公明2020 Web前端工程师
难度中级
时长 5小时 3分
学习人数
综合评分9.60
17人评价 查看评价
9.6 内容实用
9.8 简洁易懂
9.4 逻辑清晰
  • 阻止默认事件
    a标签

    阻止默认行为:

    preventDefault();

    return false

    查看全部
  • 什么是事件对象:事件触发时候自动创建的,封装了事件发生的元素和属性信息。

    var obj3 =document.getElementById('demo3') //获取demo3对象

    obj3.addEventListener('click',function(e)//给demo3绑定事件监听  传入函数function,事件触发的时候就自动创建了一个e 就是event,就是事件对象。事件对象传入进来之后,做了一个判断,

    {

    var e=e||window.event;

    if(e.target.nodeName.toLowerCase() =='div'){//target事件触发的事件对象

    alert(e.target.innerHTML);

    }

    },

    false;//true是捕获,false 是冒泡

    )

    事件的周期:

    事件捕获,事件对象的触发,冒泡触发

    事件冒泡应用:1阻止冒泡 e.stopPropagation()

    当没有阻止冒泡适合 可以做事件委托。

    var obj2 = document.getElementById('demo2')

    obj2.addEventlistener('click',function(e){

    var e=e||window.event;

    if(e.target.nodeName.toLowerCase() =='li'){//当前触发对象是父元素下面的li,就弹出li的内容

    alert(e.target.innerHTML);

    }

    },false

    )

    【对父元素绑定一个点击事件,利用冒泡原来当点击子元素触发对应的点击事件】

    查看全部
  • 1html事件

    通过 onclick 绑定一个函数。

    例如:<input type="button" value="html事件点击" onclick="fun()">
    <script>

    function fun(){

    alert('hello MOOC')

    }

    主要是操作简单的点击事件

    </script>

    2DOM0级事件

    事件绑定

    例如:

    <input type="buttom" value="dom0级事件” id="btn">

    <script>

    document.getElementById("btn").onclick = function(){

    alert('hello MOOC2')

    }

    </script>

    通过js语法获取DOM对象,通过onclick  等绑定一些事件。相当于一个分离了,逻辑操作跟结构是分开的。这样比较清晰。

    3DOM2级事件

    事件监听  【通过element(对象).addEvenListener(函数)(event【事件名】, function【函数】, useCaptrue【可选指定事件是否捕获冒泡阶段执行。true执行,默认false.】(事件对象))来做事件的监听】

    removeEventListener移除事件监听

    例如:

    <inpunt type="button" value="dom2级事件" id="btn1">
    <script>

    document.getElementById("btn1").addEventListener("click",fun2);

    function fun2(){

    alert('hello MOOC3')

    }

    </script>

    (后两种用的比较多)

    事件监听可以绑定多个事件(可以触发多个绑定事件)

    事件绑定只能绑定一个事件(如果同时绑定两个点击事件,只执行最后一个绑定事件)

    原因:js中不支持事件的重载,如果再绑定一个事件,相当于变量指向另外一个新的函数地址。

    查看全部
  • 解析过程中:

    1遇到link的外部css,遇到css的代码会进行css的加载,并行。

    2遇到script标签的时候,会先去执行js的内容,直至脚本完成执行,然后继续构建DOM。

    底部引用JavaScript代码的原因,或者说可以再头部引用,但是前提是加上async,defer,或者window.onload;

    解析器遇到设置了async(异步)属性的script 开始下载脚本并继续解析文档,脚本会在她下载完成后尽快执行。而defer同样是异步但是她会再文档渲染完毕后,DOMcontentLoaded事件调用前执行,脚本会被延迟到整个页面都解析完毕后再运行。

    async和defer都是异步的,并不影响我们整个DOM树的构建。

    css有自己的解析器,每个css文件解析为样式表对象CSSStyleSheet。生成css树

    构建渲染树:DOM树+CSS树

    布局layout与绘制paint:计算对象之间的大小,距离确定每个节点再屏幕上的确切坐标,映射浏览器屏幕绘制。使用UI后端层绘制每个节点。

    reflow(回流):回流一定会重绘。相当于刷新页面

    repaint(重绘):不一定引起回流。局部改变背景色 字体颜色这些。

    查看全部
  • escape:除了ASCII(a-z,0-9)编码

    unescape:解码

    js的全局函数,js中内置的可以直接使用

    比较实用:

    encodeURI()编码:主要对汉字进行编码

    decodeURI()解码

    console.log(encodeURI(url))

    var ec = encodeURI(url)

    console.log(decodeURI(ec)) 用的比较多, ios 等里面都用的上

    查看全部
  • var  now = new Date()

    console.log(now.getTime()) //  1608908483092 :1970 1 1 0至今的一个毫秒数
    console.log(now.getDay())//5 本周的第几天

    console.log(now.getDate())// 25号 本月几号

    console.log(now.getMonth()+1)//注意 月要+1 原本是0-11加上1才是1-12


    获取时间 now:本地客户端时间是可以修改的 要从后端获取才能准确。

    固定的时间段可从前端获取。

    查看全部
  • sort方法:1.默认升序
                   2.将排序的元素转化为字符串;找对应字符串的Unicode码表。

    (Unicode码表:abc 1,好)
    console.log(arr.sort())

    【解决方法】

    1. 定义一个比较器函数sort(callback)

    2. function(x,y){return x-y}小于0 x移到y前面, 大于0 x移到y后面,等于0不变。

    例子:
    var  arr=[3,25,15,18,9,22]

    arr.sort(function(x,y){

    return x-y

    })

    console.log(arr)//3,9,15,18,22,25

    或者直接调用内部方法reverse

    console.log(arr.reverse())

    查看全部
  • 手写一个bind方法


    63d916340001eb7b09600540.jpg
    查看全部
  • 匿名函数优点

    查看全部
  • JS中有哪些数据类型?

    一、原始类型(基本类型):

    Undefined、Null、Boolean、Number和String

    二、引用类型(复杂类型):

    Object

    查看全部
  • 常见函数的四种类型

    1. 匿名函数-定义时候没有任何变量引用的函数

      匿名函数自调:如果函数只执行一次

      (function(a,b){

            console.log('a = ', + a)

            console.log('b = ', + b)

      })(1, 2);

    2. 回调函数

    3. 递归函数

    4. 构造函数


    查看全部
  • BOM浏览器对象模型

    history 栈

    window.history属性指向 History 对象,表示当前窗口的浏览历史 www.baidu.com

    History.back()、 History.forward()、 History.go()

    History.pushState(), History.replaceState()


    Location 对象window.location和document.location属性 可以拿到这个对象

    location.herf 整个UIRL

    Location.protocol 当前URL的协议 包括冒号(:)和端口

    Location.port 端口号

    Location.pathname URL 的路劲部分,从根路劲开始

    Location.search 查询字符串部分 从问号?开始

    Location.hash 片段字符串部分 从#开始

    Location.username 域名前面的密码

    Location.origin URL 的协议、主机名和端口

    查看全部
  • // 事件委托

    var obj2 = document.getElementById('demo2')

    obj2.addEventListener('click', function(e){

        var e = e || window.event;

        if(e.target.nodeName.toLowerCase() == 'li' { // IE8: e.srcElement

            alert(e.targe.innerHTML);

        }

    }, false);

    查看全部
  • 堆就是在栈中存储一个地址  通过地址找到对应的数据  

    栈就是原始类型的数据存储  就像鸭子弹一样  

    查看全部
  • 闭包是指有权访问另一个函数作用域中的变量的函数。——《JavaScript高级程序设计》

    查看全部

举报

0/150
提交
取消
课程须知
1、有一定的前端JavaScript基础的用户 2、想对JavaScript有更深层次的了解,或者是对常见JavaScript面试题难以理解的用户 3、技术储备:JavaScript、HTML、CSS
老师告诉你能学到什么?
JavaScript中比较重要的知识点,例如数据类型检测;面试中常见的闭包、作用域和作用域链、执行上下文等等;还有JavaScript中的原型、原型链,面向对象问题,以及实战开发的运用。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!