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

直面JavaScript中的30个疑难杂症

公明2020 Web前端工程师
难度中级
时长 5小时 3分
学习人数
综合评分9.60
17人评价 查看评价
9.6 内容实用
9.8 简洁易懂
9.4 逻辑清晰
  • 事件阻止。
    查看全部
  • 事件委托。
    查看全部
  • js 解释执行

        js解释引擎:词法分析->语法分析->语法树

        词法分析是将字符流(char stream ) 转换为记号流(token stream)

        语法分析成AST(语法树)

        js解析:预编译期(预处理、预解析、预编译)与执行期

        预编译预解析,当Javascript引擎解析脚本时,它会在预编译期对所有声明的变量和函数进行处理;并且是先预声明变量,再预定义函数


    变量和函数提升

        先提升变量,再提升函数

    查看全部
  • history

        window.history 属性指向History对象,它标识当前浏览器历史 浏览器历史记录是一个栈数据结构(先进后出)

        History.back() 后退、History.forward()前进、History.go() 跳转

        History.pushState() 向栈里推入数据、History.replaceState()向栈里替换数据


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

    Location。href:整个URL

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

    Location.host:主机。如果端口不是协议默认的80和433,则不会包括冒号(:)和端口

    Location.hostname:主机名,不包括端口。

    Location.port:端口号。

    Location.pathname:URL的路径部分,从根路径/开始。

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

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

    Location.username:域名前面的用户名。

    Location.password:域名前面的密码。

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

    查看全部
  • 常用阻止默认行为的两种方式:

        常见默认行为:

                a标签自动跳转

                input表单自动提交

        e.preventDefault()

        


        return false

    查看全部
  • 事件触发

        事件对象:事件触发时候自动创建的,封装了事件发生的元素和属性信息    

        window.event // ie

        e.target // 触发元素对象  ie:e.srcElement

    事件捕获

        addEventListener 第三个参数为true,事件处于捕获阶段,默认false

        ie没有捕获阶段

    事件冒泡

         e.stopPropagation()阻止冒泡

        IE:e.cancelBubble=true 阻止冒泡

        利用冒泡(事件委托)

                          

    查看全部
  • 三种事件绑定的异同

        广义的javascript: ECMAScript+DOM+BOM ,DOM0 DOM1 DOM2

        狭义的javascript:ECMAScript, ES6 ES5 ES3

        htlml事件

            通过行内onClick 添加的事件

        dome0级事件(事件绑定)

            通过js代码给元素onclick属性赋值

                DOM.onclick=function(){

                alert('DOM0级事件')            

    }

        demo2级事件(事件监听)

             DOM.addEventListener('click',function,bool) // function 事件触发的回调函数 bool:事件处于冒泡阶段还是捕获阶段

            移除:removeEventListener

            优点:可以绑定多个事件,常规的事件绑定只执行最后绑定的事件

            js不支持事件重载,绑定事件相当于一个变量存储的是函数的地址,如果再绑定一个事件,相当于变量指向另一个函数的地址;事件监听相当于订阅发布者,改变了数据,触发了事件,订阅这个事件的函数被执行。

            总结:事件绑定相当于绑定到DOM的属性,重复绑定会覆盖。而事件监听相当于添加属性到DOM对象,多次监听,就会多次添加属性到DOM对象,所以都会触发,不会覆盖。

    查看全部
  • 深入理解DOM数加载过程

        1.在浏览器中输入url,交给DNS域名解析,找到IP,向服务器发起请求;(里面还有缓存,http协议,TCP...)

        2. 服务器返回数据,浏览器接收文件(html,css,js,img...),二进制文件

                html:二进制转换为html

                 构建DOM树:HTML解析器

                                Token->Node->DOM

                                Token词法解析,根是"document"对象

                                 Node:HTMLDivElement

                                 DOM:DOM和标签基本是一一对应的关系div

                    解析过程中:

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

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

                                 底部引入Javascript代码的原因。或者说可以在头部引用,但是前提是加上async、defer,或window.onload:

                                    解析器遇到设置了async属性的script时,开始下载脚本并继续解析文档。脚本会在它下载完成后尽快执行,但是解析器不会停下来等它下载

                                    如果script标签设置了该属性,则浏览器会异步下载该文件并且不会影响后续DOM的渲染;

                                    如果有多个设置了defer的script标签存在,则会按照顺序执行所有的script;

                                     defer脚本会在文档渲染完毕后,DOMContentLoaded事件调用前执行;脚本会被延迟到整个页面都解析完毕后再运行

                        构建css树:css解析器

                                            每个css文件解析为样式表对象scctyleSheet,每个对象都包含cssRule,cssRule包含选择器和声明对象,以及其他与css语法对应的对象。

                                            Token解析:css的词法及语法文法

                                             Node->CSSOM

                        构建render树:渲染树=DOM树+css树

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

            reflow(回流):当元素属性发生改变且影响布局时(宽度、高度、内外边距等),产生回流,相当于刷新页面

            repaint(重绘):当元素属性发生改变且不影响布局时(背景颜色,透明度,字体样式等),产生重绘,相当于不刷新页面,动态更新内容。

    查看全部
  • 开发过程中的编码和解码

        escape和unescape、encodeURL和decodeURI、encodeURIComponent和decodeURIComponent

        escape(url)  // 除了ASCII(a-z,0-9),其他的进行编码(对除了英文字符和数字其他的字符全部编码)  js全局函数

        unescape(url)  // 除了ASCII,其他的进行解码


        encodeURI(url) // 只对中文进行编码   最常用

        decodeURI(url) // 只对中文进行解码  ios移动端会被转码,需要解码

        

        encodeURIComponent     //该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

    其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

        decodeURIComponent    //    解码

              

    实际应用问题

    查看全部
  • 存储或者获取月份时需要注意的是0-11

        实际使用中,获取到的月份返回的数值需要加1才是实际的月份 

        js设计得时候 借鉴java1.1 now.getMonth():0-11 

        工作中需要分析,时间是从服务端获取,还是客户端获取

        

    查看全部
  • sort是如何排序的

        arr.sort() 默认是升序排序

                    将排序的元素转为字符串,找对应的字符串Unicode码表

    如何解决sort排序的问题

        

    不能对数字进行排序,解决方案

            1.定义一个比较强函数

                      sort(callback)

                        function(x,y){return x-y} 小于0 升序 大于0 降序

    查看全部
  • 栈和队列

        栈是一种后进先出的数据结构,也就是说最新添加的项最早被移出;LIFO(后进先出)

        队列数据结构是先进先出(FIFO)队列在列表的末端添加项,从列表的前端移除项

    栈和堆:数据的存储形式

    栈和队列:数据的结构

    push,pop,unshift,shift

    栈:

        结尾出入栈:入栈:push()   出栈: pop() 效率高

        开头出入栈: 入栈:unshift()   出栈: shift()    效率低

    队列:

        push进shift出

        unshift进pop出

         

    查看全部
  • 装箱:把基本数据类型转化为对应的引用数据类型的操作;

    如何实现:

        var num = 123 // number

        var objNum = new Number(123) // object

    拆箱:将引用类型对象转换为对应的值类型对象;

    如何实现:

        调用object.valueOf()方法实现

        objNum.valueOf() //123 

    内部如何实现:

        toPrimitive(input,type) //input:传入值,type:值类型

          // input 判断是不是原始类型的值:如果是,直接返回,

            如果不是调用 input.valueOf() 是原始类型,直接返回,

            还不是:调用input.toString 直接返回字符串   

            或者报错

         valueOf() 是原始类型的值,直接返回,没有,就返回对象本身

        toString() input字符串转换;对象:[object,type] type:对象类型 

    查看全部
  • js常用内置对象

        三种包装对象:String,Number,Boolean

            内部做的事情: 1. new 一个对应的对象

                                    2. 调用内部方法返回一个新的返回值

                                      3. 清空new出来的新对象

        其他常用的标准内置对象:Array,Date,Function,Object...

            了解里面内置的一些方法

    查看全部
  • for 循环性能优化

        1.用变量缓存DOM元素

        2.算法层面上的优化

    查看全部

举报

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

微信扫码,参与3人拼团

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

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