JS一些概念知识及参考连接

一、setTimeout、setInterval、promise、宏任务、微任务

参考:https://www.jianshu.com/p/92f4506a28d0http://www.javashuo.com/article/p-cmtsxzha-h.htmlphp

二、事件的三种模型

参考:https://www.cnblogs.com/leaf930814/p/6980501.html#tophtml

三、前端路由是怎么实现的

参考:http://www.javashuo.com/article/p-fhwtimdc-kv.html前端

四、防抖函数和节流函数

参考:http://www.javashuo.com/article/p-rzwywcph-cn.htmlvue

五、webpack实现按需加载

参考:https://blog.csdn.net/qq_27626333/article/details/76228578html5

六、vue中实现路由拦截、http拦截

参考:https://blog.csdn.net/wang1006008051/article/details/77962942https://blog.csdn.net/qq_39759115/article/details/77185101https://blog.csdn.net/cofecode/article/details/79181894webpack

七、动态加载JS脚本

动态加载JS脚本时,若是要先判断动态加载的脚本是否已经执行完毕时,IE浏览器能够观察 script 标签的 readyState 属性,其余浏览器能够用 onload 方法来完成。git

详情参考:https://www.jb51.net/article/139481.htmgithub

 八、JS中不一样数据类型间进行运算

 参考:https://blog.csdn.net/zlingyun/article/details/82561259web

九、闭包解决for循环输出 i 为同一值的问题

参考:http://www.javashuo.com/article/p-buetjkch-du.html算法

 

十、判断数据类型

10.一、判断是否为对象

var obj = {a: 123, b: 456}
console.log(Object.prototype.toString.call(obj) === '[object Object]'); console.log(obj.constructor === Object); console.log(obj instanceof Object);

10.二、判断是否为数组

var obj = [1,2]
console.log(Array.isArray(obj));        //true
console.log(obj instanceof Array);    //true
console.log(Object.prototype.toString.call(obj) === '[object Array]');    //true
console.log(obj.constructor === Array);   //true
console.log(obj.push != undefined);         //true 有兼容性问题

10.三、判断是否为字符串

var str = 'aaa'
console.log(typeof str); console.log(str.constructor); console.log(Object.prototype.toString.call(str)); var str2 = new String(); console.log(str2 instanceof String); //true 只有经过new方式声明一个字符串时,使用instanceof方法才是true

 

十一、原型链继承、构造函数继承、组合继承

原型链继承代码简单,易实现,可是子类实例修改父类中的引用类型属性值时,其余子类实例的该值也将发生改变。由于经过原型对象 prototype 实现继承,则原型对象中的全部引用类型值都是复用的,即都是同一个值。而且在建立子类实例时,没法向父类构造函数传参

 构造函数解决了子类实例对引用类型值的误修改操做问题,可是每一个实例都拷贝一份引用类型值,占用内存大,尤为是方法过多的时候。(函数复用又无从谈起了,原本咱们用 prototype 就是解决复用问题的)

组合继承既解决了子类实例对引用类型值的误修改操做问题,在建立子类实例时也向父类构造函数传参,又能够复用一些属性。在组合继承中,在父类的原型对象中定义的属性都是会复用的,而在父类的构造函数里定义的属性都不是复用的属性。或许有人会想到这时会不会跟原型链继承同样,父类的构造函数中引用类型的值也是复用的,因此也有原型链继承的缺点,但其实不是,构造函数继承的值至关于子类实例自己的值,而原型链继承的值就是子类实例原型对象的值,在同时拥有时,首先做用的是子类实例自己的值。

ES6中类的继承能够看作是组合式继承的语法糖(简单理解),但二者的继承机制仍是不太同样的。

参考:http://www.javashuo.com/article/p-mkrhcevy-bb.htmlhttp://www.javashuo.com/article/p-bgpmtkrn-be.htmlhttp://www.javashuo.com/article/p-rwkatbxg-gb.html

 

十二、HTTP和HTTPS

