• JavaScript基础02(运算符优先级及流程控制语句)


    一、位运算

    一般在c++等编译型代码中使用可以大大地提高效率,js是解释型语言,使用位运算的主要原因是:代码不易于人看到,用于专项的处理内容

    1.位与&

    console.log(25&34);//0
    //011001
    //100010
    //000000
    console.log(6&7);//6  任何数与2^n-1位与等于这个数本身
    console.log(37&7);//5

    2.位或|

    //1|1=1 0|1=1 1|0=1 0|0=0
    //6|7=7
    console.log(25|34);//59
    //011001
    //100010
    //111011=59

    3.异或^

    console.log(6^7);//1
    //110
    //111
    //001
    console.log(0^0);  //0相同为0,不同为1
    //异或处理一般用于加密解密
    //左边是原密码,右边是钥匙,得出的是加密后的密码
    console.log(3627^1234);//2809
    console.log(2809^1234);//3627

    4.位非~

    //与二进制没有关系,加一取负
    //~1=-2
    //~10=-11
    //~-5=4
    ​
    var str= "abcdef";
    console.log(str.indexOf("d"));//3
    console.log(str.indexOf("g"));//没找到,返回-1
    //可以判断该字符串是否有某个字符
    if(~str.indexOf('g')){    为false
        //不能进入
    }
    if(!~str.indexOf('g')){  为false
        //能进入
    }

    5.左移位运算<<

    var a=3;
    a<<=2;
    console.log(a);//12
    var a=1;
    for(var i=0;i<5;i++){
        a<<=1;
        console.log(a);//2 4 8 16 32
    }  

    6.右移位运算>>

    var a=5;
    a>>=1;
    console.log(a);//2

    二、三目运算

    var a=3>2?1:0;
    //判断条件是否成立,如果成立返回第一个值
    //问号前面的内容会自动隐式转换成布尔值
    //三目运算符比赋值运算优先级高
    //当需要返回的是布尔值时,不要使用三目运算符
    var a=3>2?true:false;//改成 var a=3>2;
    console.log(a);//1
    ​
    var a=1;
    a=--a?a++:++a;
    console.log(a);//1
    ​
    var a=2;//3,4,5
    b=a-=  1?a++:++a;//赋值优先级比三目运算符还低
    console.log(b);//都为0
    ​
    var a=2;
    c=(a-=1)?a++:++a;
    console.log(c);//1
    ​
    var div0=document.getElementById("div0");
    var lables=document.getElementById("lables");
    div0.onclick=function(){
        lables.style.color=div0.checked ? "red" :"green";
    } 

    三、运算符优先级

    . [] () 字段访问、数组下标、函数调用以及表达式分组

    ++ -- - ~ ! delete new typeof void 一元运算符、返回数据类型、对象创建、未定义值

    */ % 乘法、除法、取模

    +、-、+加法、减法、字符串连接

    << >> >>> 移位

    < <= > >= instanceof 小于、小于等于、大于、大于等于、instanceof

    == != === !== 等于、不等于、严格相等、非严格相等

    & 按位与

    ^ 按位异或

    | 按位或

    && 逻辑与

    || 逻辑或

    ? : 条件

    = oP= 赋值、运算赋值

    , 多重求值

    四、流程控制语句

    1.if语句

    var a=1;
    if(a*=10){
        console.log(a);
    }
    //在这里,条件不管什么表达式都会被隐式转换成布尔值
    //!在条件语句中大量用!配合使用
    if(条件){
    //如果条件表达式运算后隐式转换为布尔值是true,进入该条件
    }
    ​
    if(条件){
    ​
    }else{
        // 条件隐式转换为布尔值为false时进入
    }
    ​
    if(条件1){
    ​
    }else if(条件2){
    ​
    }else if(条件3){
    ​
    }else{
    ​
    } 
    // 这种仅执行其中一个条件结果
    ​
    if(条件1){
    ​
    }
    if(条件2){
    ​
    }
    if(条件3){
    ​
    } 
    // 每个条件都会判断,根据判断结果执行对应的内容
    ​
    var x,y;
    if(x<0) x=0;
    if(x+50>500) x=500-50;
    if(y<0) y=0;
    if(y+50>500) y=500-50;

    2.多分支结构语句

    switch(表达式){
        case 值1:
        // 当表达式绝对等于值1时执行这里的内容
        // break跳出,如果不写break不判断值2是否相等,直接穿越
        break;
        case 值2:
        // 当表达式绝对等于值2时执行这里的内容
        break;
        case 值3:
        // 当表达式绝对等于值3时执行这里的内容
        break;
        case 值4:
        // 当表达式绝对等于值4时执行这里的内容
        break;
        default:
        // 默认以上条件都不满足时执行这里
    } 
    ​
    var a=1;
    switch(a){
        case 1:
        console.log("AAA");
        break;
        case 2:
        console.log("BBB");
        break;
        default:
        console.log("CCC");
    } 
    ​
    // 状态机
    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:
    } 
    ​
    var score=prompt("请输入你的成绩");
    switch(parseInt(score/10)){
        case 9:
        console.log("优秀");
        break;
        case 8:
        console.log("良好");
        break;
        case 7:
        console.log("一般");
        break;
    } 
            
    switch(true){
        case score>=90 && score<=100:
        console.log("优秀");
        break;
        case score>=80:
        break;
        case score>=70:
        break;
        case score>=60:
        break;
        default:    
    } 

    3.while循环

    var i=-1;
    // 条件表达式都是将结果转换为布尔值
    while(i++<9) document.write("<div>"+i+"</div>");
    ​
    var i=0,sum=0;
    while(i++<100) sum+=i;
    console.log(sum);//5050
    ​
    // 打印十行十列星星
    var j=0,i;
    while(j++<10){
        i=0;
        while(i++<10) document.write("*");
        document.write("<br>");
    }
    ​
    // 打印列表
    var j = 0,
        i;
    document.write("<ul>");
    while (j++ < 10) {
        i = 0;
        document.write("<li>第" + j + "章<ul>");
        while (i++ < 10) document.write("<li>第" + i + "节</li>");
        document.write("</ul></li>");
    }
    document.write("</ul>"); 
    ​
    // 打印三角形
    var j = 0,
        row=10,
        col=20,
        i,n;
    while (j++ < row) {
        n = 0;
        while (n++ < row-j) document.write(" ");
        i = 0;
        while (i++ < j*2-1) document.write("*");
        document.write("<br>");
    } 
    ​
    //   打印表格
    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>"); 
    // break;  跳出
    ​
    var i=0;
    while(true){
        if(i>50) break;
        console.log(i);
        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);
    } 
    ​
    var i=0;
    var j=0;
    //   循环前增加id:
    xietian:while(i++<10){
        j=0;
        while(j++<10){
        //   break 跳出到指定的id位置
            if(i*j>50) break xietian;
        }
    }
    console.log(i,j); 
    ​
    var i = 1,
        j = 0,
        n = 0;
    abc: while (j < 10) {
              n = 0;
              while (n < 10) {
              if (i * i * i + j * j * j + n * n * n === i * 100 + j * 10 + n)
                  break abc;
                  n++;
              }
              j++;
          }
    console.log(i * 100 + j * 10 + n); 
    ​
    // continue  继续  遇到满足条件的跳到下一次循环继续向后,当前continue后面的语句不执行
            
    var i=0;
    var sum=0;
    while(i++<10){
        if(i===5) continue;
        sum+=i; 
    }
    console.log(sum); 
    ​
    // console.log("azAZ09".charCodeAt(5));
    // a  97
    // z  122
    // A  65
    // Z  90
    //0   48
    //9   57
    // console.log(String.fromCharCode(97));
    ​
    // 当整个循环中遇到阶段性不需要执行的内容可以使用continue
    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);
    //   广度遍历,深度遍历
    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];
    } 
    ​
    var tree={
        left:{
            value:1,
            left:{
    ​
            },
            right:{
    ​
            }
        },
        right:{
            value:2,
            left:{
    ​
            },
            right:{
                    
            }
        }
    } 

    4.do while

    var i=0;
    do{
    document.write("<div>"+i+"</div>");
    }while(i++<10);//0到10的div,因爲先執行后判斷
    ​
    var i=0;
    do{
    document.write("<div>"+i+"</div>");
    i++;
    }while(i<10);//0~9
    ​
    var i=0;
    do{
    document.write("<div>"+i+"</div>");
    }while(++i<10);//0~9
    //do while使用++i在條件裏,while使用i++
    //不管條件是否滿足,至少執行一次語句

    5.for循環

    var sum=0;
    // for(循环需要变量的初始值;循环的条件(当满足条件时执行语句块);变量不断向条件外变化)
    // 1、循环需要变量的初始值仅执行一次,并且不一定需要使用var
    // 2、循环的条件是一个表达式,隐式转换为布尔值,为真时进入语句块,根据循环次数判断多少次
    // 3、变量不断向条件外变化(这个理解比较片面)。每次循环完成后执行的语句内容
    for(var i=0;i<100;i++){
        sum+=i;
    }
    console.log(sum);
    ​
    var j;//放在上面定義
    for(var i=0;i<100;i++){
        for(j=0;j<100;j++){
        
        }
    }
    ​
    //循環條件的表達式隱式轉換為布爾值,爲真則進入循環
    //每次循環完成后執行的語句内容
    for(var i=0,sum=0;i++<100;sum+=i)
    console.log(sum);
    ​
    var i=0;
    while(i<100){
        if(i===50)continue;
        console.log(i);
        i++;//在使用continue時必須放在continue前,這樣會產生問題,因爲先加了一,使用for循環時不會出現這樣的死循環的現象
    }
    ​
    for的死循環
    for(;;){
        
    }
    for(;obj.link;obj=obj.link)console.log(obj.value);//使用for循環實現對象的深遍歷
    ​
    //0-100的質數
    for(var i=2,j,bool;i<100;i++){
        for(j=2,bool=true;j<i;j++){
            if(i%j===0){
                bool=false;
                break;
            }
        }
        if(bool)console.log(i);
    }
    ​
    //打印表格
    var row=10;
    var col=10;
    var str="<table>";
    for(var i=0,j;i<row;i++){
        str+="<tr>";
        for(j=0;j<col;j++){
            str+="<td></td>";
        }
        str+="</tr>";
    }
    str+="</table>";
    document.body.innerHTML=str;
    ​
    //打印水仙花數
    for(var i=100,a,b,c;i<1000;i++){
        a=parseInt(i/100);
        b=parseInt(i/10)%10;
        c=i%10;
        if(a*a*a+b*b*b+c*c*c===i)console.log(i);
    }
    ​
    //字符串倒裝
    var str="ljshdjdafhklwqjx cnkds";
    //str.length  str[5]
    var s="";
    for(var i=str.length-1;i>=0;i--){
        s+=str[i];
    }
    console.log(s);
    ​
    //for循環中的break
    for(var i=0;i<10;i++){
        if(i===3)continue;
        if(i===5)break;
    }
    tag:for(var i=0,j;i<10;i++){
        for(j=0;j<10;j++){
            if(i*j>50)break tag;
        }
    }
    //注意:儅進行反向循環時,條件注意=的問題
    //在雙重循環時,不要在内層中判斷外層變量或者改變外層變量
    //如果使用break時,不寫跳出label,它僅跳出當前循環
    //循環是同步的,是同時的,在一個時間内瞬間一起運行
    //循環不能次數超過十億
    //循環不能嵌套太多
    console.log("a");
    for(var i=0;i<1000000000;i++){
        
    }
    console.log("b");
    ​
    for(var i=0;i<10000;i++){
       for(var j=0;j<10000;j++){
    ​
       }
    }
    console.log("b"); 

     

  • 相关阅读:
    CentOS6找回root密码
    Python3——装饰器及应用(这个属于详细的)
    python3 类的相关内容
    python--- 解释‘yield’和‘Generators(生成器)
    Python 基本类型:元组,列表,字典,字符串,集合 梳理总结
    python3 推导式大总结
    Python3 的描述符--完整例子详细解释
    类 Class 对象、定义、方法
    Python3基础 __repr__ 类的实例对象的名字 可以打印文字(2)
    Python3基础 __repr__ 类的实例对象的名字 可以打印文字(1)
  • 原文地址:https://www.cnblogs.com/ananasfleisch/p/13275529.html
Copyright © 2020-2023  润新知