Appearance
JS基本知识
基本数据类型
- 原始数据类型
- 数字(Number):整数和浮点数,例如 42 或 3.14。
- 字符串(String):由字符组成的文本,例如 "Hello" 或 'World'。
- 布尔值(Boolean):表示真(true)或假(false)的值。
- undefined:表示未定义或未赋值的值。
- null:表示空值。
- Symbol(ES6引入的新类型):表示唯一的标识符。
- bigInt
- 引用数据类型
- 对象(Object)
let 和 var 的区别
- let定义的变量在同一作用域内不能重复声明, var 定义的变量重复声明会覆盖之前的值。
- let定义的变量值在块级作用域内有效。
- var 定义变量存在声明提前的问题, let 定义的变量不存在该问题。
- 在全局作用域中使用 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); // 在冒泡阶段处理事件(默认)