JavaScript知识点
js数据类型
- 原始数据类型:number、string、boolean、undefined、null、symbol、bigint
- 引用数据类型:object(包括Array,Function、Object类等)
- 区别:原始数据类型的存放在栈中,引用数据类型存放在堆中,它的地址在栈中,一般我们访问就是它的地址
闭包
- 概念:函数嵌套函数,内部函数能访问外部变量,这个变量称为自由变量
- 解决的问题:保存变量
- 带来的问题:会造成内存泄漏问题
- 闭包的应用:防抖节流
promise
- 概念:异步编程的一种解决方案,解决了地狱回调的问题
- 使用方法: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指向。
- 以函数的形式调用时,this永远都是window
- 以方法的形式调用时,this就是调用方法的对象
- 以构造函数的形式调用时,this就是新创建的对象
- 使用call和apply调用时,this就是指定的那个对象
- 在全局作用域中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
- 定义:块级格式化上下文,独立的渲染区域,不会影响边界外的元素
- 形成的条件:a.浮动 b. 非静态定位,c. overflow:hidden d. display:table
- 解决的问题:a. 浮动元素重叠 b. 父元素高度塌陷 b. margin重叠
!important > 内联样式(style) > ID选择器(id) > 类选择器(class) > 标签选择器 > 通配符
js异步 所有异步任务都是在同步任务执行完成后,从任务队列中取出依次执行。settimeout 事件监听,回调函数,promise, generator, async/await
变量可以被手动赋值null,undefined是变量定了未赋值
原型对象
- prototype:显示原型对象
- proto:隐式原型对象