不常见js的面试题

2018-06-29  本文已影响0人  你为什么无理取闹

1.有两个对象,var o = {num:1};var p = {num:2};要求书写一段代码,使得o+p===3为true。


答案

2.列举事件绑定的方法(原生+JQ addEventlistener与attachEvent的区别)addEventlistener现代浏览器都支持,ie从ie9开始支持,可以绑定多个事件

attachEvent ie专有,可以绑定多个事件,但this指向全局对象
setInterval 与 setTimeout 的区别 (略)
split() join() 的区别
split()字符串方法,将字符串转换成数组
join()数组方法,将数组合并成字符串

3.addEventlistener和通过on这种方式绑定的事件(例:ele.onclick = funciton(){})有什么区别

addEventlistener可以绑定多个事件
on这种方式只能绑定一次,之后绑定的事件会覆盖前面绑定的,实质是对象属性重新赋值
DOM事件流
事件捕获,事件目标,事件冒泡

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

Defer(只支持 IE)和async、动态创建DOM方式(用得最多)、按需异步载入js

5.那些操作会造成内存泄漏?

内存泄漏是指任何对象在您不再拥有或需要它之后任然存在。
垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量,如果一个对象的引用数量为0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。
//
setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

6.说一下拖拽的原理?怎么样实现多个DIV在拖拽时有相撞让它们改变属性与属性值和他们的位置?

mousedown,mousermove,mouseup事件
e.clientX,e.clientY 鼠标位置
碰撞检测

7.列举不少于6条的IE与FF脚本兼容性问题,需要写出命令(缺乏总结,看着简单,实际很难答全)

(1) window.event:
表示当前的事件对象,IE有这个对象,FF没有,FF通过给事件处理函数传递事件对象
(2) 获取事件源
IE用srcElement获取事件源,而FF用target获取事件源
(3) 添加,去除事件
IE:element.attachEvent(“onclick”, function) element.detachEvent(“onclick”, function)
FF:element.addEventListener(“click”, function, true) element.removeEventListener(“click”, function, true)
(4) 获取标签的自定义属性
IE:div1.value或div1[“value”]
FF:可用div1.getAttribute(“value”)
(5) document.getElementByName()和document.all[name]
IE;document.getElementByName()和document.all[name]均不能获取div元素
FF:可以
(6) input.type的属性
IE:input.type只读
FF:input.type可读写
(7) innerText textContent outerHTML
IE:支持innerText, outerHTML
FF:支持textContent
(8) 是否可用id代替HTML元素
IE:可以用id来代替HTML元素
FF:不可以

上一篇 下一篇

猜你喜欢

热点阅读