第1章 块级作用域绑定
let 声明
let代替var来声明变量,把变量的作用域限制在当前代码块中(临时死区Temporal Distortion)
注:let声明的变量不会出现提前声明的情况,所以尽量let声明在代码块的顶部,以便整个代码块都可以访问。
let 声明的特点
- 禁止重声明
- 具有块级作用域
循环中的块作用域绑定
在JS中var定义循环的变量 在循环的外层也可以访问到 但是let声明的就不行
for(let i = 0; i < 10; i++){
}
console.log(i); //不能访问i!!!
const 声明
const用于声明常量,即一旦被设置后,就不能更改,且每一个const声明的变量都需要进行初始化
const声明对象
const声明的对象不能修改其引用,但是可以修改属性值
const obj = {
name: 'wjc'
}
obj.name = 'zfh';
obj = { //这样不行会报语法错误 syntaxerro
name: 'aaa'
}
const与let
const与let声明的都是块级标识符,即声明的变量只在当前代码块内有效
可以解决循环中函数调用的异步的问题(即实现同步)
var funcs = [];
for(let i =0; i < 10; i++){
funcs.push(function(){
console.log(i);
});
}
funcs.forEach(function(func){
func()
})
循环中const与let的区别
需要注意的是const用于循环,只能使用for in循环,因为for in循环每次迭代不会修改已有绑定,而是创建一个新的绑定,如:
for(const key in arr){
arr2.push(function(){
console.log(key);
})
}
被用于全局块作用域时const、let与var的区别
var声明变量的时候会创建一个新的全局变量作为全局对象(window对象)的属性(即var很可能会覆盖一个已经存在的全局属性)
let或const在全局作用域中声明的变量,只会在全局作用域下创建一个新的绑定,但该绑定不会添加为全局对象的属性。(即不会覆盖全局变量,只会遮蔽它)
let RegExp = 'hello';
console.log(RegExp);
console.log(window.RegExp == RegExp); //fale
const ncz = 'Hi!';
console.log(ncz);
console.log('ncz' in window); //false
第2章 字符串和正则表达式
字符串的变更
includes()方法:在字符串中检测到指定文本则返回true
startsWith()方法:在字符串中的起始部分检测到指定文本则返回true,否则返回false
endsWith()方法:在字符串中的结束位置检测到指定文本则返回true,否则返回true
repeat()方法:其接收的是一个number类型的参数,表示该字符串的重复次数
'hello'.repeat(3)
这个方法在操作文本的时候非常实用
//缩进指定数量的空格
let indent = " ".repeat(4);
indentLevel = 0;
//当需要增加缩进的时候
let newIndent = indent.repeat(++indentLevel);
正则表达式y修饰符
补充:RegExp.exec(String) 可以用于检索字符串正则表达式的匹配
用处不大,暂不扩展
模板字面量
多行字符串
基本字符串格式化
HTML转义
基础语法
let message = `hello world!`
注:要使用反引号的话,需要使用\斜杠进行转义
多行字符串
JS中的解决方法
var message = "Multiline \n\
string"
ES6中简化的多行字符串
let message = `Multipleline
string`;
console.log(message);
console.log(message.length);
可以配合trim()一起使用
let message = `
<div>
<h1>Title</h1>
</div>
`.trim();
字符串占位符
在模板字面量中,可以将任何合法的JavaScript表达式嵌套到占位符中将其作为字符串的一部分输出到结果中
占位符基本结构:${} 在{}中间可以放任意的JavaScript表达式
let name = "Nicholas",
message = `Hello, ${name}`;
console.log(message);
标签模板(重点)
let message = tag`Hello world`
定义标签
标签可以是一个函数,调用时传入加工过的模板字面量各部分数据,但必须结合每个部分来创建结果。
基本结构:function tag(literals, ...substitutions){
//返回一个字符串
}
模板字面量标签会接收三个参数:
literals数组:数组的第一个总是''空字符串 第二个是第一个字符串 第三个是第二个字符串
substitutions: 数组的第一个参数是第一个占位符的值 第二个占位符的值