js基础参考:JS基础知识复习(持续更新)_学前端的小王子的博客-CSDN博客_js复习
一、js数据类型
介绍:不同的数据占用的存储空间不同,为了充分利用存储空间对数据进行了分类。
分类:基本数据类型和引用数据类型
基本数据类型:
类型 | 说明 |
number | 数字性 |
string | 字符串 |
boolean | 布尔值 |
null | 空对象 |
undefined | 已经声明但没有赋值的变量 |
引用数据类型(数组,字符串对象,日期,Math,函数,对象)
类型 | 说明 |
Array | 数组 |
Date | 日期 |
Math | 数学 |
String | 字符串 |
Object | 对象 |
function | 函数 |
区别:数据存储位置不同。
基本数据类型存放在栈中,复杂数据类型(即引用数据类型)存放在堆中
二、栈和堆(堆和栈的概念存在于数据结构中和操作系统内存中。)
栈:先进后出,栈内存由编译器自动分配释放。
堆:优先队列,先进先出,堆内存由程序员分配释放,若程序员不释放,程序结束时可能由垃圾回收机制回收。
三、判断数据类型的方法
方法 | 说明 | 示例 |
typeof | 能够快速区分基本数据类型 + function,不能将Object、Array和Null区分,都返回object | console.log(typeof 2); |
instanceof | 能够区分Array、Object和Function,不能判断基本数据类型 | console.log(2 instanceof Number); |
四、数据类型转换
转成数字型
方法 | 说明 |
parseInt(string) | 将string类型转换为整数数值型 |
parseFloat(string) | 将string类型转成浮点数值型 |
Number() | 将string类型转成数值型 |
js隐式转换(- * /) | 利用算术运算隐式转换成数值型 |
示例:
转成字符串
方法 | 说明 |
tostring() | 转成字符串 |
String(变量) | 强制转换 |
加号拼接字符串 | 通过+号拼接字符串 |
示例:
转成布尔值
五、js原型和原型链
参考:详解JS原型与原型链_小杰学前端的博客-CSDN博客_js原型和原型链
介绍:
JavaScript规定,每一个构造函数都有一个prototype属性, 指向另一个对象。注意这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有。
我们可以把那些不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法。
所以在上例中我们就可以把公共函数放在原型对象的里面,这样就不会造成内存浪费
对象都会有一个属性__ proto__指向构造函数的 prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有_ proto_ 原型的存在。
在对象身上系统自己添加了一个__proto__指向我们构造函数的原型对象,所以__proto__对象原型和原型对象prototype是等价的。
六、this指向
情况 | 说明 |
1.单独使用 | 指向全局即window |
2.对象方法中 | 指向调用该方法的对象 |
3.函数 | 指向函数的所属者 |
七、call() apply() bind()的异同点
相同点:改变this指向
不同点:它们的区别主要是在于方法的实现形式和参数传递上的不同。
方法 | 说明 |
函数.call(对象,arg1,arg2....) | 参数列表,立即执行 |
函数.apply(对象,[arg1,arg2,...]) | 参数接收的是数组 |
函数.bind(对象,arg1,arg2,....) | bind返回的是一个函数体,并不会直接执行函数 |
示例:
function show(sex){
console.log("姓名为"+this.yourname+",性别为"+sex);
}
var person={
yourname:"张三",
age:14
};
show.call(person,"男");//姓名为张三,性别为男
show.apply(person,['女']);//姓名为张三,性别为女
show.bind(person,"未知")();//姓名为张三,性别为未知
八、==和===的区别
类型 | 说明 |
== | 值相同,当两边值的类型相同时,直接比较值,若类型不相同,直接返回false; |
=== | 值和类型都相同,当等号两边的类型相同时,直接比较值是否相等,若不相同,则先转化为类型相同的值,再进行比较; |
九、js强制转换和隐式转换
强制转换:parseInt() parseFloat() toString()
隐式转换:== ===
十、map和foreach的区别
map会返回一个新数组
foreach没有返回值
十一、内存泄漏
介绍: 程序中已动态分配的堆内存因为某种原因未释放或无法释放引发的各种问题
危害:变慢,延迟,崩溃
原因:
1、全局变量
2、定时器没有清除
3、DOM清空时,还存在应用
4、闭包
十二、垃圾回收机制
目的:防止内存泄漏
介绍:不停歇的寻找这些不再使用的变量,并且释放掉它所指向的内存
方式:标记清除,引用计数
标记清除:大部分浏览器使用这种垃圾回收,当变量进入执行环境(声明变量)的时候,垃圾回收器将对该变量进行标记,当该变量离开环境的时候,将其再度标记,随之进行删除
引用计数:这种方式常常会引起内存泄漏,主要在低版本浏览器中,它的机制就是跟踪某一个值的引用次数,当声明一个变量并且将一个引用类型赋值给变量得时候引用次数加1,当这个变量指向其他一个时引用次数减1,当为0时出发回收机制进行回收。