【懿瑾】JS的学习笔记③-基础语法

98 阅读5分钟

3.1运算符(操作符)

算术运算符:+,-,*,/,%

当对非Number类型的值进行运算时,会将这些值转换成Number然后再运算。

任何值和NaN做运算都是NaN。

两个字符串相加就是拼接字符串(经常会用到)

 let result = "我来" + "测试"; //我来测试
 // 输出:我来测试

任何值和字符串相加,都会先转换为字符串再拼接。

 let result = 123 + "1"; //1231
 // 输出:1231

我们可以利用这个特点,后面加上一个空串,对其他数据进行转换,这是一种隐式类型转换。

实际上也是调用了String()函数

 let result = 123 + ""; //123

注意一些运算顺序:从左向右算

 result = 1 + 2 +"3";    //"33"
 result = "1" + 2 + 3;   //"123"

任何值做 - * /运算时都会自动转换为Number

可以利用这个特性进行隐式转换

 result = "123" - 0;     //123
 result = "456" * 1;     //456
 result = "789" / 1;     //789

3.1.1一元运算符

  • 只有一个操作数 “+”“-”

    • "+" 正号对数字没有影响
    • "-" 负号可以对数字进行取反

对于非Number类型的值会将其转换为Number再进行运算

可以利用这个特性进行Number类型转换

 a = "18";
 a = +a;     //Number的 18
  • 自增(++),自减(- -)

     let n1 = 10, n2 = 20;
     ​
     let n = n1++;
     console.log('n='+n);    //10
     console.log('n1='+n1);  //11
     ​
     n = ++n1;
     console.log('n='+n);    //12
     console.log('n1='+n1);  //12
     ​
     n = n2--;
     console.log('n='+n);    //20
     console.log('n2='+n2);  //19
     ​
     n = --n2;
     console.log('n='+n);    //18
     console.log('n2='+n2);  //18
    

3.1.2逻辑运算符

&& 与

和短路原则有关

如果第1个值为true,则返回第2个值

如果第1个值为false,则返回第1个值

 result = 2 && 3;    //3
 ​
 result = 4 && 6;    //6
 ​
 result = 0 && 3;    //0
 ​
 result = 9 && 0;    //0
 ​
 result = NaN && 0;  //NaN
 ​
 result = 0 && NaN;  //0

|| 或

如果第1个值为true,则返回第1个值

如果第1个值为false,则返回第2个值

! 非

都是先将其转换为布尔值再运算

可以进行两次非运算将其转换为布尔值,和调用Boolean()函数一样

“与”“或”运算中有短路逻辑

3.1.3 关系运算符

< , > , <= , >=

非数值数据先将其转换为Number再比较

任何值和NaN比较都是false

符号两边都是字符串的话,不会转换为Number比较,而是比较字符串的Unicode编码

比较字符编码时时一位一位进行比较

如果两位一样,则比较下一位,所以可以借用它来对英文进行排序,比较中文没有意义

注意:

再比较两个字符串数字时,一定要转型!!!

  console.log("342" &lt; +"78");

3.1.4 Unicode编码

  1. JS使用Unicode编码格式“\u四位16进制数”

     console.log("\u2620");
    
  2. 网页中使用Unicode编码格式:&#四位十进制数

     <h1>&#9760;</h1> 
    
  3. 筛子符号也在Unicode编码里面

3.1.5 相等运算符

  1. “==”相等

在比较时,大部分情况会转换成Number类型进行比较

 console.log("1" == 1);      //true
 console.log(null == 0);      //false

undefined衍生自null,所以他们两个相等

NaN和任何值都不相等,包括他自身

 console.log(null == undefined);      //true
 console.log(NaN == NaN);      //false

可以通过isNaN()函数来判断一个值是否为NaN

如果该值是NaN,则返回true,否则返回false。

 var b = NaN;
 console.log(isNaN(b));
  1. “!=”不相等

和相等正好是相反的

  1. “===”全等

和相等类似,不进行自动类型转换

类型和数值一样才返回true

 console.log(null === undefined);    //false
  1. “!==”不相等

和不相等类似,不进行自动类型转换

类型和数值一样才返回false

3.1.6 三元运算符

条件表达式?语句1:语句2

条件表达式为true执行语句1,为false执行语句2

非布尔值会转换为布尔值进行比较

3.1.6 运算符优先级

1668069222699.png 越靠上优先级越高,不用去记忆这个表

遇到优先级不清楚的,可以加括号

3.2 流程控制语句

3.2.1 分支语句

  1. If分支

     //语法1:
     if(条件表达式){
         //代码块
     }
     ​
     //语法2:
     if(条件表达式){
         //代码块
     }else{
         //代码块
     }
     ​
     //语法3:        
     if(条件表达式){
         //代码块
     }else if(条件表达式) {
         //代码块
     }...
    
  2. switch条件分支

     switch(条件表达式){
         case 表达式: 
             //代码块
             break;
         case 表达式: 
             //代码块
             break;
         default:
             //代码块
     }
    

    JS独有的方式,但是和if分支一样

     switch(true){
         case grade &gt;= 60:
             console.log("合格");
             break;
         default:
             console.log("不合格");
     }
    

3.2.2 循环语句

  1. while循环

     while(条件表达式){
         //代码块
     }
    
  2. Do while循环

     do{
         // 代码块
     }while(条件表达式)
    
  3. for循环

     for(初始化表达式 ; 条件表达式 ; 更新表达式){
         // 代码块
     }
    

3.2.4 Break 和 continue


Continue跳过本次循环,继续执行下一次循环

Break终止当前循环,有嵌套时,终止内层循环

在内层写break 想终止外层循环,可以使用label标识

 outer:                  //label名
 for(var i=0; i&lt;10; i++){
     console.log("外层循环"+ i);
     for(var j=0; j&lt;i; j++){
         break outer;
         console.log("内层循环"+ j);
     }
 }

3.2.5 用计时器测试性能

 // 在程序开始前,开启计时器
 // console.time("计时器的名字") 可以用来开启一个计时器
 // 它需要一个字符串作为参数,这个字符串将会作为计时器的标识 
 console.time("test");
 ​
 // 需要测试的代码块
 //终止计时器
 // console.timeEnd() 用来停止一个计时器,需要计时器的名字作为参数
 console.timeEnd("test");

3个小练习

1668069594167.png

1668069618307.png

1668069626689.png