• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

JS面试经典题目合集(二)

极客题库 Geekerstar 11个月前 (06-04) 573次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

IE 8以下版本的浏览器中的盒模型有什么不同

IE8以下浏览器的盒模型中定义的元素的宽高包括内边距和边框

DOM操作——怎样添加、移除、移动、复制、创建和查找节点。

1. 创建新节点

createDocumentFragment() // 创建一个DOM片段
createElement() // 创建一个具体的元素
createTextNode() // 创建一个文本节点

2. 添加、移除、替换、插入

appendChild()
removeChild()
replaceChild()
insertBefore() // 在已有的子节点前插入一个新的子节点

3. 查找

getElementsByTagName() // 通过标签名称
getElementsByName() // 通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)
getElementById() // 通过元素Id,唯一性

html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?

新特性:

HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
1. 拖拽释放(Drag and drop) API
2. 语义化更好的内容标签(header,nav,footer,aside,article,section)
3. 音频、视频API(audio,video)
4. 画布(Canvas) API
5. 地理(Geolocation) API
6. 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
7. sessionStorage 的数据在浏览器关闭后自动删除
8. 表单控件,calendar、date、time、email、url、search
9. 新的技术webworker, websocket, Geolocation

移除的元素:

1. 纯表现的元素:basefont,big,center,font, s,strike,tt,u;
2. 对可用性产生负面影响的元素:frame,frameset,noframes;

支持HTML5新标签:

1. IE8/IE7/IE6支持通过 document.createElement 方法产生的标签,可以利用这一特性让这些浏览器支持 HTML5 新标签,浏览器支持新标签后,还需要添加标签默认的样式(当然最好的方式是直接使用成熟的框架、使用最多的是html5shiv框架):

<!--[if lt IE 9]> 
<script> src="http://html5shiv.googlecode.com/svn/trunk/html5.js"</script> 
<![endif]--> 

如何区分:
DOCTYPE声明新增的结构元素、功能元素

iframe的优缺点?

优点:

1. 解决加载缓慢的第三方内容如图标和广告等的加载问题

2. Security sandbox

3. 并行加载脚本

缺点:

1. iframe会阻塞主页面的Onload事件

2. 即时内容为空,加载也需要时间

3. 没有语意

如何实现浏览器内多个标签页之间的通信?

调用 localstorge、cookies 等本地存储方式

webSocket 如何兼容低浏览器?

Adobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基于 multipart 编码发送 XHR 、 基于长轮询的 XHR

线程与进程的区别

1. 一个程序至少有一个进程,一个进程至少有一个线程

2. 线程的划分尺度小于进程,使得多线程程序的并发性高

3. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率

4. 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

5. 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别

你如何对网站的文件和资源进行优化?

期待的解决方案包括:

1. 文件合并

2. 文件最小化/文件压缩

3. 使用 CDN 托管

4. 缓存的使用(多个域名来提供缓存)

5. 其他

请说出三种减少页面加载时间的方法

1. 优化图片

2. 图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方)

3. 优化CSS(压缩合并css,如 margin-top, margin-left…)

4. 网址后加斜杠(如www.campr.com/目录,会判断这个目录是什么文件类型,或者是目录。)

5. 标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。 当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了)

6. 减少http请求(合并文件,合并图片)

你都使用哪些工具来测试代码的性能?

1. Profiler

2. JSPerf(http://jsperf.com/nexttick-vs-setzerotimeout-vs-settimeout)

3. Dromaeo

什么是 FOUC(无样式内容闪烁)?你如何来避免 FOUC?

FOUC – Flash Of Unstyled Content 文档样式闪烁

<style type="text/css" media="all">@import "../fouc.css";</style> 

而引用CSS文件的@import就是造成这个问题的罪魁祸首。

IE会先加载整个HTML文档的DOM,然后再去导入外部的CSS文件,因此,在页面DOM加载完成到CSS导入完成中间会有一段时间页面上的内容是没有样式的,这段时间的长短跟网速,电脑速度都有关系。

解决方法简单的出奇,只要在head之间加入一个link或者script元素就可以了

null和undefined的区别?

null是一个表示”无”的对象,转为数值时为0

undefined是一个表示”无”的原始值,转为数值时为NaN

当声明的变量还未被初始化时,变量的默认值为undefined

null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象

undefined表示 “缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:

1. 变量被声明了,但没有赋值时,就等于 undefined

2. 调用函数时,应该提供的参数没有提供,该参数等于 undefined

3. 对象没有赋值的属性,该属性的值为 undefined

4. 函数没有返回值时,默认返回 undefined

null表示“没有对象”,即该处不应该有值。典型用法是:

1. 作为函数的参数,表示该函数的参数不是对象

2. 作为对象原型链的终点

new操作符具体干了什么呢?

1. 创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型

2. 属性和方法被加入到 this 引用的对象中

3. 新创建的对象由 this 所引用,并且最后隐式的返回 this

var obj  = {};
obj.__proto__ = Base.prototype;
Base.call(obj); 

对JSON 的了解?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小。

{"age":"12", "name":"back"}

js延迟加载的方式有哪些?

1. defer和async

2. 动态创建DOM方式(创建script,插入到DOM中,加载完毕后callBack)

3. 按需异步载入js

如何解决跨域问题?

1. jsonp(jsonp 的原理是动态插入 script 标签)

2. document.domain + iframe

3. window.name、window.postMessage

4. 服务器上设置代理页面

documen.write和 innerHTML 的区别

document.write 只能重绘整个页面

innerHTML 可以重绘页面的一部分

.call() 和 .apply() 的作用?

动态改变某个类的某个方法的运行环境

哪些操作会造成内存泄漏?

内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。

垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。

如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。

1. setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。

2. 闭包

3. 控制台日志

4. 循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

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

通过判断 Global 对象是否为window,如果不为window,当前脚本没有运行在浏览器中。

即在node中的全局变量是global ,浏览器的全局变量是window。

可以通过该全局变量是否定义来判断宿主环境

本文内容来源于网络收集,内容繁杂,难免有误,如果发现错误的地方或者有任何想讨论的问题请在下面留言。

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:JS面试经典题目合集(二)
喜欢 (0)
[247507792@qq.com]
分享 (0)
Geekerstar
关于作者:
本站技术支持

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00