条件语句
if语句
switch语句
switch 在比较值时,使用的是全等操作符 === ,因此不会发生类型转换
switch的判断条件 expression 可以是String
、Number
、Boolean
、char
、枚举
、null
、undefined
switch (expression) {
case value1:
// 代码块
break;
case value2:
// 代码块
...
default
// 代码块
}
迭代语句
while语句
do-while语句
for语句
for-in 语句
用来枚举对象的属性,枚举顺序不可预测
- 一般用于遍历对象的可枚举属性。
- 遍历数组索引
for-in、Object.keys 和 Object.getOwnPropertyNames 对属性遍历有什么区别?
- for-in 会遍历自身及原型链上的可枚举属性,可以使用hasOwnProperty()方法过滤掉原型链上的可枚举属性
- Object.keys 会将对象自身的可枚举属性的 key 输出
- Object.getOwnPropertyNames 返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不会获取原型链上的属性。)组成的数组。
function Obj() {
this.a = "red";
this.b = "black";
}
Obj.prototype.c = "blue";
let obj1 = new Obj();
for (let i in obj1) {
console.log(i);
}
// a
// b
// c
console.log(Object.keys(obj1));//[ 'a', 'b' ]
console.log(Object.getOwnPropertyNames(obj1));//[ 'a', 'b' ]
for-of语句(ES6)
- for-of适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合.但是不能遍历对象
- 遍历数组元素值
其他语句
break和continue语句
- break 跳出当前循环且不再执行当前循环;continue 跳出当前循环进行下一次循环。
- break 若在switch 语句中,仅仅跳出当前所在switch 语句。
label语句
可以在代码中添加标签,以便将来使用。
应用场景:在嵌套循环中熟练应用 break, continue 与 Label 可以精确的返回到你想要的程序的位置。
let count = 0;
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (i === 1 && j === 1) {
break;
}
count++;
}
}
console.log(count); // 7
//i = 0;i = 0 1 2
//j = 1;i = 0 1
//j = 2;i = 1 2
let count = 0;
outBreak:
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (i === 1 && j === 1) {
break outBreak;
}
count++;
}
}
console.log(count); //4
with语句
将代码的作用域设置到一个特定的对象中。主要目的是为了简化多次编写对同一个对象的操作。
严格模式下不允许使用 with 语句。
with会延长作用域。
大量使用 with 语句会造成程序性能下降。
let obj = {
a: 123,
b: 456,
};
let a = 2;
with (obj) {
console.log(a);//123
}
let obj = {
a: 123,
b: 456,
};
console.log(obj.a);
console.log(obj.b);
//用 with 简化
with (obj) {
console.log(a);
console.log(b);
}
debugger 语句
用来产生一个断点,代码的执行会停在断点的位置,这时使用调试器来输出变量的值。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。