JS语法
语句块
JS使用{}构成语句块。
ES6之前语句是没有作用域的,从ES6开始支持块作用域,let声明的变量只能在块作用域中可见。
function hello(){
let a = 1;
var b = 2; // b变量只能在当前函数作用域中有效
c = 3;
}
hello()
if (true){
let d = 4;
var e = 5;
f = 6;
if (true){
console.log(d)
console.log(e)
console.log(f)
g = 10;
var h = 11;
}
}
console.log(a) //不可见
console.log(b) //不可见
console.log(c) //可见
console.log(d) //不可见
console.log(e) //可见
console.log(f) //可见
console.log(g) //可见
console.log(h) //可见
流程分支
条件分支
if (cond1){
}
else if (cond2){
}
else if (cond3){
}
else{
}
JavaScript中的false和下面等效
false、undefined、null、0、NaN、控字符串""
switc…case…分支语句
switch (expression) {
case label_1:
statements_1
[break]
case label_2:
statements_2
[break]
...
default:
statements+def
[break]
}
switch中case的判断是===的判断,即数据类型和值的双重判断,这点要注意。
另外switch的判断条件可以是String、Number、Boolean、char、枚举、null、undefined
示例
let x = 3
switch (x) {
case 1:
console.log("1")
break
case 2:
console.log("2")
break
case 3:
console.log("3")
// break
default:
console.log("default")
}
总结:
1.default关键字规定匹配不存在的时候做的事情
2.如果case语句忘记写break,就会顺序往下执行到有break的地方
for循环
c风格for循环
for (initialExpression; Condition; incrementExpression) {
statement
}
具体执行顺序, 先执行initialExpression语句,然后condition判断,满足执行statement语句,然后执行increamentExpression语句,显然再condition,这就是执行顺序
示例
for (let i=0;i<10;i+=3){
console.log(i) // 0 3 6 9
}
for (let i=0;i<10;i+=3){
console.log(i++) // 0 4 8
}
for (let i=0;i<10;i+=3){
console.log(++i) // 1 5 9
}
死循环
for (;;) {
statement
}
while循环和do…while循环
while循环
条件满足键入循环,条件为真,继续循环
while (condition){
statement
}
do…while循环
先进入循环,然后判断,条件为真,就继续循环
do
statement
while (condition);
示例
let x = 10
while (x--) {
console.log(x) // 9 - 0
}
console.log("========")
do {
console.log(x) // -1 - 10
}
while (x++<10)
死循环
while (true);
for…in和for…of循环
对象操作语句for…in用来遍历对象的属性
for (element in object) {
console.log(element)
}
数组的遍历
let x = new Array("a","b","c")
// 普通的遍历
for (i in x) {
console.log(i, x[i], typeof x[i])
}
//C风格遍历
for (let i=0; i<x.length; i++) {
console.log(i, x[i],typeof x[i])
}
// of遍历直接取值,ES6的新语法,of后面必须是迭代器
for (i of x) {
console.log(i)
}
// 遍历对象
let obj = {
a:1,
b:"2a",
c:true
}
for (i in obj) {
console.log(i, obj[i])
}
总结
1.for…in循环返回的是索引或者key,需要间接访问到值。
2.for…of不能迭代一个普通对象,原因是of后面必须是一个迭代器,可类比python中的for x in iterable
break和continue
break结束当前循环
continue中断当前循环,直接进入下一次循环