if 语句
if(i > 25)
console.log('i > 25') // 单行代码
else{
console.log('i < 25') // 代码块
}
推荐写法
if(i > 25){
console.log('i > 25')
}
else if(i < 0){
console.log('i < 0')
}else{
console.log('0 <= i <= 25')
}
do-while 语句
后测试循环语句。循环体内执行完代码之后,才会测试出口条件。(循环体内的语句至少执行一次)
do{
statement
} while (expression)
// 输出1
do{
console.log(1)
}while(false)
var i = 0
do{
i += 2
}while(i < 10)
console.log(i) // 10
While 语句
前测试循环语句。先测试出口条件,在执行循环体内代码
while(expression){
statement
}
// 没有输出
while(false){
console.log(1)
}
var i = 0
while(i < 10){
i += 2
}
console.log(i) // 10˝
for 语句
前测试循环语句。执行循环钱初始化变量和定义循环后要执行代码的能力
// 输出0,1,2,3,4,5,6,7,8,9
for(var i = 0;i < 10;i++){
console.log(i)
}
由于不存在块级作用域,所以循环体内定义的变量外部也可以访问
for(var i = 0;i < 10;i++){}
console.log(i) // 10
一个经典的问题
// 函数体内全部引用变量i,i最后变为10,所以所有输出都为10
var a = []
for(var i = 0;i < 10;i++){
a[i] = function(){
console.log(i)
}
}
a[0]() // 10
a[9]() // 10
// let为块级作用域,函数每次引用的i都是重新声明的,所以符合预期
var a = []
for(let i = 0;i < 10;i++){
a[i] = function(){
console.log(i)
}
}
a[0]() // 0
a[9]() // 9
for-in 语句
精准迭代语句。用来枚举对象的属性.
for...in 语句以任意顺序遍历一个对象的可枚举属性。
for(var propName in window){
console.log(propName)
}
// postMessage
// blur
// focus
// close
// parent
// opener
// ... so many
遍历对象的可枚举属性
var myObj = {}
Object.defineProperties(myObj, {
name: {
value: 'liuchang',
writable: true,
enumerable: true // 可枚举
},
age: {
value: 26,
writable: false,
enumerable: false // 不可枚举
}
})
// myObj {name: "liuchang", age: 26}
for(var name in myObj){ console.log(name) } // name
break 和 continue 语句
break 立即退出循环
for(var i = 0; i < 10; i++){
if(i == 5){
break
}
console.log(i)
}
// 0 1 2 3 4
continue 不执行当次循环后面的语句,但会从循环的顶部继续执行
for(var i = 0; i < 10; i++){
if(i == 5){
continue
}
console.log(i)
}
// 0 1 2 3 4 6 7 8 9
Switch
- Switch 在匹配时使用的是全等操作
- 如果没有 break 退出当前循环,则按顺序执行
var i = 25;
switch (i) {
case 25:
console.log(25);
break;
case 35:
console.log(35);
break;
default:
console.log(0);
}
// 25
没有 break 按顺序执行,合并 25 和 35 两种情形
var i = 25;
switch (i) {
case 25:
console.log(25);
case 35:
console.log(35);
break;
default:
console.log(0);
}
// 25 35
// 等同于
if(i == 25 || i == 35){
// ...
}else{
// ...
}
没有 break 按顺序执行
var i = 25;
switch (i) {
case 10:
console.log(10);
case 25:
console.log(25);
case 35:
console.log(35);
break;
default:
console.log(0);
}
// 25 35
Switch 在匹配时使用的是全等操作("5" 不等于 5)
switch("5"){
case 5:
console.log('true')
break
default:
console.log('false')
}
// false