JavaScript语言基础和流程控制语句2

140 阅读6分钟

一、位运算

位运算符
~   位非运算符
	~-1==0
&   位与运算符
	1&2=0
|  位或运算符
	1|2=3
^  位异或运算符
	1^2=3 相同位0,不同为1
<< 左移位运算符
	1<<4=16
>> 右移位运算符

1.位与运算符 &
1&1=1   1&0=0  0&1=0  0&0=0
	例:25&34
		25转换为二进制为:011001
		34转换为二进制为:100010
		位运算后为:000000
		即:25&34=0

2.位或运算符 |
1|1=1  0|1=1  1|0=1  0|0=0
	例:25|34
		25转换为二进制为:011001
		34转换为二进制为:100010
		位运算后为:111011
		即:25&34=59

3.位异或运算符 ^
0^0=0  1^1=0  0^1=1  1^0=1

4.位非运算符 ~
加1取负数

二、条件运算符(三目运算符)

variable = boolean_expression ? true_value : false_value;

?前通过转换为布尔值判断条件是否成立,如果条件成立返回第一个值,否则返回:后第二个值。即如果表达式的结果转换为布尔值为真时,返回问号后面的值,否则返回冒号后面的值。问号前面的内容会自动隐式转换为布尔值

例:
var a=10;
var a=a-=1 ? a++ : ++a;
console.log(a);//0
由于三目运算符优先级高于赋值运算符,所以优先计算“1 ? a++ : ++a”,数值1转换为布尔值为true,因而三目运算符的结果为a++,返回值10。接下来运算 a=a-=10,即为a=a=a-10,根据赋值运算规则,得a=0.

三、流程控制语句

条件语句
1.if语句
	var a=0;
    if(a*=10){
        console.log(a);
    }//不打印

    在这里,条件不管什么表达式都会隐式转换为布尔值
    在条件语句中大量用!(非)
    if(条件表达式){
        // 如果条件表达式运算后隐式转换为布尔值是true,进入该条件语句。
		表达式值为真时,执行if控制的语句语句体只有一条语句时,可以不加{}
    }

	if else:
    if(条件表达式){
		语句一
    }else{
        条件隐式转换为布尔值为false时进入
    }

	if else if:
	if(条件1){
    }else if(条件2){
    }else if(条件3){
    }else{
    } 
    这种仅执行其中一个条件结果

	if if if :
	if(条件1){
    }
    if(条件2){
    }
    if(条件3){
    } //每个条件都会判断,根据判断结果执行对应的内容

2.switch语句
	switch(表达式){
        case 值1:
        // 当表达式绝对等于值1时执行这里的内容
        // break  跳出,如果不写break不判断值2是否相等,直接穿越
        break;
        case 值2:
          // 当表达式绝对等于值2时执行这里的内容
        break;
        case 值3:
          // 当表达式绝对等于值3时执行这里的内容
        break;
        case 值4:
          // 当表达式绝对等于值4时执行这里的内容
        break;
        default:
        // 默认以上条件都不满足时执行这里
    } 

	状态机:
	var status="";
    const RUN="run";
    const WALK="walk";
    const JUMP="jump";
    const FIRE="fire";
    status=RUN;
    switch(status){
        case RUN:
        console.log("跑步")
        break;
        case WALK:
        console.log("走路")
        break;
        case JUMP:
        console.log("跳跃")
        break;
        case FIRE:
        console.log("开火")
        break;
        default:
    }

