变量提升和函数声明提升
函数声明提升就是把函数声明提升到函数声明所在作用域中(或者说一个函数体内)的顶端,变量提升只是提升变量的声明到所在作用域的顶端不会把值一起提升上来。
注:随便函数声明和变量都会提升,但是函数声明提升是提升整个函数体,变量提升只是提升变量声明,不会提升值,并且函数声明比变量提升优先级要高,也就是函数声明提升要在变量提升上面
基本包装类型
每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。
引用类型和基本包装类型的主要区别就是对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域 之前都一直保存在内存中。而自动创建的基本包装类型的对象,则存在于一行代码的执行瞬间,然后立即被销毁。这意味着我们不能在运行时为基本类型值添加属性和方法。
call()、apply()
每个函数都包含两个非继承而来的方法:apply()和call()。这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。
var o = { color: 'blue' }
function sayColor() {
console.log(this.color)
}
sayColor.call(o) // blue
sayColor.call(o)等同于
var o = {
color: 'blue',
sayColor: function () {
console.log(this.color)
}
}
通过上面代码可以看出call()和apply()方法就是改变函数的运行环境。
RegExp类型
正则表达式的匹配模式支持下列3个标志:
- g:表示全局模式
- i:表示不区分大小写
- m:表示多行模式
正则表达式中的元字符包括:
- ():标记一个子表达式的开始和结束位置
- []:字符集合。匹配所包含的任意一个字符
- {}:n 是一个非负整数。匹配确定的 n 次
- \:将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符
- ^:匹配输入字符串的开始位置
- $:匹配输入字符串的结束位置
- x|y:匹配 x 或 y
- ?:匹配前面的子表达式零次或一次
- *:匹配前面的子表达式零次或多次
- +:匹配前面的子表达式一次或多次
- .:匹配除换行符(\n、\r)之外的任何单个字符
- \d:匹配一个数字字符。等价于 [0-9]
- \D:匹配一个非数字字符。等价于 [^0-9]
- \n:匹配一个换行符。等价于 \x0a 和 \cJ
- \r:匹配一个回车符。等价于 \x0d 和 \cM
- \s:匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
- \S:匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
- \w:匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'
- \W:匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'
贪婪和非贪婪匹配
在贪婪量词的后面加多一个?就变成了惰性量词,它的匹配过程相反,是从前面第一个开始,不匹配则加一个,如此循环直到字符串结束。













网友评论