首页 > 自考资讯 > 高考百科

10 道有趣的前端面试题及解析?常见前端面试题及答案

小条 2024-10-14

每个问题都包含有趣的知识点。想一想,然后尝试分析你的答案。

01.原型?

输出是什么?

const 动物=函数(){

this.type='动物'

}

const Cat=函数(){

this.name='猫'

}

Cat.prototype=new Animal()

const cat=new Cat();

console.log(cat.__proto__===Cat.prototype)

console.log(Cat.prototype.__proto__===Animal.prototype)

分析与解答

看看下面的图片你就知道答案了。

truetrue 46a2454b54014a11bc2462946b811523~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729453387&x-signature=7svMuiDhxV39riUwfFGMnqT8rb8%3D02 nums 的值是多少?

输出是什么?

常量len=5

常数=[]

for (var i=0; i len; i++);{

nums.push(i + 1)

}

控制台.日志(数字)

分析与解答

首先,我认为这个问题并不能考验考生的编程能力。他正在检查候选人是否有眼睛问题。如果您没有注意到分号,您可能会认为nums 是[0, 1, 2, 3, 4]。

常量len=5

常数=[]

for (var i=0; i len; i++);

//此时我已经6岁了

{

nums.push(i + 1)

}

console.log(nums) //[ 6 ]

03. 陷阱排序要注意什么?

输出是什么?

常量arr=[1, 30, 4, 21, 100000]

console.log(arr.sort())

分析与解答

直觉上我认为答案应该是[1, 4, 21, 30, 100000],但是由于我没有通过比较函数,所以结果和我想象的不一样。

来自MDN:

提示:指定定义排序顺序的函数。如果省略,数组元素将转换为字符串并根据每个字符的Unicode 代码点值进行排序。

常量arr=[1, 30, 4, 21, 100000]

//数组元素转换为字符串并根据每个字符的Unicode 代码点值进行排序。

const charCodesOfArr=arr.map((num)=`${num}`.charCodeAt()) //[49, 51, 52, 50, 49]

//所以答案是[1, 100000, 21, 30, 4]

console.log(arr.sort())

04.ES6模块导入导出知识

我认为这对你来说太容易了。就写答案吧!

//a.js

exportdefault()='你好媒体'

导出常量名称='fatfish'

//b.js

import * 从'./a.js' 导入数据

console.log(data) //{ default: function default (), name: 'fatfish' }

05.使用对象作为属性键

输出是什么?

常数x={}

常量y={ key: 'y' }

常量z={ key: 'z' }

x[y]='肥鱼'

x[z]='中'

控制台.log(x[y])

分析

如您所知,当您使用对象作为属性键时,最终会得到如下结果:实际的键是[object Object]。

const objKey={ key: 'Fatfish' }

常量对象={

[ objKey ]: '肥鱼'

}

console.log(obj) //{ [object object]: 'fatfish' }

接听电话b139e8b0eea345ee8a0ac6f36cc95049~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729453387&x-signature=CcF82uYoWNU035YmcOZvs7n5lWg%3D

那么答案是什么呢?你可能会认为这可能是一条肥鱼,但最终的答案是中等。

常数x={}

常量y={ key: 'y' }

常量z={ key: 'z' }

x[y]='Fatfish' //x={ [Object Object]: 'Fatfish' }

x[z]='中' //x={ [Object Object]: '中' }

console.log(x[y]) //中等

06. for循环中的SetTimeout?

输出是什么?

for (var i=0; i 3; i++) {

设置超时(()={

控制台.log(i)

}, 1000)

}

分析与解答

你想在1秒后打印0、1、2吗?不,1秒后1变成3,所以3会连续打印3次。

for (var i=0; i 3; i++) {

设置超时(()={

控制台.log(i) //3 3 3

}, 1000)

}

如果我想在1秒后输出0,1,2怎么办?

//1.使用let代替var

for (令i=0; i 3; i++) {

设置超时(()={

控制台.log(i) //0 1 2

}, 1000)

}

//2. 使用闭包

for (var i=0; i 3; i++) {

((n)={

设置超时(()={

控制台.log(n) //0 1 2

}, 1000)

})(我)

}

07.你知道基本的转换规则吗?

输出是什么?

控制台.log(+true)

console.log(!'Fatfish')

分析与解答

//+ 运算符

将布尔值转换为数字,true转换为1,false转换为0。

console.log(+true) //1

//字符串“fatfish”是一个真值。使用! 将导致错误。

console.log(!'Fatfish')

08.变量定义的陷阱!

输出是什么?

常量fn=()={

设x=y=1000

x++

返回

}

fn()

console.log(x的类型)

console.log(y类型)

分析与解答

大概99%的工程师不知道如何定义全局变量,所以他们认为答案应该是*未知。

常量fn=()={

//设置x=y=1000

//相当于下面的代码

假设x=1000

//注意,我们在这里定义了一个全局变量y

y===1000

x++

返回

}

fn()

console.log(typeof x) //未定义

console.log(typeof y) //y 等于1000,所以typeof y 是一个数字

09. JavaScript 中的变量提升是什么?

输出是什么?

var x='胖鱼'

常量fn=()={

//第3部分

控制台.log(x)

var x='中'

//第4部分

控制台.log(x)

}

//第1部分

控制台.log(x)

fn()

//第2部分

控制台.log(x)

分析与解答

第一个问题和第二个问题的答案很简单,大家都知道答案。但#3 和#4 就没那么容易了。

特别是因为3 涉及变量提升问题。

var x='胖鱼'

常量fn=()={

//第3部分

//当使用var 声明变量时,就会发生变量提升。

var x=未定义

//因此,此时x 的值是未定义的

控制台.log(x)

//var x='中'

x='中'

//第4部分

//x 的值为中等

控制台.log(x)

}

//第1部分

console.log(x) //胖鱼

fn()

//第2部分

console.log(x) //胖鱼

10. 阵列有多长?

输出是什么?

常量数=[10, 18, 0, 11, 9]

数字长度=0

控制台.log(数字[3])

分析与解答

答案是11吗?如果是11,说明你还没有完全理解数组的长度属性。

使用“nums.length=0”意味着“nums”将为空。

常量数=[10, 18, 0, 11, 9]

nums.length=0 //nums 变为[]。

console.log(nums[3]) //未定义

终于

以上就是我今天分享的10道前端面试题。我认为这包含您需要的内容。也希望你能从中学到新的知识。

资料来源:Web 前端开发

版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。

猜你喜欢