每个问题都包含有趣的知识点。想一想,然后尝试分析你的答案。
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 02 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' }
接听电话
那么答案是什么呢?你可能会认为这可能是一条肥鱼,但最终的答案是中等。
常数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 前端开发
版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。