javascript 面试题目
1. javascript的typeof返回哪些数据类型
返回六大类型 number string object function undefined
例:typeof 37==='number' typeof "str"==='string'
typeof true==='boolean' ; typeof undefined==='undefined'
typeof {a:1}==='object' ; typeof function(){}==='function'
2. 例举3种强制类型转换和2种隐式类型转换?
强制类型:(parseInt,parseFloat,number)
Boolean(value):把值转换成Boolean类型; Number(value):把值转换成数字(整型或浮点数)
String(value):把值转换成字符串。
隐式类型:(== - ===)
- split() 、join() 的区别
前者是切割成数组的形式,后者是将数组转换成字符串
Split( ) 字符串方法 将字符串用分隔符将它们连接起来返回字符串数 组
join() 数组方法 把数组的所有元素放入一个字符串。
简单地说,如果你用split(),是把一串字符串(根据某个分隔符)分成若干个元素存放在一个数组里。
而join是把数组中的字符串连接成一个长串,可以大体上认为是split的逆操作。
4. 数组方法pop() push() unshift() shift()
push()像数组尾部追加元素 pop()尾部删除 unshift()头部添加 shift()头部删 除
例 var Array=["A" ,"J"];
Array.push("L");//尾部增加
Array.pop();//尾部删除
Array.unshift("Q") //头部追加
Array.shift() //头部删除
console.log(Array) //最后数组里面的元素还是原来的
- 事件绑定和普通事件有什么区别
区别 普通添加事件的方法不支持添加多个事件,最下面的事件会覆盖上面的,
而事件绑定(addEventListener)方式添加事件可以添加多个。
例子
var btn = document.getElementById("btn");
btn.onclick = function () { alert('普通事件1');//不执行 }
btn.onclick = function () { alert('普通事件2');//弹出 }
// 上面用普通方法添加两个事件,下面用事件绑定添加两个事件。 btn.addEventListener('click', function () { alert('事件绑定1');//弹出 },false); btn.addEventListener('click', function () { alert('事件绑定2');//弹出 },false);
- IE和DOM事件流的区别
IE采用冒泡型事件 Netscape使用捕获型事件 DOM使用先捕获后冒泡型事件
1.执行顺序不一样、
冒泡型事件模型: button->div->body (IE事件流)
捕获型事件模型: body->div->button (Netscape事件流)
DOM事件模型: body->div->button->button->div->body (先捕获后冒泡)
2.参数不一样
IE使用:
[Object].attachEvent("name_of_event_handler", fnHandler); //绑定函数
[Object].detachEvent("name_of_event_handler", fnHandler); //移除绑定
DOM使用:
[Object].addEventListener("name_of_event", fnHandler, bCapture); //绑定函数
[Object].removeEventListener("name_of_event", fnHandler, bCapture); //移除绑定
3.事件加不加on
Dom事件通过addEventListener添加元素监听事件,第一个参数是事件名称没有on开头(onclick要写成click)
4.this指向问题
IE下利用attachEvent注册的处理函数调用时this指向不再是先前注册事件的元素,这时的this为window
dom通过addEventListener注册的处理函数调用时this指的是先前注册事件的元素
7. IE和标准下有哪些兼容性的写法
Var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
Var target = ev.srcElement||ev.target
8. call和apply的区别
call, apply作用就是借用别人的方法来调用,就像调用自己的一样.
call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
则是直接的参数列表,主要用在js对象各方法互相调用的时候,使当前this实例指针保持一致,或在特殊情况下需要改变this指针。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
apply方法:
语法:apply([thisObj[,argArray]])
apply:最多只能有两个参数——新this对象和一个数组
更简单地说,apply和call功能一样,只是传入的参数列表形式不同:如 func.call(func1,var1,var2,var3)对应的apply写法为:
func.apply(func1,[var1,var2,var3])
9. b继承a的方法
定义a 并扩展其原型属性
function a(){
}
a.prototype.myname="猫";
a.prototype.myage=18;
a.prototype.study=function () {
alert(111)
};
var m=new a();
m.study();
document.write(m.myname)
function b() {
};
b继承a的方法
b.prototype=a.prototype;
var m1=new b();
m1.study();
document.write(m1.myage)
- 如何阻止事件冒泡和默认事件
阻止默认事件
1.在javescript中,return flase可以阻止默认事件,但必须加在onmousedown事件中,down的事儿干完了,再加return flase。
2、在自定义函数addEvent中,return flase会失效,请使用事件对象来进行阻止。ev.preventDefault();//阻止默认事件。
3、、在低版本的IE中这些都不好使,需在onmousemove事件中调用obj.setCapture&&obj.setCapture();并且在onmouseup事件中清除obj.releaseCapture&&obj.releaseCapture();
阻止事件冒泡:
1、当子级的事件触发时,其父级的事件也被触发了。
2、冒泡跟它们在页面中的显示位置无关,只要在html结构中两者是属于父子关系,就存在事件冒泡。
3、阻止事件冒泡必须加在子级的身上。通过事件对象进行阻止。ev.cancelBubble=true;