前端知识点汇总—面试看这一篇就够了 (4)

原理(摘自高级程序设计3):在任何值上调用 Object 原生的 toString() 方法,都会返回一个 [object NativeConstructorName] 格式的字符串。每个类在内部都有一个 [[Class]] 属性,这个属性中就指定了上述字符串中的构造函数名。
但是它不能检测非原生构造函数的构造函数名。

使用jquery中的$.type

console.log($.type(bool)); //boolean console.log($.type(num)); //number console.log($.type(str)); //string console.log($.type(und)); //undefined console.log($.type(nul)); //null console.log($.type(arr)); //array console.log($.type(obj)); //object console.log($.type(fun)); //function console.log($.type(dog)); //object

$.type()内部原理就是用的Object.prototype.toString.call()

DOM操作(增删改查)

添加操作

let element = document.createElement("div"); // 创建元素 body.appendChild(element); // 将一个节点添加到指定父节点的子节点列表末尾

删除操作

var oldChild = node.removeChild(child); // 删除子元素 ChildNode.remove() // 删除元素

修改操作

Node.innerText // 修改元素文本内容 Element.innerHTML // 设置或获取描述元素后代的HTML语句

查找操作

Document.getElementById() // 返回对拥有指定 id 的第一个对象的引用 Document.querySelector() // 返回文档中匹配指定的CSS选择器的第一元素 Document.querySelectorAll() // 返回与指定的选择器组匹配的文档中的元素列表

https://developer.mozilla.org/zh-CN/docs/Web/API/Document_Object_Model

异步加载JS 的方式有哪些

浏览器下载除JS外的资源时,会并行下载,以提高性能。但下载JS脚本时,会禁止并行下载(称为脚本阻塞Scripts Block Downloads)。浏览器遇到JS时,必须等JS下载,解析,执行完后,才能继续并行下载下一个资源。原因是JS可能会改变页面或改变JS间的依赖关系,例如A.js中用document.write改变页面,B.js依赖于A.js。因此要严格保证顺序,不能并行下载。

由于浏览器在遇到<body>标签前是不会渲染页面的,为了避免白屏,通常的建议是将JS放到

标签底下,可以有最佳的用户体验。

按推荐度排序:

动态创建<script>标签(Dynamic Script Element)

var script = document.createElement('script'); // 创建script标签 script.type = "text/javascript"; script.src = "http://www.likecs.com/A.js"; document.getElementsByTagName('head')[0].appendChild(script); // 塞进页面

先用document.createElement(‘script’)生成一个script标签,再设置它的src属性,最后将其插入到<head>中。

script标签被插入到页面的DOM树后,就会开始下载src属性指定的脚本。而且通过动态脚本元素下载脚本是异步的,不会阻塞页面的其他下载和处理过程,因此script标签插入<head>中也没问题。

Script async

<script type="text/javascript" src="http://www.likecs.com/A.js" async></script>

浏览器解析到HTML里的该行script标签,发现指定为async,会异步下载解析执行脚本。

async 是HTML5里为script标签新增的属性,对于低版本浏览器会存在兼容性问题。

它会在下载完成后立刻执行,而不是会等到DOM加载完成之后再执行,所以还是有可能会造成阻塞。

这种方式只适用于引用外部js文件的<script>标签。

添加async属性的js文件不应该使用document.write方法。

对多个带有async的js文件,它不能保证按顺序执行,它是哪个js文件先下载完就先执行哪个。

Script defer

<script type="text/javascript" src="http://www.likecs.com/A.js" defer></script>

浏览器解析到HTML里的该行script标签,发现指定为defer,会暂缓下载解析执行脚本。而是等到页面加载完毕后,才加载脚本(更精确地说,是在DOM树构建完成后,在window.onload触发前,加载defer的脚本)。

defer也是只适用于外部js文件,也不能在js中使用document.write方法。

可以保证多个js文件的执行顺序就是它们在页面中出现的顺序。

document.write和innerHTML有何区别

document.write会重绘整个页面,如果不指定元素的话,它会覆盖掉整个页面内容。

innerHTML只会重绘页面的一部分。

jQuery.extend和jQuery.fn.extend的区别

https://api.jquery.com/jQuery.fn.extend/

https://api.jquery.com/jQuery.extend/

针对jQuery性能的优化方法

如何判断当前脚本运行在浏览器还是node环境中

通过判断Global对象是否为window,如果不为window,则当前脚本运行在node.js环境中。

this === window ? 'browser' : 'node'; Canvas和SVG的比较

前端知识点汇总—面试看这一篇就够了

https://www.educba.com/svg-vs-canvas/

Ajax的原理

https://www.cnblogs.com/ygj0930/p/6126542.html

#_label8

JS事件委托、事件冒泡

前端知识点汇总—面试看这一篇就够了

https://www.cnblogs.com/owenChen/archive/2013/02/18/2915521.html

IE和Firefox的事件机制有何区别,如何阻止冒泡?

IE只支持事件冒泡,火狐同时支持事件捕获事件冒泡两种。

阻止事件冒泡的方式不同
IE: e.cancelBubble = true
W3C: e.stopPropagation()

JS内存空间的管理

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxszg.html