web前端笔试题练习-2

大熙哥 2021年08月12日 133次浏览

1、以下代码运行结果为?

var setPerson=function(person){ 
person.name="kevin";
 person={name:"nick"}; 
}; 
var person={name:"alan"}; 
setPerson(person); 
alert(person.name);

答案:kevin
函数setPerson中,person.name是改变对象的属性,而person={name:"nick"}是赋值了新对象,原对象将不会改变。

2、以下代码运行结果为?

  var array1=Array(3);
    array1[0]=2;
   var result=array1.map(element => "1");
   console.log(result);

答案:['1', null, null]

3、以下代码运行结果为?

 var a= 2018<0 || typeof(2018+"");
    console.log(a);

答案:string
第一项为true,则返回第一项的结果,如果第一项是false,则不论第二项是什么,都返回。本题第二项为string。

4、下列关于line-height,说法正确的是

A line-height设置150%或1.5都是一样的效果

B 在Inline元素设置line-height不会生效

C 设定line-height的值少于font-size 的值,元素高度为fontsize的值

D line-height属性会被继承

答案:A C D

5、以下代码的运行结果为

for(var i={j:0};i.j <5;i.j++){
       (function(i){
       setTimeout(function(){console.log(i.j)},0);
       })(JSON.parse(JSON.stringify(i)));
    }

答案:0 1 2 3 4

此处陷阱多多,首先给你整了一个活i赋值的是对象,大家都知道对象是引用类型的,此处下面还使用了立即执行的函数表达式这可以使当前代码块形成闭包,从而实现setTimeout的变量是独立的不会互相影响,此时我们可能以为对象是引用类型,实际上闭包也解决不了问题,但是下面还有一句JSON.parse(JSON.stringify(i))相当与是建立了一个新的对象,此时就不会产生问题,将会正常的 0 1 2 3 4 输出。

6、以下代码的运行结果为

   var elements = ['Fire','wind','Rain'];
    console.log(elements.join(','));

答案:Fire,wind,Rain

7、以下代码运行结果为

 var execFunc = function(){
        console.log("executed");
    };
    setTimeout(execFunc,0);
    console.log("changed");
    execFunc = function(){
        console.log("another executed");
    }

这题考的也很多,互联网行业真的卷。首先开头定义了execFunc函数方法,第二部setTimeout是宏服务应当主程序代码执行完毕后再执行。所以会先打印changed,并且赋值新function到变量,此时如果大意了就错了,显然setTimeout的形参已经作为对象传递进去了,要想改变只能改变对象的属性,因为对象是引用类型,这边重新赋值execFunc并不会改变已经赋值到形参的那个对象,所以打印executed。

8、能阻止事件冒泡的方法

A e.preventDefault()

B event.cancelBubble = true

C event.returnValue = false

D e.stopPragation()

答案: B D
阻止就选cancel、stop

10、下面选项中给submitan按钮绑定click事件,正确的是

A btn.addEventListener("click",fun,false);

B btn.dispatchEvent("click",fun,true);

C btn.attachEvent("onclick",fun);

D btn.detachEvent("onclick",fun);

答案:ABC
添加事件监听addEventListener
高级浏览器的事件触发dispatchEvent
IE的添加事件监听attachEvent(event, function)
IE的移除事件监听detachEvent("onclick",handler)

11、原型链题目

function f1(){}

typeof f1.prototype;
typeof Object.prototype;
typeof Function.prototype.prototype;
typeof f1.prototype.constructor
typeof Function.prototype

object
object
undefined
function
Function

Function.prototype和其它类型的prototype属性不一样,像前两个例子一样,f1.prototype和Object.prototype以及其它类型的prototype都是Object,而Function比较特殊,Function.prototype的类型是Function。

12、原型链题目2

function Person() {}

Person.prorotype.sayName = function() {
    console.log(this.name);                    //  在原型上添加方法
}

var person1 = new Person();
var person2 = new Person();

person1.name = "Nicholas";                  //  在实例上添加属性
person2.name = "Greg";                       //  在实例上添加属性

person1.sayName();                             //  Nicholas
person2.sayName();                             //  Greg

Nicholas
Greg

12、原型链题目3

Function.prototype.__proto__ === Object.prototype;    // true

答案:true

除了Object.prototype之外的所有对象都会有[[Prototype]],也就是__proto__属性,会指向实例化出这个对象的构造函数的原型,原型链的头就是Object.prototype,而这里Function.prototype其实就是指向了Object.prototype。但是有的面试官会说原型链的头部是null,因为Object.prototype.proto 是null,这才是最顶层。