Skip to content
On this page

JS基本知识

基本数据类型

  1. 原始数据类型
  • 数字(Number):整数和浮点数,例如 42 或 3.14。
  • 字符串(String):由字符组成的文本,例如 "Hello" 或 'World'。
  • 布尔值(Boolean):表示真(true)或假(false)的值。
  • undefined:表示未定义或未赋值的值。
  • null:表示空值。
  • Symbol(ES6引入的新类型):表示唯一的标识符。
  • bigInt
  1. 引用数据类型
  • 对象(Object)

let 和 var 的区别

  1. let定义的变量在同一作用域内不能重复声明, var 定义的变量重复声明会覆盖之前的值。
  2. let定义的变量值在块级作用域内有效。
  3. var 定义变量存在声明提前的问题, let 定义的变量不存在该问题。
  4. 在全局作用域中使用 var 声明的变量会成为全局对象(如 window 对象)的属性。使用 let 声明的全局变量不会成为全局对象的属性。

undefined 和 null 的区别

  • undefined表示没有值
  • null表示无对象

首先从语意上它们就存在差别。因为null表示无对象,所以typeof null 等于object。造成这样的原因也是设计上的缺陷。

js
undefined == null // true
undefined === null //false
typeof undefined // 'undefined'
typeof null // 'object'

判断类型的方式

  • typeof: 可以较好的判断基本数据类型 , 对引用数据类型的判断不友好,不能区分数组和对象和null,结果都为object。

  • instanceof: 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。对引用数据类型判断较好,对基本数据类型的判断不友好。

  • Object.prototype.toString.call([]): 自认为最准确的判断方式

javascript
Object.prototype.toString.call() // "[object Undefined]"
 Object.prototype.toString.call('') // "[object String]"
 Object.prototype.toString.call(2) //"[object Number]"
 Object.prototype.toString.call(false) // "[object Boolean]"
 Object.prototype.toString.call(undefined) // "[object Undefined]"
 Object.prototype.toString.call(null) // "[object Null]"
 Object.prototype.toString.call([1,2]) // "[object Array]"
 Object.prototype.toString.call({}) // "[object Object]"

JS的事件机制

JavaScript 事件触发有三个阶段。

  • 事件捕获阶段(Event Capturing Phase):事件从文档的根元素开始向下传播,直到达到事件的目标元素。

  • 目标阶段(Target Phase):事件到达目标元素,触发事件处理函数。

  • 事件冒泡阶段(Event Bubbling Phase):事件从目标元素开始向上冒泡,直到达到文档的根元素。

事件冒泡是指当一个元素上的事件被触发时,事件会从该元素开始向上冒泡到其父元素,直到到达文档的根元素(通常是 <html> 元素)。换句话说,事件会从最具体的元素(例如按钮)一直向上传播到最不具体的元素(文档的根元素)。

事件捕获则是相反的过程。在事件捕获阶段,事件会从文档的根元素开始,逐级向下传播到最具体的元素。事件捕获阶段是事件传播的第一个阶段,而事件冒泡阶段是第二个阶段。

默认情况下,事件处理会发生在事件冒泡阶段。但是,您可以使用 addEventListener 方法的第三个参数来指定事件处理发生在捕获阶段还是冒泡阶段。例如:

js
element.addEventListener('click', handler, true); // 在捕获阶段处理事件
element.addEventListener('click', handler, false); // 在冒泡阶段处理事件(默认)