02-语法、错误、规范

js中的运算权重。括号运算 > 普通运算 > 赋值

+ - * /

  1. 加法运算 +,
    1. 包含数字的数学运算,
    2. 字符串拼接,字符串加任何数据类型都转换为字符串
  2. 除法运算 /
    1. c = 0 / 0, c为NaN
    2. 0 / 0 // NaN not a number,
    3. 1 / 0 // infinity
    4. -1 / 0 // -infinity
  3. 取模运算:%
  4. 乘法运算:*

交换值的问题

1
2
3
4
5
var a = 3,
b = 4;
a = a + b; // 7
b = a - b; // 3
a = a - b; // 4
>

++ –

1
2
3
4
var a = 5,
b;
b = --a + a++;
console.log(a, b); // 8, 5

运算符在前面加减再运算,在后面相反,先运算,再加减

比较运算符

><<=>======!=!==

数字类型的值直接比较,如果是字符串类型,先转换为字符串相对应的ASCII码(字符相对应的十进制代码),多个字符的,从左到右一次对比,直到比较出ASCII码的大小为止

1
2
3
4
5
number - number
number - string string -> number
var bool = '3' > 2 // true
var bool = 3 > 2; // true
var bool = '4.5' > 'a'; // 字符串转 ASCII码再比较
  • ==不判断数据类型
  • ===会严格区分数据类型
  • !=与==类似,不判断数据类型
  • !== 区分数据类型

    语句

    if语句

    当if语句要考虑,互斥性,如果每一个条件都是互斥的,使用else if
1
2
3
4
5
6
7
8
9
10
11
12
13
// 当成绩满足了其中一个条件的时候,剩下的判断会直接跳过

// 同时我们还应该将问题考虑全面,考虑到数据出现问题的情况,将所有出现的可能都进行处理,比如成绩出现问题,大于100,或者为负数的错误情况
var score = 78;
if (score <= 100 && score >=90) {
console.log('你的成绩为A');
} else if (score >=70 && score < 90) {
console.log('你的成绩为B');
} else if (score >= 0 && score < 70) {
console.log('你的成绩为C');
} else {
console.log('你的成绩计算出现异常!');
}

Switch case 语句

适合判断一个定值,并且当条件有三个或以上时,更加直观

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var city = window.prompt('输入你的城市!')

switch (city) {
case '北京':
console.log('19K');
break;
case '广州':
console.log('15K');
break;
case '深圳':
console.log('17K');
break;
default:
console.log('10K');
}

错误

  • SyntaxError语法错误,代码不执行
  • ReferenceError,在作用域中找不到变量,报引用错误,前面的代码可以执行
  • TypeError,作用域判别成功了,但是对结果的操作是非法或不合理的

    逻辑运算

    与&& 或|| 非!
    undefined 、 null 、NaN 、’ ‘ 、0、false是假,其他的都是真,例如1是真,2其实也是真
1
2
3
4
var a = 1 && 2; // 2
与运算,遇到真就继续往后走,直到遇到假,或者走到最后就返回当前值
var b = 0 || null || 1 || 0; // 1
或运算,遇到假继续往后走,直到遇到真,或者走到最后就返回当前值