今天看啥  ›  专栏  ›  貓咪是大王

前端面试题记录

貓咪是大王  · 简书  ·  · 2019-09-17 09:05

这阵子面试,我把自己遇到的面试题记录下

1.在jquery中指定一个类,如果存在就执行删除功能,如果不存在就执行添加功能,下面哪一个是可以直接完成该功能的?()

A removeClass()
B deleteClass()
C toggleClass(class)
D addClass()

答案:C

答案
2.在ES6中,下面程序运行结果输出,选项结果正确的是()

1.for(let i=0;i<12;i++;){}console.log(i)
2.const a=12;a=13;console.log(a);
3.const g={b:3};console.log(g.b);g.b=12;console.log(g.b);
4.let[head,...tail]=[1,2,3,4];console.log(tail);
A 11,13,3,12,[3,4]
B i not defined ,TypeError,TypeErrpr,4
C 11,12,3,3,4
D i not defined,TypeError,3,12,[2,3,4]

答案:D

1.let 与var不同,存在块级作用域,在for循环中声明,循环之外销毁 所以 i not defined
2.const 声明一个常量无法更改,所以TypeError
3.const定义变量不可以被重写,定义对象可以修改属性,const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,也就是只要指向这个函数,更改函数内部的属性值是可以的。


4,变量的解构赋值
3.下面代码执行后,arr的值是()
var arr = [{a:1},{}];
     arr.forEach(function(item,idx){
        item.b = idx;
})

A [{a:1},{}]
B [{a:1,b:0},{b:1}]
C [{a:1,b:1},{b:1}]
D [{a:!,b:0},{b:0}]

答案:B

forEach()方法是对数组中的每一项运行给定函数。 回调函数的参数item为数组当前项,idx为当前索引。 本题就是把数组每一项添加属性b,并且属性b的值为当前项的数组索引值。 另外,forEach()方法没有返回值,所以不能将 arr.foreach()像其他数组迭代方法那样赋值给某一个变量。

4.下列事件哪个不是由鼠标触发的事件()

A click
B contextmenu
C mouseout
D keydown

答案:D

contextmenu 是当浏览者按下鼠标右键出现菜单时或者通过键盘的按键触发页面菜单时触发的事件 [ 试试在页面中的 <body> 中加入 onContentMenu="return false" 就可禁止使用鼠标右键了

5.以下的代码的执行结果是()
for(var i=0;i<5;i++){
    setTimeout(function(){
        console.log(i+'');
    },100);
}

A 5 5 5 5 5
B 0 0 0 0 0
C 0 1 2 3 4
D 1 2 3 4 5

答案:A

6.下面哪一个返回false()

A null
B undefined
C 0
D '0'

答案:A B C

7.下列函数哪些是JavaScript的全局函数?

A encodeURI
B parseFloat
C setTimeout
D eval

答案:A B D

8.只能输入零和非零开头的数字,正确的正则表达式是()

A ^(0|[1-9][0-9]*)$

B ^(0|[1-9][1-9]*)$

C ^(0|[1-9][0-9])$

D ^+[1-9][0-9]*$

答案:A

9.关于对变量的说法,错误的是?()

A 一般使用var key的形式声明
B 由于javascript的动态特性,常常直接采取key= val的形式赋值
C 若声明而未对变量赋值,该变量的值为undefined
D var carname="Volvo";var carname;顺序执行后,caranme的值依然为Volvo

答案:B

10.前端框架 Vue.js 具备的特性()

A 指令
B 过滤器
C 内置 http 请求
D 模板采用 JSX

答案:A B

Vue需要通过添加Vue-resource来实现http请求
JSX是React自带的模板,Vue有它自带的模板,比如Vue单文件组件

11.下面关于Vue说法错误的是()

A data中某一属性的值发生改变后,视图会立即同步进行重渲染
B Vue实例创建后再添加的属性,该属性改动将不会触发视图更新
C 计算属性只有在它的相关依赖发生改变时才会重新求值
D Vue组件的data选项必须是函数

答案:A

A和B是矛盾的,Vue实例创建前已有的属性值发生改变后,视图会立即同步进行重渲渲染;而实例创建后再添加的属性发生改变时不会触发视图更新;A和B考察的是同一个知识点,很显然选A。

12.下面关于React说法错误的是()

A React DOM在渲染之前会默认过滤所有传入的值
B React DOM在渲染过程中只会更新改变了的部分
C 直接通过赋值更新React组件状态不会重新渲染组件,必须使用setState方法
D JSX是JavaScript的一种语法扩展,React的使用依赖JSX

答案:D

D选项,错在依赖,只是推荐使用,并不必须


React特点
13.前端框架 React 不具备的特性()

A 数据绑定
B 组件化
C 指令
D 没有生命周期钩子函数

答案:C

14.以下代码段输出结果
console.log("1");
setTimeout(function(){
    console.log('2');
},0);
console.log('3');

答案:132

输出1,2消失,输出3,2在全局执行输出

15.以下代码段输出结果
var str="JavaScript";
test();
function test(){
    console.log(str);
    var str = "Vue.js";
    console.log(str);
}
console.log(str);

答案:undefind vue.js javascript

第一个undefind 是因为在test函数作用域内未定义变量str。
第二个console打印的变量在函数test内已经定义了。
第三个打印的全局变量str先前就已经定义了。

16.现在有数组var arr=["js","html","css"],需要把数据转换成以下格式怎么处理?

[
{"value":"js",label:0}
{"value":"html",label:1}
{"value":"css",label:2}
]

答案:

var arr=["js","html","css"];
var tempArray = [];
for( let i =0;i<arr.length;i++){
    tempArray.push({
        "value":arr[i],
        "label":i
    });
}
console.log(JSON.stringify(tempArray));

这里用let的话,i 在循环体外就属于未定义状态,即消失,不会影响别的代码,用var的话(这里也行)循环结束后i也不会消失

17.两个div,一个左浮动,一个右浮动,外面有个div(未清除浮动),请问外面div盒子的宽跟高

答案:高为0;宽为屏幕的宽

18.计算属性(computed)跟监听器(watch)的区别

watch是观察某一个属性的变化,重新计算属性值。computed是通过所依赖的属性的变化重新计算属性值。
大部分情况下watch和computed几乎没有差别。但如果要在数据变化的同时进行异步操作或者是比较大的开销,那么watch为最佳选择。

19.计算属性(computed)跟方法(methods)的区别

我们可以使用方法达到和计算属性同样的效果
区别在于计算属性computed)具有缓存,只有当计算属性computed)所依赖的属性发生改变时,才会重新去计算,而方法(methods)每次都会去重新计算结果。




原文地址:访问原文地址
快照地址: 访问文章快照