循环语句
1.while语句
	语法格式:
	while(判断语句){
		循环体;
	}
	语句2

	while语句是一种先判断,后运行的循环语句。也就是说,必须满足条件了之后,方可运行循环体。
	例如:
	var i=1;     //赋初值语句
	while(i<=10) //控制循环条件
	{
		document.write("hello world!<br/>");  //循环体
		i++; //循环增量
	}
	关于while循环:
	while循环先判断表达式,后执行循环体。循环体有可能一次也不执行。
	循环体应包含有使循环趋向结束的语句;
	下列情况,退出while循环
	条件表达式不成立
	循环体内遇 break 

	九九乘法表:
	var col = 9,
    row = 9,
    i = 0,
    j = 0;
  	document.write("<table>");
  	while (j++ < row) {
    	i = 0;
    	document.write("<tr>");
    while (i++ < j) document.write("<td>" +j+"*"+i+"="+j*i + "</td>");
    document.write("</tr>");
  	}
  	document.write("</table>"); 
	
	深度遍历:
	var obj = {
		value: 1,
		link: {
		value: 2,
		link: {
			value: 3,
			link: {
			value: 4,
			link: {
				value: 5,
				link: {
				value: 6,
				link: {
					value: 7,
					link: {},
				},
				},
			},
			},
		},
		},
	};

  	while(obj.link){
    console.log(obj.value);
    obj=obj.link;
	} 

	var obj={
		value:1,
		a:{
			value:2,
			b:{
				value:3,
				c:{
					value:4,
					d:{
						value:5,
						e:{
							value:6,
							f:{
								value:7,
								g:{}
							}
						}
					}
				}
			}
		}
	}

	var arr=["a","b","c","d","e","f","g"];
	var i=0;
	var s=arr[0];
	while(obj[s]){
		console.log(obj.value);
		obj=obj[s];
		i++;
		s=arr[i];
	}

	求0-100所有质数:
	var j = 1,i=2,bool=true;
 	while (j++ < 100) {
		i = 2;
		bool = true;
		while (i < j) {
			if (j % i === 0) {
				bool = false;
				break;
			}
			i++;
		}
    if (bool) console.log(j);
  	}

	continue  继续:
	遇到满足条件的跳到下一次循环继续向后,当前continue后面的语句不执行
	var i=0;
    var sum=0;
    while(i++<10){
        if(i===5) continue;
        sum+=i; 
    }
    console.log(sum);//50

	var i=47;
    var str="";
    while(i++<122){
        if(i>57 && i<65) continue;
        if(i>90 && i<97) continue;
        str+=String.fromCharCode(i);
    }
    console.log(str);//a-z A-Z 0-9

2.do while语句
	
	赋初值1;
	do{
		循环体;2    
		循环增量;3   
	}while(循环条件);4
	do...while语句是一种先运行,后判断的循环语句。也就是说,不管条件是否满足,至少先运行一次循环体。

	var i=1;
	do{
		document.write("hello world!<br/>");  //循环体
		i++;
	}while(i<=10);

3.for 循环

	循环三要素:即表达式1,表达式2,表达式3
			(循环变量赋初值,循环判定条件,循环增量)
	循环体:需要重复执行的语句。
	for(表达式1;判断表达式2;表达式3)
	{循环体;}
	for(var i=0;i<100;i++){
		sum+=i;
	}
	1.循环需要变量的初始值仅执行一次,并且不一定需要使用var
	2.循环的条件是一个表达式,隐式转换布尔值为真时,进入循环
	3.表达式3为每次循环完成后执行循环增量,不一定是括号里最后的表达式:
		for(var i=0,sum=0;i++<100;sum+=i);
		//循环体写在了小括号内

	用for不用while的情况:
		while(i<100){
			if(i===50) continue;
			console.log(i);
			i++;
		}//当i增到50时,会死循环

		for(var i=0;i<100;i++){
			if(i===50) continue;
			console.log(i);
		}//不会出现死循环
	
	for死循环:
		for(;;){
		}
	
	for循环取2-100之间的质数:
		for(i=2,j,bool;i<100;i++){
			for(j=2,bool=true;j<100;j++){
				if(i%j===0){
					bool=false;
					break;
				}
			}
			if(bool)console.log(i);
		}

	for循环将字符串倒置:
		var str="abcdefghijklmnopqrstuvwxyz";
  		console.log(str.length);//字符串的长度
		var s="";
		for(var i=str.length-1;i>=0;i--){
    	s+=str[i];
		 }
		console.log(s);

	注意:
	注意当进行从大到小的循环时(i--),条件注意使用等号(=)的问题;
	在双重循环中,不要再内层中判断外层变量或者改变外层变量;
	如果使用break,不写跳出label,仅跳出当层循环;
	循环是同步的(即循环执行时,不会执行下面的代码);