javascript 面试题目

1. javascripttypeof返回哪些数据类型

 返回六大类型  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):把值转换成字符串。

隐式类型:(== - ===)

  1. 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//最后数组里面的元素还是原来的

 

  1. 事件绑定和普通事件有什么区别

区别 普通添加事件的方法不支持添加多个事件,最下面的事件会覆盖上面的,

而事件绑定(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);

 

  1. IEDOM事件流的区别

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. callapply的区别

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. 如何阻止事件冒泡和默认事件

 

阻止默认事件

  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;

 

 

 

原文地址:https://www.cnblogs.com/yaomengli/p/6921918.html