最后
小编综合了阿里的面试题做了一份前端面试题PDF文档,里面有面试题的详细解析
虽只说了一个公司的面试,但我们可以知道大厂关注的东西并举一反三,通过一个知识点延伸到另一个知识点,这是我们要掌握的学习方法,小伙伴们在这篇有学到的请评论点赞转发告诉小编哦,谢谢大家的支持! 开源分享:docs.qq.com/doc/DSmRnRG…
let value1=Symbol('foo')
console.log(typeof value1);
//结果symbol
let value2=Symbol('foo')
console.log(value1===value2);
//false
- Map与简单对象集合很相似
-
里面传入数据类型为const m=new Map([[true,1],[function(){},{}]])
-
m.size获取m里面数据个数
-
m.delete()用来删除某个数据
-
m.set()用来添加数据
-
m.get()用来获取某个数据
-
m.clear()用来清除全部数据
-
m.has()用来判断是否有某个数据
const m=new Map([[true,1],[function(){console.log(1);},{}]])
console.log(m.get(true));
//1
console.log(m.has(true));
//true
m.set({name:'jack'},1)
console.log(m.size);
//3
m.clear()
console.log(m.size);
//0
- Set与数组集合很相似,但他不允许出现相同的值
-
语法:const s=new Set([1,2,3,function(){},true])
-
s.size获取s里面数据个数
-
s.add()用来添加数据
-
s.delete()用来删除某个数据
-
s.clear()用来删除数组
-
s.forEach()用来遍历数组
-
也可以用…展开运算符
const s=new Set([1,2,3,function(){},true])
console.log(s.size);
//5
s.add(10)
console.log(s.size);
//6
s.forEach(item=>console.log(item))
//1
//2
//3
//f(){}
//true
//10
let a=[...s]
console.log(a);
//[1,2,3,f(){},true,10]
s.clear()
console.log(s.size);
//0
=======================================================================
-
概念:设计模式代表了最佳实践,是面向对象编程人员总结出来的
-
分类
-
创建型模式:创建对象同时隐藏创建逻辑的方式
-
结构型模式:关注类和对象,继承的概念被用来组合接口和定义组合对象获得新功能的方式
-
行为型模式:该设计模式更关注对象之间的通信
-
该模式属于创建型模式,提供了创建对象的最佳方式
-
该模式能保证整个应用只有一个对象的存在
-
核心代码
function Person(){}
//定义一个空值
let instance=null
function signPerson(){
if(instance==null){
//在它为空时给他赋一个值,不为空就返回instance
instance=new Person()
}
return instance
}
const p1=signPerson()
const p2=signPerson()
console.log(p1===p2);
//true
- 示例
class CreatDiv{
//static静态方法,该方法不会被实例继承,可以直接通过类调用
static getInstance(){
if(this.instance==null){
this.instance=new CreatDiv()
}
return this.instance
}
constructor(){
this.instance=null
this.divEle=document.createElement('div')
document.body.appendChild(this.divEle)
}
init(text){
this.divEle.innerHTML=text
}
}
let div1=CreatDiv.getInstance()
div1.init('第一条测试信息')
//页面显示第一条测试信息
let div2=CreatDiv.getInstance()
div2.init('第二条测试信息')
//会覆盖第一条,页面显示第二条测试信息
-
组合模式就是把几个构造函数组合在一起,然后通过接口统一启动
-
核心代码
class Compose{
//定义一个空数组用于装所有执行的函数
constructor(){
this.compose=[]
}
//向数组里添加要执行函数
add(task){
this.compose.push(task)
}
//一个执行任务的方法
execute(){
this.compose.forEach(item=>item.init())
}
}
- 实例代码
class Compose{
//定义一个空数组用于装所有执行的函数
constructor(){
this.compose=[]
}
//向数组里添加要执行函数
add(task){
this.compose.push(task)
}
//一个执行任务的方法
execute(){
this.compose.forEach(item=>item.init())
}
}
class GetSay{
init(){
console.log('说话');
}
}
class GetEat{
init(){
console.log('吃饭');
}
}
const c=new Compose()
c.add(new GetSay())
c.add(new GetEat())
c.execute()
//说话
//吃饭
-
当一个对象被改变时,所有依赖它的对象都将被改变,就不用直接去改变对象
-
代码
class Subject{
constructor(name){
this.name=name
this.list=[]
}
//添加
add(observer){
this.list.push(observer)
}
//更新
updateMessage(message){
this.list.forEach(item=>item.nodify(this.name+message))
}
JavaScript
-
js的基本类型有哪些?引用类型有哪些?null和undefined的区别。
-
如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种)
-
Object是引用类型嘛?引用类型和基本类型有什么区别?哪个是存在堆哪一个是存在栈上面的?
-
JS常见的dom操作api
-
解释一下事件冒泡和事件捕获
-
事件委托(手写例子),事件冒泡和捕获,如何阻止冒泡?如何组织默认事件?
-
对闭包的理解?什么时候构成闭包?闭包的实现方法?闭包的优缺点?
-
this有哪些使用场景?跟C,Java中的this有什么区别?如何改变this的值?
-
call,apply,bind
-
显示原型和隐式原型,手绘原型链,原型链是什么?为什么要有原型链
-
创建对象的多种方式
-
实现继承的多种方式和优缺点
-
new 一个对象具体做了什么
-
手写Ajax,XMLHttpRequest
-
变量提升
-
举例说明一个匿名函数的典型用例
-
指出JS的宿主对象和原生对象的区别,为什么扩展JS内置对象不是好的做法?有哪些内置对象和内置函数?
-
attribute和property的区别
-
document load和document DOMContentLoaded两个事件的区别
-
JS代码调试
-
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】