前端总结之javaScript

97 阅读5分钟

这里对于一些常用的javaScript进行一个总结。毕竟是2024刚开年吗,一切都是全新的开始。在这个文章的开头,也希望能看到这篇文章的人,在美好的2024年,都能心想事成,得偿所愿。虽然前端的框架一直在更新迭代的很快,但是javaScript一直是考察的底层,也是最需要掌握的基础。所谓房子要建的好,那么底层的架子一定要搭的好搭的稳。下面就总结一些常用的一些javaScript的知识点了。

 

javaScript分为dom, bom, ECMAScript,那么第一节就先讲一下dom和bom吧,毕竟dom和bom的内容比较少,大部分的知识点都是es的内容

然后就是阮一峰的文档写的真的超级好,建议多看几遍深入了解一下,这里贴一下文档地址:es6.ruanyifeng.com/ (之前不知道咋回事一直搜不到这个地址,还以为文档被官方删除了呢,和我的小伙伴提了一嘴,后面她就又找到了哈哈)

 

1.dom(文档对象类型)

  • 访问HTML元素:使用DOM,可以访问和操作HTML页面上的所有元素,包括它们的属性和内容。
  • 修改内容和样式:通过DOM,可以改变HTML元素的内容、样式和类名,从而改变页面的外观和用户体验。
  • 处理事件:DOM允许你为HTML元素添加事件监听器,如点击、鼠标移动等,使得页面可以响应用户的操作。
  • 添加或删除元素:可以在DOM中动态地创建新的HTML元素,或者移除现有的元素,实现页面内容的动态更新。
  • 异步操作:使用JS Async DOM方法,可以在不阻塞主线程的情况下进行DOM操作,提高页面性能。
  • 遍历和查找元素:DOM提供了多种方法来遍历文档树结构,查找特定的HTML元素,以便进行进一步的操作。
  • 兼容性处理:在不同的浏览器中,DOM的行为可能会有所不同,因此在使用DOM时需要注意浏览器兼容性问题。

 

2.bom(浏览器对象类型)

  • 独立于内容:BOM提供了与浏览器窗口进行交互的对象,这些对象独立于网页内容之外。
  • 浏览器窗口管理:BOM主要用于管理浏览器窗口和子窗口之间的通讯,包括弹出新窗口、操作滚动条等。
  • 浏览器特定功能:BOM允许开发者利用特定于浏览器的扩展功能,如获取浏览器版本信息、操作地址栏等。
  • 全局作用域:在JavaScript中,全局变量和函数实际上都是window对象的属性和方法。
  • 缺乏标准:与DOM不同,BOM并没有一个统一的标准化组织来制定标准,其实现在不同浏览器之间可能存在差异。
  • 访问浏览器信息:通过BOM,可以获取浏览器窗口的尺寸,包括宽度和高度(包含滚动条)。
  • 导航操作:BOM还可以用来控制页面跳转,获取当前URL等信息。

 

3.javaScript的数据类型

js数据类型有: null, undefined, string, number, boolean, object, symbol,bigInt

可以分为原始数据类型和引用数据类型,object为引用数据类型,以堆的形式存放于内存中。

如何检查区分这些类型:

typeof: 缺点是很多类型都会被识别为object类型,不能很好的区分object类型

instanceof: 运行机制是在其原型链中是否能找到该原型,缺点是只能判断引用类型,无法判断基础类型。

Object.prototype.toString.call(): 返回的类型为【Object xxx】

 

4.深拷贝与浅拷贝

浅拷贝:

扩展运算符

object.assign()

 

如何实现深拷贝?

function deepCopy(obj) {
  if (typeof obj !== 'object' || obj === null) {
    return obj;
  }
  
  let copy = Array.isArray(obj) ? [] : {};
  
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      copy[key] = deepCopy(obj[key]);
    }
  }
  
  return copy;
}

5. new操作符实现原理

  • 创建一个新对象

  • 将对象的proto属性指向构造函数的prototype属性

  • 将构造函数的this指向新对象

  • 返回这个新对象

6.map, weakMap, set, weakSet

map与object的区别:

  • object的健只能为string类型,map的健可以为任何类型。
  • object没有iterable对象,所以得以其他方式来进行迭代,,map有iterable对象,所以可以直接进行迭代。
  • map对于频繁的增删改查性能更好

map与weakMap的区别:

  •   weakMap只接受object类型作为他的key
  •   weakMap的引用是弱引用类型,他的健名所指向的对象不计入垃圾回收机制

set:

数组去重通过set的方式:

[...new Set(array)]

set是一种新的数据结构,类似于数组,所有成员都是唯一的。Array.from()方法可以将 Set 结构转为数组。

7.ajax与axios

   如何创建一个ajax请求?

  •    先创建一个xhr对象
  •    通过open方法发送请求
  •    接受请求返回的内容进行判断封装
const SERVER_URL = "/server";
let xhr = new XMLHttpRequest();
// 创建 Http 请求
xhr.open("GET", url, true);
// 设置状态监听函数
xhr.onreadystatechange = function() {
  if (this.readyState !== 4) return;
  // 当请求成功时
  if (this.status === 200) {
    handle(this.response);
  } else {
    console.error(this.statusText);
  }
};
// 设置请求失败时的监听函数
xhr.onerror = function() {
  console.error(this.statusText);
};
// 设置请求头信息
xhr.responseType = "json";
xhr.setRequestHeader("Accept", "application/json");
// 发送 Http 请求
xhr.send(null);

ajax需要自己编写发送请求的步骤,axios在ajax的基础上进行了封装和优化,使得运用起来更加方便

const axios = require('axios');

axios.get('https://api.example.com/data')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.log(error);
  });

8.promise

promise是一个异步编程的解决方案。

promise的特点:

  • 对象的状态不受外部影响,只有异步操作的结果可以决定当前的状态,其他外部的操作无法更改promise的状态。
  • 一旦改变后就不能再次改变,状态只能从pending转换为resolved,rejected,且改变后就定型,不会再次发生改变。

promise的缺点:

  • 无法取消promise,一旦建立就会立即执行,中途不可取消

  • 在内部抛出的错误,无法自行抛出,需通过回调函数进行捕捉

  • 当当前处于pending状态时,无法监听到具体状态(刚刚开始还是即将完成)

其实重点内容还有很多,先写到这里,等到后续再补充吧。。