1.1 运算符的分类
JavaScript中常用的运算符有:算数运算符递增和递减运算符比较运算符逻辑运算符赋值运算符
1.2 算数运算符
- 浮点数的精度问题
浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数。var result = 0.1 + 0.2; // 结果不是 0.3,而是:0.30000000000000004console.log(0.07 * 100); // 结果不是 7, 而是:7.000000000000001
1.3 递增和递减运算符
**注意**:递增和递减运算符必须和变量配合使用。
递增运算符
- 前置递增运算符
- ++num 前置递增,就是自加1,类似于 num = num + 1,但是 ++num 写起来更简单。
使用口诀:先自加,后返回值
var num = 10;alert(++num + 10); // 21
后置递增运算符
- num++ 后置递增,就是自加1,类似于 num = num + 1 ,但是 num++ 写起来更简单。
- 使用口诀:先返回原值,后自加
var num = 10;alert(10 + num++); // 20
1.4 比较运算符
- 比较运算符返回值布尔类型
- 等号比较
console.log(18 == '18');//trueconsole.log(18 === '18'); //flase 全等要求值和数据类型一致
= //赋值 把右边给左边== //判等 判断两边值是否相等(有隐式转换)== //全等 判断两边的值和数据类型是否完全相同
1.5 逻辑运算符
- 逻辑与&&
- 两边都是 true才返回 true,否则返回 false
var a = 2 > 1 && 3 > 1;//truevar a = 2 > 1 && 3 < 1;//flase
//如果第一个表达式的值为真,则返回表达式2console.log( 123 && 456 ); // 456//如果第一个表达式的值为假,则返回表达式1console.log( 0 && 456 ); // 0
- 逻辑或 ||
- 两边都是 true才返回 true,否则返回 false
var a = 2 > 3 || 1 < 2;//truevar a = 2 > 3 || 1 > 2;//flase
如果第一个表达式的值为真,则返回表达式1console.log( 123 || 456 ); // 123如果第一个表达式的值为假,则返回表达式2console.log( 0 || 456 ); // 456
逻辑非 !
逻辑非(!)也叫作取反符,用来取一个布尔值相反的值,如 true 的相反值是 falsevar isOk = !true;console.log(isOk); // false
短路运算(逻辑中断)
短路运算的原理:当有多个表达式(值)时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值;- 逻辑与 &遇到false 就不执行 一假及为假
``` 如果第一个表达式的值为真,则返回表达式2 ```
如果第一个表达式的值为假,则返回表达式1
console.log( 123 && 456 ); // 456console.log( 0 && 456 ); // 0console.log( 123 && 456&& 789 ); // 789
- 逻辑或
- 语法: 表达式1 || 表达式2
- 一真及为真
- 逻辑或||遇到true 就不执行
如果第一个表达式的值为真,则返回表达式1如果第一个表达式的值为假,则返回表达式2
console.log( 123 || 456 ); // 123console.log( 0 || 456 ); // 456console.log( 123 || 456 || 789 ); // 123
- 一元运算符里面的逻辑非优先级很高
- 逻辑与比逻辑或优先级高
1.6 赋值运算符
概念:用来把数据赋值给变量的运算符。
var age = 10;age += 5; // 相当于 age = age + 5;age -= 5; // 相当于 age = age - 5;age *= 10; // 相当于 age = age * 10;
2.0 流程控制
2.1 三元表达式
语法结构
表达式1 ? 表达式2 : 表达式3;
执行思路
- 如果表达式1为 true ,则返回表达式2的值,如果表达式1为 false,则返回表达式3的值
- 简单理解: 就类似于 if else (双分支) 的简写
2.2 switch分支流程控制
switch小括号里面的值要与case里的值全等
switch( 表达式 ){case value1:// 表达式 等于 value1 时要执行的代码break;case value2:// 表达式 等于 value2 时要执行的代码break;default:// 表达式 不等于任何一个 value 时要执行的代码}
- 关键字 switch 后面括号内可以是表达式或值, 通常是一个变量
- 关键字 case , 后跟一个选项的表达式或值,后面跟一个冒号
- switch 表达式的值会与结构中的 case 的值做比较
- 如果存在匹配全等(===) ,则与该 case 关联的代码块会被执行,并在遇到 break 时停止,整个 switch 语句代码执行结束
- 如果所有的 case 的值都和表达式的值不匹配,则执行 default 里的代码
注意: 执行case 里面的语句时,如果没有break,则继续执行下一个case里面的语句。
2.3 switch 语句和 if else if 语句的区别
- 一般情况下,它们两个语句可以相互替换
- switch…case 语句通常处理 case为比较确定值的情况, 而 if…else…语句更加灵活,常用于范围判断(大于、等于某个范围)
- switch 语句进行条件判断后直接执行到程序的条件语句,效率更高。而if…else 语句有几种条件,就得判断多少次。
- 当分支比较少时,if… else语句的执行效率比 switch语句高。
- 当分支比较多时,switch语句的执行效率比较高,而且结构更清晰。
3.0 数据类型
3.1 数据类型的分类
- 简单数据类型 (Number,String,Boolean,Undefined,Null)
- 复杂数据类型 (object)
3.2 数字型 Number
JavaScript 数字类型既可以用来保存整数值,也可以保存小数(浮点数)。
var age = 21; // 整数var Age = 21.3747; // 小数
数字型进制
最常见的进制有二进制、八进制、十进制、十六进制。
// 1.八进制数字序列范围:0~7var num1 = 07; // 对应十进制的7var num2 = 019; // 对应十进制的19var num3 = 08; // 对应十进制的8// 2.十六进制数字序列范围:0~9以及A~Fvar num = 0xA;
3.3 isNaN
用来判断一个变量是否为非数字的类型,返回 true 或者 false
var usrAge = 21;var isOk = isNaN(userAge);console.log(isNum); // false ,21 不是一个非数字var usrName = "andy";console.log(isNaN(userName)); // true ,"andy"是一个非数字
3.4 字符串型 String
字符串型可以是引号中的任意文本,其语法为 双引号 “” 和 单引号’’
var strMsg = "奥里给"; // 使用双引号表示字符串var strMsg2 = '奥里给~'; // 使用单引号表示字符串// 常见错误var strMsg3 = 奥里给; // 报错,没使用引号,会被认为是js代码,但js没有这些语法
3.5 字符串转义符
类似HTML里面的特殊字符,字符串中也有特殊字符,我们称之为转义符。
转义符都是 \ 开头的,常用的转义符及其说明如下:
| 转义符 | 解释说明 |
|---|---|
| \n | 换行符,n 是 newline 的意思 |
| \ \ | 斜杠 \ |
| ‘ | ‘ 单引号 |
| “ | ”双引号 |
| \t | tab 缩进 |
| \b | 空格 ,b 是 blank 的意思 |
3.6 字符串长度
字符串是由若干字符组成的,这些字符的数量就是字符串的长度。通过字符串的 length 属性可以获取整个字符串的长度。
var strMsg = "我是!";alert(strMsg.length); // 显示 3
3.7 字符串拼接
console.log('我' + 18); // 只要有字符就会相连var age = 18;console.log('我' + age); // 我18console.log('我' + age + '岁啦'); // 我18岁啦
+ 号总结口诀:数值相加 ,字符相连
- 经常会将字符串和变量来拼接,变量可以很方便地修改里面的值
- 变量是不能添加引号的,因为加引号的变量会变成字符串
- 如果变量两侧都有字符串拼接,口诀“引引加加 ”,删掉数字,变量写加中间
3.8 布尔型Boolean
布尔类型有两个值:true 和 false ,其中 true 表示真(对),而 false 表示假(错)。
布尔型和数字型相加的时候, true 的值为 1 ,false 的值为 0。
console.log(true + 1); // 2console.log(false + 1); // 1
3.9 Undefined和 Null
一个声明后没有被赋值的变量会有一个默认值undefined ( 如果进行相连或者相加时,注意结果)
var variable;console.log(variable); // undefinedconsole.log('你好' + variable); // 你好undefinedconsole.log(11 + variable); // NaNconsole.log(true + variable); // NaN
一个声明变量给 null 值,里面存的值为空
var vari = null;console.log('你好' + vari); // 你好nullconsole.log(11 + vari); // 11console.log(true + vari); // 1
4.0 数据类型转换
4.1转换为布尔型
- 代表空、否定的值会被转换为 false ,如 ‘’、0、NaN、null、undefined
- 其余值都会被转换为 true
console.log(Boolean('')); // falseconsole.log(Boolean(0)); // falseconsole.log(Boolean(NaN)); // falseconsole.log(Boolean(null)); // falseconsole.log(Boolean(undefined)); // falseconsole.log(Boolean('小白')); // trueconsole.log(Boolean(12)); // true
4.2 转换为字符串
toString() 和 String()alert(num.toString());alert(String(num));还有+号字符串拼接
4.3 转换为数字型
parseInt String()函数//将String转换成整数类型parseFloat String()函数//将String转换成浮点类型Number()强制转换函数//将String转换成数值类型隐式转换( - * /)//利用算数转换为数字类型
