判断选择
if 判断
判断条件,只要有条件成立,if里面的代码中其他的else if都不会执行。
//单分支
if(1<2){
console.log(1);
}
//多分支
if(1>2){
console.log(1);
}else{
console.log(2);
}
if(1>2){
console.log(1);
}else if(3>2){
console.log(2);
}
switch-case 选择
选择一个分支开始执行,直到遇到break 后跳出整个swith选择(如case 2:,后面没有break,会继续执行到console.log(3);)。
如果没有相等的条件,就会执行defalt,这个是可选的,也可以没有。(推荐)
switch(1){
case 1:
console.log(1);
break;
case 2:
console.log(2);
case 3:
console.log(3);
break;
default:
console.log(4);
}
switch 语句可以用于所有数据类型(在很多语言中,它只能用于数值),因此可以使用字符串甚至对象。
其次,条件的值不需要是常量,也可以是变量或表达式。
switch 语句在比较每个条件的值时会使用全等操作符,因此不会强制转换数据类型(比如,字符串”10”不等于数值 10)。
switch ("hello world") {
case "hello" + " world":
console.log("Greeting was found.");
break;
case "goodbye":
console.log("Closing was found.");
break;
case num > 10 && num <= 20:
break;
default:
console.log("Unexpected message was found.");
}
==================
循环
while
判断条件,条件为真,就执行,然后循环,直到条件不成立,或者遇到break后停止循环
var n = 1;
while(n<10){
console.log(n);
n++;
}
do while
先执行一次代码,然后:
判断条件,条件为真,就执行,然后循环,直到条件不成立,或者遇到break后停止循环
var n = 1;
do{
console.log(n);
n++;
}while(n<10)
for
判断条件,条件为真,就执行,然后循环,直到条件不成立,或者遇到break后停止循环;
可以同时初始化多个值。
for(n=1 ; n<10 ; n++){
console.log(n);
}
for in
遍历数组或对象的下标
数组是把下标当做属性遍历
//数组
var arr = [1,2,3,4,5,6];
for(x in arr){
console.log(arr[x]); //1 2 3 4 5 6
}
//对象
var person={fname:"John",lname:"Doe",age:25};
for (x in person) //x是属性名
{
txt = txt + ' ' + x; //txt = 'fname lname age' 属性名
txt1=txt1 + ' ' + person[x]; //txt1 = 'John Doe 25' 属性值
}
//可以过滤掉继承的属性
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
if (o.hasOwnProperty(key)) { //对象的属性是无序的,因此 for-in 语句不能保证返回对象属性的顺序。
console.log(key); // 'name', 'age', 'city'
}
}
如果 for-in 循环要迭代的变量是 null 或 undefined,则不执行循环体。
for of(ES6)
遍历数组值
var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) { // 遍历Array
console.log(x);
}
for (var x of s) { // 遍历Set
console.log(x);
}
for (var x of m) { // 遍历Map
console.log(x[0] + '=' + x[1]);
}
遍历对象
for(let [key, value] of Object.entries(objece)){
}
==================
标签
标签语句用于给语句加标签,语法如下:
label: statement
下面是一个例子:
start: for (let i = 0; i < count; i++) {
console.log(i);
}
在这个例子中,start 是一个标签,可以在后面通过 break 或 continue 语句引用。标签语句的
典型应用场景是嵌套循环。
==================
中断
continue 和 break
continue:跳出本次循环,立刻进行下一次循环
break:跳出当前循环体,执行循环体以外的代码
还可以给代码块加标签,然后continue 或 break 某个标签,如
cars=["BMW","Volvo","Saab","Ford"];
list: //这个就是标签,就是给代码块一个名字
{
document.write(cars[0] + "<br>");
document.write(cars[1] + "<br>");
document.write(cars[2] + "<br>");
break list;
document.write(cars[3] + "<br>");
document.write(cars[4] + "<br>");
document.write(cars[5] + "<br>");
}
断点调试
1、浏览器断点
点上断点,刷新,那么代码运行到断点处就会停止,右边就可以查看到一些信息
2、debugger 代码断点
代码中加入debugger,那么程序运行到debugger位置就会停止
Watch 查看变量、函数
Watch可以添加要查看的变量、函数,可以显示它们的变化
继续调试
继续连续执行代码,到下一个断点停止
单步跳过,运行当前暂停的那行代码,然后到下一行停止。进入循环体时,会一步一步循环。
进入到函数里面单步运行
var sum = function(x){
for(i of arguments){
console.log(i);
}
}
debugger;
sum(1,2,3,4,5)
如上例子,浏览器会在debugger这里第7行停止运行:
1、点击,程序会跳到第8行停止运行,再点一次就会直接得到sum(1,2,3,4,5)的结果
2、如果是点击,则程序会跳到第8行停止运行,再点一次会跳到第2行停止运行,再点就会跳到第3行,开始一步一步for循环,而不是直接得出结果。
Call Stack 查看调用栈
可以查到到函数怎么调用栈空间。如上图,sum1先入栈,最后出,sum3最后入栈,最先出。