cvte前端笔试题

1 以下代码运行结果为

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

答案:Kevin

首先,调用全局函数setPerson,传入person,此时person是   var person={name:"alan"};传入以后,person.name="kevin";覆盖的person的name 属性。所以最终答案为Kevin
2  以下代码输出的结果是

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

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

map()方法返回一个新数组,数组中的元素为原始元素经过函数处理后输出的元素。不会改变原始数组

map()按照原数组顺序一次处理数组元素

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

 <style>
    .ce1{
     line-height:150%;
    }
    .ce2{
     line-height:1.5;
    }
        .ce{
        font-size:28px;
        line-height:10px;
        }
        .line{
         line-height:50px;
         background:#ccc;
        }
    </style>
</head>
<body>
<div class="ce1">我的lineheight为150%</div>
<div class="ce2">我的lineheight为1.5</div>
<div class="ce">我是28px的文字,我的行高为10px</div>
<span class="line">我是inline</span>
</body>

运行结果为

 ACD 正确,对inline元素设置line-height属性也会生效。

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)));
    }

代码分析:

(1)JSON.stringify:将JS数据结构转化为JSON字符串

语法如下:

JSON.stringify(value[, replacer [, space]])

传入一个参数

JSON.stringify({“name”:”Good Man”,”age”:18})

返回一个字符串”{“name”:”Good Man”,”age”:18}”。

第二个参数可以是函数,也可以是一个数组

函数:序列化过程中的每个属性都会被这个函数转化和处理。这个函数接受两个参数,一个键名,一个是属性值,函数必须针对每一个原来的属性值都要有新属性值的返回。

数组:只有包含在这个数组中的属性才会被序列化到最终的JSON字符串中。只要在这个提供的数组中找不到的属性就不会被包含进去,而这个数组中存在但是源JS对象中不存在的属性会被忽略,不会报错。相当于一个筛选key的作用。

null:那作用上和空着一样,但是不想设置第二个参数,只是想设置第三个参数的时候,就可以设置第二个参数为null

 第三个参数用于美化输出——不建议用 

space:就是用什么来做分隔符的

(2)JSON.parse :将JSON字符串解析为JS数据结构

语法:JSON.parse(text[, reviver])  

第一个参数 即JSON字符串不是合法的字符串的话,那么这个函数会抛出错误

可选的第二个参数 这个参数必须是一个函数,这个函数作用在属性已经被解析但是还没返回前,将属性处理后再返回

举例如下:

var friend={  

   "firstName": "Good",

   "lastName": "Man",

   "phone":{"home":"1234567","work":["7654321","999000"]}

};
var friendAfter=JSON.stringify(friend);  
 console.log(typeof(friendAfter));
    console.log(friendAfter);

 运行结果为:

string
 {"firstName":"Good","lastName":"Man","phone":{"home":"1234567","work":["7654321","999000"]}}

//再将其解析出来,在第二个参数的函数中打印出key和value
console.log(JSON.parse(friendAfter));

JSON.parse(friendAfter,function(k,v){  

   console.log(k);

   console.log(v);

   console.log("----");

});

运行结果为:

 

 

firstName  

Good  

----

lastName  

Man  

----

home  

1234567  

----

0  

7654321  

----

1  

999000  

----

work  

[]

----

phone  

Object  

----

 

Object  

----

仔细看一下这些输出,可以发现这个遍历是由内而外的,这个由内而外指的是对于复合属性来说的,通俗地讲,遍历的时候,从头到尾进行遍历,如果是简单属性值(数值、字符串、布尔值和null),那么直接遍历完成,如果是遇到属性值是对象或者数组形式的,那么暂停,先遍历这个子JSON,而遍历的原则也是一样的,等这个复合属性遍历完成,那么再完成对这个属性的遍历返回。

你可以注意到上面例子最后一组输出看上去没有key,其实这个key是一个空字符串,而最后的object是最后解析完成对象,因为到了最上层,已经没有真正的属性了。

答案:0,1,2,3,4

6 以下代码的运行结果为

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

答案:4,4,4,4,4

7 以下代码运行结果为

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

答案:Fire,wind,Rain

8 以下代码运行结果为

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

答案:changed     executed

9 能阻止事件冒泡的方法

A  e.preventDefault()

B event.cancelBubble = true

C event.returnValue = false

D e.stopPragation()

答案: B D

分析:DOM中的事件对象   event.stopPropagation()可以阻止事件的传播.,取消进一步的事件冒泡或者捕获

IE中的事件对象   cancelBubble属性值为true,可以取消事件冒泡。

preventDefault() 阻止事件的默认行为,只有cancelabel属性的值设为true时,才可以使用preventDefalut.

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

分析:  DOM2级事件绑定:  addEventListener有三个参数:第一个参数表示事件名称(不含 on,如 “click”);第二个参数表示要接收事件处理的函数;第三个参数为 useCapture。

IE用了attachEvent(),和detachEvent(),接收两个参数,事件名称和事件处理程序函数。由于IE8及以前只支持事件冒泡;通过attachEvent()添加的事件处理程序都会被添加到冒泡阶段。

attachEvent(event, function):event 必须。字符串,指定事件名。注意: 使用 “on” 前缀。 例如,使用 “onclick” ,而不是使用 “click”

btn.detachEvent("onclick",handler);   /*IE下移除侦听器*/

事件触发器也是分为高级浏览器和IE两派,而dispatchEvent正是用于高级浏览器的事件触发。 dispatchEvent是作为高级浏览器(如chrome、Firfox等)的事件触发器来使用的。

 

 

 

  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值