js的循环
- if不用多说,在if的括号中是条件
- do-while语句:当不满足while中的条件循环会退出;
- while:和do-while不同的时,while可能不会执行循环,而do while无论如何循环体内代码至少执行一次
let a=9;
do{
a++
}while(a<8)
console.log(a) // 10
----------------------
let a = 9;
while (a < 8) {
a++ // 没走循环体中
}
console.log(a); // 9
- for 循环也不用多说,就是根据()中的属性看要不要走循环体
- for in:
用于枚举对象中非符号键属性
用于枚举对象 - for of :
用于遍历可迭代对象
可迭代对象就是他们一定要有迭代属性;也就是说Symbol.terator属性
var arr=new Array()
console.log(arr[Symbol.iterator]()) // Symbol.iterator f()
- break和continue;
break会立即退出循环执行循环后的语句,而continue则会停止本次循环,返回循环顶部
- with语句:特殊语句,用于对象反复操作;with不可以在严格模式下使用
let app = {
names: 'hhh',
ages: 18,
job: 'woker'
}
let app2={}
with(app) {
app2.names=names+1
app2.ages=ages+2
}
console.log(app2) //{ages: 20,names: "hhh1"}
- switch case循环就是以switch作为条件 case中进行判断
作用域
- 先说一下原始属性会保存在栈内存上,而引用值会保存在堆内存上
- js在执行代码时是单线程的,所以会有作用域,而作用域可以从下而上去查找,不能从父级向子集去查找,闭包解决啦这个问题
垃圾回收机制
垃圾回收就是当某一个变量被调用后,之后其不会再被调用就会被清除,每隔一定时间进行一次清理
其中有标记清理和引用计数两种方式来清理垃圾
标记清理
:就是变量在进入上下文(也就是js内部)时,只要他在上下文中被使用,说明他就有用,就会被标记进入“被保护名单”;如果离开上下文啦,就会被标记进入为“被清理名单”,变量可以在从一个“名单”移入另一个“名单”
引用计数
:声明变量被赋值其计数加1,如果保存该值引用的变量被其他值覆盖,计数就减1,当变量计数为0时则被清理
- 提升性能的方法就是常用 let 和const生命变量
- 解除引用:如果数据不再必要将其设置为null
- 隐藏类的使用,在构造函数中,把不想要的属性设置为null
引用数据类型
- date
- new Date.now() //获取现在时间
- 这里有很多api我就直接上一张图片吧
- RegExp
g
:全局模式,查找字符串全部内容
i
:不区分大小写,忽略字符串的大小写
m
:多行模式,表示找到一行文本末位时会继续找
y
:粘附模式,表示只找查从lastindex之后的字符
u
:unicode模式,启用unicode匹配
s
:dotall模式,匹配元字符
- RegExp实例属性
global
:布尔值,表示是否设置啦g标记
ignoreCase
:布尔值,表示是否设置i标记
unicode
:布尔值,表示是否设置u标记
sticky
:布尔值,表示是否设置y标记
lastIndex
:整数,原字符下一次搜索的位置,始终从0开始
multiline
:布尔值,表示是否设置m标记
source
:正则表达式的字面量字符串,没开头和结尾的斜杠
flags
:正则表达式标记的字符,没有之前的斜杠
let pa = /\[123\]/i
console.log(pa.global); // false
console.log(pa.ignoreCase); // true
console.log(pa.multiline); //false
console.log(pa.sticky); //false
console.log(pa.source); // \[123\]
console.log(pa.flags); //i
下面这些平时也可能用上