欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2018前端必考面试题总结6

程序员文章站 2022-03-01 12:39:36
...

前端必考面试题总结6

  • JavaScript的typeof返回哪些数据类型?

    字符串(String)—–>typeof返回的值是string
    数字(Number)——>typeof返回的值是number(NaN,infinity等特殊的数字类型返回值也是number);
    布尔(Boolean)——>typeof返回的值是Boolean
    数组(Array)——>typeof返回的值是object
    日期(Date)——>typeof返回的值是object
    对象(Object)——>typeof返回的值是object
    空(Null)——>typeof返回的值是object
    未定义(undefined)——>typeof返回的值是undefined(不存在的变量、函数或者undefined等返回的值都是undefined);
    function——>typeof返回的值是function
    symbol——>typeof返回的值是symbol(ES6引入了一种新的原始数据类型symbol,表示独一无二的值)。

  • 列举3种强制类型转换和两种隐式类型转换

    强制类型转换:
    Boolean(value):把值转换成Boolean类型;
    Number(value):把值转换成数字;
    String(value):把值转换成字符串。
    隐式类型转换:
    JavaScript在运算之前会进行隐式类型转换,所以-,*,%等算术运算符都会把操作数转换成数字的(“+”号就有点不一样了,有些情况下,他是算术加号,有些情况下,是字符串连接符,具体要看它的操作数);
    JavaScript在做比较时也会进行隐式类型转换,例如:字符串和数字比较时,字符串转数字;数字与布尔值比较时,布尔转数字;字符串和布尔值比较时,两者转数字。

  • split(),join()的区别

    split()获取一个字符串,然后在分隔符处将其断开,从而返回一批字符串。
    join()获取一批字符串,然后用分隔符字符串将他们连接起来,从而返回一个字符串。
    这两个函数之间主要区别在于join()可以使用任何分隔符字符串将多个字符串连接起来,而split只能使用一个字符分割符将字符串断开。
    简单的说,如果你用split()是把一串字符(根据某个分隔符)分成若干个元素存放在一个数组里。而join()是把数组中的字符串连成一个长串,可以大体上认为是split的逆操作。

  • 事件绑定和普通事件有什么区别?

    普通添加事件的方法不支持添加多个事件,最下面的事件会覆盖上面的,而事件绑定(addEventListener)方式添加事件可以添加多个。

            //普通添加事件的方法,执行下面的代码只会alert 2
            var btn1=document.getElementById("hello");
            btn1.onclick=function(){
                alert(1);
            }
            btn1.onclick=function(){
                alert(2);
            }
            //事件绑定方式添加事件,执行下面的代码会先alert 1再alert 2
            var btn2=document.getElementById("hi");
            btn2.addEventListener("click",function(){
                alert(1);
            },false);
            btn2.addEventListener("click",function(){
                alert(2);
            },false);


  • IE和DOM事件流的区别

(1)IE采用冒泡型事件,DOM使用先捕获后冒泡型事件,Netscape使用捕获型事件。

<body>
<div>
<button>点击这里</button>
</div>
</body>

冒泡型事件模型: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].attachEventListener(“name_of_event”,fnHandler,bCapture);//绑定函数
[object].removeEventListener(“name_of_event”,fnHandler,bCapture);//移除绑定
bCapture参数用于设置绑定的阶段,true为捕获阶段,false为冒泡阶段。

            function addEventHandler(object,eventType,fnHandler){
                if(object.addEventListener){//DOM
                    object.addEventListener(eventType,fnHandler,false);
                }else if(object.attachEvent){//IE
                    object.attachEvent("on"+eventType,fnHandler);
                }else{//others
                    object["on"+eventType]=fnHandler;
                }
            };

            function removeEventHandler(object,eventType,fnHandler){
                if(object.removeEventListener){//DOM
                    object.removeEventListener(eventType,fnHandler,false);
                }else if(object.detachEvent){//IE
                    object.detachEvent("on"+eventType,fnHandler);
                }else{//others
                    object["on"+eventType]=null;
                }
            };

            addEventListener(oDiv,"click",function(){
                alert("clicked");
            });

(3)事件对象定位(获取)
IE:事件对象是window对象的一个属性event,event只能在事件发生时访问,事件处理函数执行完毕,事件对象被销毁。
DOM:event对象必须作为唯一的参数传递给事件处理函数,且必须为第一个参数。
(4)获取目标(target)
IE:var oTarget=oEvent.srcElement;
DOM:var oTarget=oEvent.target;
(5)阻止事件默认行为
IE:oEvent.returnValue=false;
DOM:oEvent.preventDefault();

//屏蔽网页右键菜单
            document.body.oncontextmenu=function(oEvent){
                if(document.all){
                    oEvent=window.event;
                    oEvent.returnValue=false;
                }else{
                    oEvent.preventDefault();
                }
            }

(6)停止事件复制(冒泡)
IE:oEvent.cancelBubble=true;
DOM:oEvent.stopPropagation();
(7)this问题:IE6-8中当方法执行的时候,方法中的this不是当前的元素box,而是window。

相关标签: 前端面试题