1、块级作用域
var变量提升
var不管在哪声明,都会被提升到当前作用域顶级声明的变量。也就是变量提升.如下例子,当condition为false
function getVaule(condition){
if(condition){
var value="blue"
// 1 此处可以访问变量value值,值为blue
}
// 2 此处也可以访问变量value的值,置为undefinded
}
上面的例子,当condition为false时,位置2仍然可以访问变量value。但没有值。这个就是因为js中的变量提升。在预编译阶段,js引擎,已经将上面的函数修改为下面形式
function getVaule(condition){
var value;
if(condition){
value="blue"
// 1 此处可以访问变量value值,值为blue
}
// 2 此处也可以访问变量value的值,置为undefinded
}
块级声明
块级声明用与在指定块的作用域之后无法访问的变量
1/ {}之间
2/ 函数内部
let、const
- 不会变量提升
- 不可重复声明
- 在声明之前不可访问变量,就算是type操作符也会引发错,误因为在预编译阶段,要么把变量提升到作用域顶部(var),要不放入临时性死区(let,const),访问临时性(TDZ)的变量会触发运行时的错误
const和let的不同处
const 不允许修改绑定,但允许修改值。
在for循环,初始化变量使用const,在修改初始化变量值时会报错
-
在for-in和for-of循环中,使用const时的行为和let相同。
for(const key in object){ console.log(key) }
字符串和正则表达式
es6新增的特性
"string".codePointAt(1) --字符串按位置提取的字符代码点。该方法接受的为码位单元而非字符串位置
String.fromCodePoint(134071) --字符串内某个字符的代码点
normalize() --
-
正则表达式是u标志 --当对正则表达式设置了u标志,他的工作模式切换到针对字符,而不是针对码元。 可用育计算某个字符串的字节数
// 此方法对于常字符串慎用,有性能问题,可以使用字符串的迭代器来操作 function codeLength(text){ const result=text.match(/[\s\S]/gu) return result?result.length:0 } const length=codeLength("漳卅a")
includes() 给定文本存在于字符串的任意位置,返回true
startsWith() 给定文本存在于字符串的开始位置 返回true,否则返回false
-
endsWith() 给定文本存在于字符串的结束位置 返回true 否则返回false
const text='hello world' text.includes(0) //true text.startsWith(hello) //true text.endsWith(ld) //true
repeat() 它接受一个参数作为字符串的重复次数,返回
一个将初始字符串重复指定次数的新字符串
ass.repeat(3) //assassass
- 正则表达式y标志
- flag
模板字面量
- es6出来之前,多行字符串的权宜之计
var message="hello\
string" // hello string
var message=[
'hello',
'world'
].join("\n)
- es6的模板字符串解决方案
const message=`hello
world` //hello
world
es6中的所有空格,都是字符串中的内容。
- 替换位
es6中替换位,允许你将任何有效的js表达式嵌入到模板字符串中
let name = "Nicholas",
message = `Hello, ${name}.`; // hello Nicholas
- 标签化模板
标签模板不是模板,而是在字符串前的一个函数,可以用来对字符串模板进行处理
const test1='12'
const test2='23'
let message=tag`hello world ${test1} 夯实 ${test2}`
// 第一个参数 ['hello world',' 夯实','']
// 参数 substitutions ['12','23']
// 使用tag 标签将 模板字符串显示
function tag(literals,...substitutions){
let result;
for(let i=0;i<substitutions.length;i++){
result+=literals[i];
result+=substitutions[i]
}
return result
}