本文共 2980 字,大约阅读时间需要 9 分钟。
最基本的语句是用于组合语句的语句块,JS中使用大括号构成语句块 。ES6之前语句块是没有作用域的,从ES6开始支持块作用域,let只能在块作用域中可见。
{ statement_1; statement_2; statement_3; . . . statement_n;}
function hello(){ let a = 1; var b = 2; c = 3}if (1){ let d = 4; var e = 5; // 提升变量 f = 6 if(true){ console.log(d) // 4 console.log(e) // 5 console.log(f) // 6 console.log('~~~~~~~~~~~~~') g = 10 var h = 11 }}// console.log(a)// console.log(b)// console.log(c) // 函数作用域声明的局部变量,不可见// console.log(d) // 块作用域使用let声明,不可见console.log(e) // 5console.log(f) // 6console.log(g) // 10console.log(h) // 11
if(cond1){ 语句体1}else if(cond2){ 语句体2}else if(cond3){ 语句体3}esle{ 语句体4}
等效为false的有:false、undefined、null、0、NaN、空字符串,其他的都等效为true。特别的,[], {}等效为true,这一点与python不同。
case label_1: 语句体1; [break;] case label_2: 语句体2; [break;] ... default: 语句体; [break;]}
程序首先查找一个与
expression
匹配的case
语句,然后将控制权转移到该子句,执行相关的语句。如果没有匹配值, 程序会去找default
语句,如果找到了,控制权转移到该子句,执行相关的语句。如果没有找到default
,程序会继续执行switch
语句后面的语句。default
语句通常出现在switch语句里的最后面,当然这不是必须的。
let x = 1switch(x){ case 0: console.log('zero'); break; case 1: console.log('one'); case 2: console.log('two'); case 3: console.log('three') break; case 5: case 4: console.log('four') default: console.log('other')}/**one*two*three*/
// C风格for循环for(let i = 0; i < 10; i++){ console.log(i)}console.log('~~~~~~~~~~~~~~')for(var x = 0, y = 9; x < 10; x++, y--){ console.log(x * y)}console.log('================')for(let i = 0; i < 10; i += 3){ console.log(i)}
while(condition){ 循环体;}
条件满足进入循环,条件为真,继续循环。
do{ {循环体; }while(condition)}
先进入循环,然后判断,条件为真就继续循环。
练习:使用JS实现九九乘法表的打印
for(let i = 1; i < 10; i++){ line = ''; for(let j = 1; j <= i; j++){ line += `${j} * ${i} = ${i * j} ` // 注意最后的花括号后有一个空格 } console.log(line)}
对象操作语句for...in用来遍历对象的属性。
for(variable in object){ statements}
// 数组let arr = [10, 20, 30, 40]console.log(arr[1])for(let x in arr){ console.log(x) // x 为数组的索引}for(let index in arr){ console.log(`${index} : ${arr[index]}`)}//C风格for(let i = 0; i < arr.length; i++){ console.log(arr[i])}// 对象let obj = { a: 1, b: 'magedu', c: true};console.log(obj.a) // 1console.log(obj['b']) // mageduconsole.log(obj.d) // undefinedconsole.log('~~~~~~~~~~~~~~~~')for(let x in obj){ console.log(x) // x为属性名}for(let key in obj){ console.log(`${key}: ${obj[key]}`)}
注意:for...in循环返回的是索引或key,需要间接访问到值。数组反正返回的是索引,C风格for循环操作可能简便些。
ES6的新语法
// for oflet arr = [1, 2, 3, 4, 5];let obj ={ a: 3, b: 'sun', c: false};for(let i of arr){ console.log(i) // 拿到的是数组的元素}for(let j of obj){ console.log(j) // 异常不可迭代,只能通过键拿到值}
注意: for ... of 不能迭代对象原因是,of后面必须是一个迭代器。
break、continue:break终止当前循环,continue中断当前循环,直接进入下一次循环。
转载地址:http://uvfvi.baihongyu.com/