2 - 语法、规范、错误、运算符、判断分支、注释

162 阅读4分钟

一、项目常出现的报错:

1. 语法错误:SyntaxError

  1. 所有语句都不会执行。

2.声明错误:ReferenceError

  1. 产生的原因:变量未经声明就进行使用或函数未经声明就进行调用。
  2. 错误语句之前的语句会执行,之后的不会执行。
  3. 不同脚本块相互独立,错误不会互相影响。

二、运算符:+ - * / ++ -- %

1.知识点:

  1. a++(a--):在运算后自增(自减)1;
  2. ++a(--a):在运算前自增(自减)1;
  3. 、<、==、===、!=、!==(比较运算符):

  • 比较的数值类型包含number类型的,会转换成number类型比较;
  • 比较的数值类型为string类型,则从左往右比较字符串对应的ASCII码;
  • ==:相等比较数值,不看数据类型,数值相等返回true;NaN与包括自己在内的任何东西都不相等,即NaN与任何东西比较都返回false
  • ===:全等要数值、数据类型一样才返回true;
  1. 表达式中包含运算符的运算,会把变量通过Number()隐式转换成number类型再进行运算,不能转换为number类型的数值,则会变成NaN。
类型结果->Number(类型)
true1
false0
null0
[ ]0
""0
{ }NaN
undefinedNaN

2.运算符demo:

2.1 + - * / :

/**
* +、-(加/减操作符)
* 1. + ,如果表达式中包含字符串,+就是连接符;如果表达式中只包含number类型,+就是进行加法运算
* 2. - * /, 如果表达式中包含字符串,会调用Number()隐式转换转换成number类型再进行运算,如果不能
*    转换为number类型,则会变成NaN
**/
// +
var a = 1 + "2" ; // "12" -> 连接符
var b = 1 + 2 ; // 3 -> 加号

// - * /
var c = 5 - 2 ; // 3
var d = 5 - "2t"; // NaN
var e = 1 + true; // 2 -- Number(true) = 1 ;
var e = 1 + false; // 1 -- Number(false) = 0 ;
var f = 5 * '5'; // 25
var g = 6 / '2t'; // NaN
var h = 1 / 0; // Infinity (正无穷)
var h = 1 / -0; // -Infinity (负无穷)

2.2 ++、--(递增/递减):

/**
* 1. a++(a--):在运算后自增(自减)1
* 2. ++a(--a):在运算前自增(自减)1
**/

var a = 1;
console.log(a++); // 1 --> 在运算后自增1,所以还是1
console.log(a); // 2
console.log(++a); // 3 --> 在运算前自增1,,所以还是2+1=3

var a = 5,
    b ; 
b = --a + (a--); // 8 --> 4 + 4 

2.3 %(取模/取余)

5 % 4 = 1; // 5 / 4 = 1 余1 ,所以模为1
6 % 2 = 0; //6可以整除2,没有余数,所以模为0
4 % 5 = 4; // 4比5小,取模,直接取小的数值
2 % 7 = 2; //2

2.4 >、<、==、===、!=、!==:结果返回boolean类型-->true,false

  • number类型比较:比较数值大小;
  • string类型比较:比较字符串对应的ASCII码(字符相对应的十进制代码),多个字符的,从左往右依次对比,直到比较出ASCII码的大小为止;
  • 含有number类型或者boolean类型的,先转换成number类型再进行比较,如果不能转换成number类型,则是NaN,那它们比较的结果都为false;
  • == :判断数值是否相等;===:判断数值、数据类型是否相等,有一个不同都返回false;
// 1.number类型比较:
var a  = 1 > 2 ; // false
var b = 2 > true ; //true --Number(true) = 1;

// 2.string类型比较:比较字符串对应的ASCII码,多个字符的,从左往右依次对比,
// 直到比较出ASCII码的大小为止
var a = 'a' > 'b'; //false a对应的ASCII码-10 < b对应的ASCII码-11
var b = 'abc' > 'aab'; // true 按顺序逐个比较字符的ASCII码 b->11 > a->10

//3.含有number类型或者boolean类型的比较
var a = 1 > 'a'; // false Number('a') -> NaN
var b = 1 < 'a' ; //false Number('a') -> NaN
var c = 2 > true; //true Number(true) -> 1

//4. == 与 ===
1 == true ; // true Number(true) -> 1
1 === true ; // false ,1:number类型;true:boolean类型

image.png

2.5 &&、|| 、!

  • undefined、null、NaN、''、0、false,为假,除以上之外都为真。

2.5.1 && :与运算符

  • 遇到真就往后走;
  • 遇到假或者走到最后就返回当前值;
  • 用 &&表达式印证if判断:表达式里面所有的值都为true才返回true,有一个值为false都返回false;
var a = true && ''; // '' -> false
var a = 'str' && NaN; // NaN -> false

//表达式里面所有的值都为true才返回true,有一个值为false都返回false
//true:真,'':假,遇到真就往后走,遇到假或者走到最后就返回当前值;遇到''为假,所以返回false
if(true && ''){
  console.log("真-true")
}else{
  console.log("假-false")
}

//打印结果:假-false
//因为 true && '' --> '';''为false,所以打印"假-false"

2.5.2 || :或运算符

  • 遇到假就往后走;
  • 遇到真或者走到最后就返回当前值;
  • 用 || 表达式印证if判断:表达式里面只要有一个值为true都返回true;
var a = true || ''; // '' -> true
var a = 'str' || NaN; // 'str' -> true

//表达式里面只要有一个值为true都返回true
//'str':真,遇到真或者走到最后就返回当前值;所以返回'str'
if('str' || NaN){
  console.log("真-true")
}else{
  console.log("假-false")
}

//打印结果:真-true
//因为 'str' || NaN --> 'str';'str'true,所以打印"真-true"

2.5.3 !:非运算符

  • !逻辑非操作符->取反
  • !表达式的值会转换为boolean类型再取反: !value -> ! Boolean(value)
!null; // true --> Boolean(null) -> false ; !false -> true (false取反)
!1; //false --> Boolean(1) -> true ; !true -> false (true取反)

三、判断分支:if 、switch

判断分支的使用:一般要判断值范围的,或者条件是多个的时候用if判断比较好,如果值是固定的多个值用switch语句比较好;

// if
var a = 60;
if(a > 50 && a < 70){
  console.log("在范围内。");
}else{
  console.log("不在范围内。");
}

// switch
switch (type) {
  case "已认证": // --> type的值
    return "success"; // 返回结果
    break;    // 终止循环,所在的循环体已结束;
  case "未认证":
    return "warning";
    break;
}

四、注释: // 单行注释 /**/多行注释

// 单行注释

/**
* 多行注释
*
*/