JavaScript知识点

·

2 min read

js数据类型

  1. 原始数据类型:number、string、boolean、undefined、null、symbol、bigint
  2. 引用数据类型:object(包括Array,Function、Object类等)
  3. 区别:原始数据类型的存放在栈中,引用数据类型存放在堆中,它的地址在栈中,一般我们访问就是它的地址

闭包

  1. 概念:函数嵌套函数,内部函数能访问外部变量,这个变量称为自由变量
  2. 解决的问题:保存变量
  3. 带来的问题:会造成内存泄漏问题
  4. 闭包的应用:防抖节流

promise

  1. 概念:异步编程的一种解决方案,解决了地狱回调的问题
  2. 使用方法:new Promise((resolve,reject) => { resolve(); reject(); })里面有多个resovle或者reject只执行第一个。如果第一个是resolve的话后面可以接.then查看成功消息。如果第一个是reject的话,.catch查看错误消息。

跨域是指浏览器的同源策略是不允许执行其他网站上的脚本,只要协议,主机地址,端口其中之一不同就算跨域。跨域一般的解决方法时Jsonp,script标签不受同源策略影响;前台还可以设置代理proxy;后端也可以设置CROS,Access-Control-Allow-Origin;此外还有nginx的反向代理。

call、apply和bind

相同点:都是函数方法,都能改变this指向 不同点: call()与apply() 区别就是call()方法接受的是参数列表,而apply()方法接受的是一个参数数组。 call()与bind() 区别call()会立即调用新指向的函数,bind()不会立即调用会返回新指向的函数,需要手动调用

function fun(){}
let newThis = { name : "a"}
fun.call(newThis, "1", "2")
fun.apply(newThis,["1", "2"])
let newFun = fun.bind(newThis, "1", "2")
newFun()

在类中的函数叫方法,不在类中的函数叫函数。

this在运行时确定,即指向函数调用对象,除非利用call、apply、bind等方法改变this指向。

  1. 以函数的形式调用时,this永远都是window
  2. 以方法的形式调用时,this就是调用方法的对象
  3. 以构造函数的形式调用时,this就是新创建的对象
  4. 使用call和apply调用时,this就是指定的那个对象
  5. 在全局作用域中this代表window

箭头函数的this指向于函数作用域所在的对象

不可以当作构造函数

不可以使用arguments对象,该对象在函数体内不存在。

Object.assign()是一种比较简单的深拷贝方法,但只会拷贝第一层

offsetHeight = 内容高度 + padding + border

clientheight = 内容高度 + padding

scrollHeight = 内容实际尺寸 + padding

childNodes属于NodeList集合,它会返回所有的子节点,包括文本、标签、注释等等。

children数据HTMLCollection集合,它会返回所有HTML元素节点。

childNodes包含children。

Ajax 是一个技术统称,是一个概念模型,它囊括了很多技术,并不特指某一技术,它很重要的特性之一就是让页面实现局部刷新。

Ajax 是一种思想,XMLHttpRequest 只是实现 Ajax 的一种方式

Fetch 是一个 API,它是真实存在的,它是基于 promise 的。

Axios 是一个基于 promise 封装的网络请求库,它是基于 XHR 进行二次封装。

多标签页通信

1.localStorage实现通信 2.使用websocket 3.SharedWorker 4.使用cookie + setInterval

Array.from() 将类数组转为真正的数组

String Number Boolean Null undefined symbol bigInt Object

cookie 有存储大小限制,4KB 左右。

浏览器每次请求会携带 cookie 在请求头中。

字符编码为 Unicode,不支持直接存储中文。

数据可以被轻易查看。

// 创建 axios 请求实例
const userAxios = axios.create({
  baseURL: "", // 基础请求地址
  timeout: 10000, // 请求超时设置
  withCredentials: false, // 跨域请求是否需要携带 cookie
});
// 创建请求拦截
userAxios.interceptors.request.use((config)=>{},(err)=>{})
// 创建响应拦截
userAxios.interceptors.response.use((res)=>{},(err)=>{})

dom 文档对象模型 浏览器加载html后会把html解析成dom

bom 浏览器对象模型

判断数据类型

1.typeof只能判断基本类型 2.intanceof 原生数据类型判断 3。object.prototype.tostring.call() 返回值都是[Object xxx]格式 4.arr.constrctor===Array

bfc

  1. 定义:块级格式化上下文,独立的渲染区域,不会影响边界外的元素
  2. 形成的条件:a.浮动 b. 非静态定位,c. overflow:hidden d. display:table
  3. 解决的问题:a. 浮动元素重叠 b. 父元素高度塌陷 b. margin重叠

!important > 内联样式(style) > ID选择器(id) > 类选择器(class) > 标签选择器 > 通配符

js异步 所有异步任务都是在同步任务执行完成后,从任务队列中取出依次执行。settimeout 事件监听,回调函数,promise, generator, async/await

变量可以被手动赋值null,undefined是变量定了未赋值

原型对象

  • prototype:显示原型对象
  • proto:隐式原型对象