JS基础23,满满的干货

28 阅读4分钟

最后

小编综合了阿里的面试题做了一份前端面试题PDF文档,里面有面试题的详细解析

虽只说了一个公司的面试,但我们可以知道大厂关注的东西并举一反三,通过一个知识点延伸到另一个知识点,这是我们要掌握的学习方法,小伙伴们在这篇有学到的请评论点赞转发告诉小编哦,谢谢大家的支持! 开源分享:docs.qq.com/doc/DSmRnRG…


let value1=Symbol('foo')

console.log(typeof value1);

//结果symbol

let value2=Symbol('foo')

console.log(value1===value2);

//false

复杂数据类型


  1. 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

  1. 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

设计模式

=======================================================================

  1. 概念:设计模式代表了最佳实践,是面向对象编程人员总结出来的

  2. 分类

  • 创建型模式:创建对象同时隐藏创建逻辑的方式

  • 结构型模式:关注类和对象,继承的概念被用来组合接口和定义组合对象获得新功能的方式

  • 行为型模式:该设计模式更关注对象之间的通信

单例模式


  1. 该模式属于创建型模式,提供了创建对象的最佳方式

  2. 该模式能保证整个应用只有一个对象的存在

  3. 核心代码

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

  1. 示例

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('第二条测试信息')

//会覆盖第一条,页面显示第二条测试信息

组合模式


  1. 组合模式就是把几个构造函数组合在一起,然后通过接口统一启动

  2. 核心代码

class Compose{

//定义一个空数组用于装所有执行的函数

constructor(){

this.compose=[]

}

//向数组里添加要执行函数

add(task){

this.compose.push(task)

}

//一个执行任务的方法

execute(){

this.compose.forEach(item=>item.init())

}

}

  1. 实例代码

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()

//说话

//吃饭

观察者模式


  1. 当一个对象被改变时,所有依赖它的对象都将被改变,就不用直接去改变对象

  2. 代码

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代码调试

  • 开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】