JavaScript 从入门到高级

这篇博客详细探讨了JavaScript的各个方面,包括延迟加载js的方法、var、let和const的区别、暂时性死区、数据类型、内置对象、判断数据类型的方法以及原始值和引用值类型的区别。此外,还深入讲解了null和undefined、==与===的区别、continue和break的用法,以及数组去重的各种策略。博客还涵盖了this指向、改变this指向的方式、事件捕获、事件冒泡和事件委托,以及作用域、作用域链、JS执行机制、事件循环和垃圾回收机制。最后,讨论了深拷贝和浅拷贝的差异,以及面向对象编程的相关概念,如构造函数、原型、原型链等。
摘要由CSDN通过智能技术生成

JavaScript

延迟加载 js 的方法有哪些?

  1. defer(属性):HTML 全部解析完成,才会执行 JS 代码,并且是按顺序执行。
  2. async(属性): HTML 解析和 JS 执行同时进行,不是按顺序执行(谁先加载完,谁先执行)。
  3. 动态创建 script 标签,并插入页面。

var、let、const 的区别?

  • var

    1. 声明的变量是全局变量。
    2. 可以跨函数访问。
    3. 存在变量提升(也就是变量声明会被提升到其所在作用域的顶部)。
    4. 可以在同一作用域内多次声明同一变量,后面的声明会覆盖前面的。
  • let

    1. let 引入了块级作用域,这意味着它们声明的变量只在声明它们的代码块(例如,if 语句、for 循环等)内有效。
    2. let 不会发生变量提升,如果在声明前访问这些变量,会导致引用错误(ReferenceError)。
    3. let 在同一作用域内不允许重复声明变量。
  • const

    1. const 声明的变量是只读的,不能重新赋值。
    2. const 声明的变量必须初始化,否则会报错。

暂时性死区

  • 指的是使用 letconst 声明变量的时候所产生的一个特殊区域,变量虽然已经声明但还没有被初始化,因此变量无法访问,此时访问的话会报引用错误。

  • 简单来说就是在一个作用域内,从变量被声明的位置开始到生命变量的语句执行完毕之前的区域,就是暂时性死区。

  • 注意:

    1. 在这个区域内,该变量既不能读取耶不行写入。
    2. 在这个区域内,变量会被提升,但不会被初始化。

JS 数据类型有哪些?

  • 基本数据类型:numberstringbooleannullundefinedsymbolbigint
  • 引用数据类型:object (Array、Function、Date、RegExp、Set、Map…)

JS 中的内置对象?

Date Array Boolean Number Map Set Math Promise RegExp Symbol

JS 判断数据类型的方法?

console.log(typeof null); // object
console.log(Object.prototype.toString.call("123")); // [object String]
console.log([1, 2, 3].constructor); // Array() { [native code] }

原始值类型和引用值类型有什么区别?

原始值类型:直接存储数据值,存于栈中,复制是值拷贝,修改一个不会影响另一个。

引用值类型:存储的是数据的地址,实际数据位于堆中,复制时共享同一地址,修改一个会影响所有引用该地址的变量。

null 和 undefined 的区别?

  • null: 表示一个空对象指针,会被隐式转换成 0,不容易发现错误。
  • undefined: 表示一个未定义的值,转换为数值时为 NaN

== 和 === 的区别?

  • ==:只比较值是否相等,不比较数据类型,会隐式的通过 valueOf() 转换。
  • ===:不仅比较值是否相等还会比较数据类型是否相等。

continue 和 break 的区别?

  • continue:退出本次循环,一般用于排除或者跳过某一个选项的时候,可以使用 continue。
  • break:退出整个循环,一般用于结果已经得到,后续的循环不需要的时候可以使用。

数组去重的方式有哪些?

  • Set()
let array = [1, 1, 2, 2, 3, 3, 4, 5, 6];
const arr = [...new Set(array)];
console.log(arr);
  • for()循环
let array = [1, 1, 2, 2, 3, 3, 4, 5, 6];
for (let i = 0; i < array.length; i++) {
   
  const index = array.indexOf(array[i], i + 1);
  if (index !== -1) {
   
    array.splice(index, 1);
    i--;
  }
}
console.log(array);
  • indexOf()
let array = [1, 1, 2, 2, 3, 3, 4, 5, 6];
function removeDuplicate(arr) {
   
  const newArr = [
  • 59
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值