最新公告
  • 新注册用户请前往个人中心绑定邮箱以便接收相关凭证邮件!!!点击前往个人中心
  • JS面试经典题目合集(二)

    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框架):

     
    

    如何区分:
    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 文档样式闪烁

     
    

    而引用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。

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

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

    本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
    极客文库 » JS面试经典题目合集(二)

    常见问题FAQ

    如果资源链接失效了怎么办?
    本站用户分享的所有资源都有自动备份机制,如果资源链接失效,请联系本站客服QQ:2580505920更新资源地址。
    如果用户分享的资源与描述不符怎么办?
    可以联系客服QQ:2580505920,如果要求合理可以安排退款或者退赞助积分。
    如何分享个人资源获取赞助积分或其他奖励?
    本站用户可以分享自己的资源,但是必须保证资源没有侵权行为。点击个人中心,根据操作填写并上传即可。资源所获收益完全归属上传者,每周可申请提现一次。
    如果您发现了本资源有侵权行为怎么办?
    及时联系客服QQ:2580505920,核实予以删除。

    参与讨论

    • 211会员总数(位)
    • 3737资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 862稳定运行(天)

    欢迎加入「极客文库」,成为原创作者从这里开始!

    立即加入 了解更多
    成为赞助用户享有更多特权立即升级