HTTP的弊端:超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,若是攻击者截取了Web浏览器和网站服务器之间的传输报文,就能够直接读懂其中的信息,所以HTTP协议不适合传输一些敏感信息,好比信用卡号、密码等。

HTTPS:为了解决HTTP协议的这一缺陷,须要使用另外一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通讯加密。可是,加密和解密过程须要耗费系统大量的开销,严重下降传输数据的工做效率。

HTTPS的数据传输是用对称加密的,不过要先用非对称加密来加密传输对称加密的密钥,而证书的做用就是证实传输过来的非对称的公钥就是那我的的。

好比说服务器和客户端是经过对称加密传输数据的,可是要使用对称加密就二者就必须有一个共同的密钥,客户端要想把这个共同的密钥传输给服务器,就必须先对这个密钥加密。

客户端传输这个密钥时使用的是非对称加密(非对称加密是公钥加密的数据只能够经过私钥解开,私钥加密的数据有公钥就能够解开,公钥是公开的,谁均可以有它的公钥),服务器端维护一个私钥和公钥,不过先要把公钥传输给客户端,而后客户端就可使用公钥加密数据(即对称加密算法的密钥)传输给服务器。

不过客户端怎么肯定收到的公钥是来自所须要的服务器的而不是黑客的呢?这就要使用到证书了。公证处CA给服务器颁发私钥和证书,证书包括该服务器的基本信息 + 公钥 + 数字签名。数字签名的造成:首先将服务器的基本信息和公钥经过 hash 算法获得一个 hash 值,而后经过公证处的私钥来对该 hash 值进行加密就造成了数字签名。当服务器把它的证书传输给客户端,客户端就可使用公证处的公钥来对数字签名进行解密,获得一个hash值,而后将证书里面的基本信息和公钥经过使用一样的 hash 算法来进行计算又获得一个 hash 值,若是两个 hash 值相同,便可以判断证书是服务器的证书,公钥也就是服务器的公钥,由此就能够获得服务器传输过来的公钥了。

就像前面所说的同样,获得公钥之后客户端就能够经过该公钥来对传输的数据(即对称加密算法的密钥)进行加密,服务器端就可使用私钥对数据进行解密,获得将要使用的对称加密算法的密钥,而后服务器和客户端就可使用对称加密来进行传输数据了。

参考:http://www.javashuo.com/article/p-yqyvffkf-eg.html

12.一、HTTPS的缺点

(1)https加剧了服务端的负担,相比于http其须要更多的资源来支撑,同时也下降了用户的访问速度

(2)目前来讲大多数网站并不关心数据的安全性和保密性,即https最大的优势对它来讲并不适用

(3)https的技术门槛较高,多数我的或者私人网站难以支撑,CA机构颁发的证书都是须要年费的,此外对接Https协议也须要额外的技术支持

 

1三、JS中的new关键字的工做过程

function Animal(name) {
  this.name = name; } Animal.color = "black"; Animal.prototype.say = function () { console.log("I'm " + this.name); }; var cat = new Animal("cat"); console.log( cat.name,    //cat cat.height    //undefined ); cat.say();     //I'm cat  console.log(typeof Animal); console.log( Animal.name, //Animal Animal.color //back ); Animal.say(); //Animal.say is not a function

JS引擎在执行 new 关键词那段代码时,在内部进行了不少工做,用伪代码模拟其工做流程以下:

new Animal("cat") = {
    var obj = {}; obj.__proto__ = Animal.prototype; var result = Animal.call(obj,"cat"); return typeof result === 'object'? result : obj; }

参考:https://www.cnblogs.com/AaronNotes/p/6529492.html 

 

1四、websocket

参考:http://www.runoob.com/html/html5-websocket.html、  https://www.zhihu.com/question/20215561

1五、浏览器的渲染引擎和JS引擎

参考:http://www.javashuo.com/article/p-vjgiegsz-u.html、  https://github.com/zwwill/blog/issues/2

1六、浏览器缓存机制

参考:https://www.jianshu.com/p/54cc04190252

1七、JS中 date 对象的使用

参考:http://www.javashuo.com/article/p-mjirxmih-cb.html

相关文章
相关标签/搜索