文章目录
Javascript语句
普通语句
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ltykgDdz-1595208603169)(en-resource://database/7050:1)]
语句块
语句块就是一对大括号,再同一个语句块中可以把多行语句视为同一行语句,这样if、for等语句定义起来就比较简单了。
- 注意:语句块会产生作用域。
{
let x = 1;
}
console.log(x); // 报错
循环语句
while 和 do while循环
注意do while无论如何至少会执行一次。
for in循环
for in循环枚举对象的属性,体现了属性的enumerable特征。
let obj = { a: 10, b: 20}
Object.defineProperty(obj, "c", {enumerable:false, value:30})
for(let p in obj)
console.log(p);
上述代码,对象obj
的c
属性是不可枚举的,for in循环枚举obj
的属性,输出的只有a和b。
for of 循环和for await of循环
for of 可用于数组,背后的机制是iterator机制。
可以给任何一个对象添加iterator,使它可以用于for of 语句。
实际操作中定义iterator可以使用generator function。
function* foo(){
yield 0;
yield 1;
yield 2;
}
for (let e of foo()){
console.log(e); // 0 1 2
}
Javascript还为异步生成器函数配备了异步的for of:
function sleep(duration) {
return new Promise(function(resolve, reject) {
setTimeout(resolve,duration);
})
}
async function* foo(){
i = 0;
while(true) {
await sleep(1000);
yield i++;
}
}
for await(let e of foo())
console.log(e);
try语句和throw语句
用于处理异常,配合使用。
try {
throw new Error("error");
} catch(e) {
console.log(e);
} finally {
console.log("finally");
}
throw用于抛出异常,try捕获异常,用throw抛出的异常可以在try语句的结构中被处理掉:
- try部分用于标识捕获异常的代码段。
- catch部分用于捕获异常后做一些处理,会创建一个局部的作用域。
- finally用于执行后做一些必须执行的清理操作,一般用于释放资源。finally语句一定会被执行,即使在try中出现了return,finally中的语句也一定要被执行。
debugger语句
通知调试器在此断点,没有调试器挂载时,不产生任何效果。
声明型语句
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fU3aNtMY-1595208674335)(en-resource://database/7052:1)]
let和const
var
不讲了.
- 块级作用域,作用范围是if、for等结构型语句。
- 重复声明会报错。
- let和const声明看上去是执行到了才会生效,实际上还是会被预处理,如果当前作用域内有生命,就无法访问到外部的变量:
const a=2;
if(true){
console.log(a); //报错
const a=1;
}
class声明
class a{
}
- class最基本的用法只需要class关键字、名称和大括号。
- 声明特征与const、let类似,都是作用域块级作用域,预处理阶段会屏蔽外部变量。
- class内部可以使用constructor关键字来定义构造函数,还能定义getter/setter和方法。
- 以目前的兼容性,class中的属性只能写在构造函数中。
- class默认内部的函数定义都是strict模式的。
函数声明
- 使用
function
关键字
几种声明类型:
function foo(){
}
function* foo(){
yield 1;
yield 2;
yield 3;
}
async function foo(){
await sleep(3000);
}
async function* foo(){
await sleep(3000);
yield 1;
}