数据类型:
Number:表示数字,包括整数和浮点数。
String:表示文本数据。
Boolean:表示逻辑值,只有两个值:true和false。
Null:表示空值或者不存在的对象。
Undefined:表示声明了变量但没有赋值。
Null和Undefined的区别
- 含义:
undefined表示变量已声明但未初始化,即没有赋值。
null是一个表示空值的特殊值,需要显式赋值给变量。 - 类型:
undefined是一个类型(Undefined),当声明变量但没有赋值时,变量的类型是Undefined。
null是一个对象(Object),它是null类型的唯一值,通常用来表示空对象指针。 - 转换:
undefined转换为数值时为NaN(不是数字)。
null转换为数值时为0。
内置对象类型:
数组(Array):表示一组有序的数据集合。
函数(Function):表示一组可执行的代码块。
闭包
由于在JS中,变量的作用域属于函数作用域,在函数执行后作用域就会被清理、内存也随之被收回,但是由于闭包时建立在一个函数内部的子函数,由于其可访问上级作用域的原因,即使上级函数执行完,作用域也不会随之销毁,这时的子函数—也就是闭包,便拥有了访问上级作用域中的变量的权限,即使上级函数执行完后,作用域内的值也不会被销毁。链接:https://juejin.cn/post/6979613126056476685
原型链和__proto__
每个JavaScript对象都有一个内置的__proto__属性,它指向创建它的构造函数的原型对象。原型链是用于继承和共享属性和方法的一种机制。当你访问一个对象的属性或方法时,如果这个对象本身没有这个属性或方法,解释器会沿着原型链向上查找,直到找到为止。
this的指向
this关键字在JavaScript中非常重要,它指向函数执行时的上下文对象。this的值取决于函数是如何被调用的。
和=的区别:
==是宽松相等,会在比较之前转换操作数的类型。
===是严格相等,不会转换操作数的类型,如果类型不同,直接返回false。
函数的call, apply, bind方法
call和apply方法用于改变函数的执行上下文,即this的值。call接受一个参数列表,而apply接受一个数组作为参数。
bind方法用于创建一个新的函数,该函数的this值被绑定到传入的值。
function greet(name, greeting) {console.log(`${greeting},${name}!`);
}// 使用call
greet.call(this, 'Alice', 'Hello');// 使用apply
greet.apply(this, ['Bob', 'Hi']);// 使用bind
const greetJohn = greet.bind(this, 'John');
greetJohn('Welcome');