是指我们存储在内存中的数据的类型
我们通常分为两大类 基本数据类型 和 复杂数据类型
基本数据类型
1. 数值类型(number)
- 一切数字都是数值类型(包括二进制,十进制,十六进制等)
- NaN(not a number),一个非数字
2. 字符串类型(string)
- 被引号包裹的所有内容(可以是单引号也可以是双引号)
3. 布尔类型(boolean)
- 只有两个(true 或者 false)
4. null类型(null)
- 只有一个,就是 null,表示空的意思
5. undefined类型(undefined)
- 只有一个,就是 undefined,表示没有值的意思
判断数据类型
既然已经把数据分开了类型,那么我们就要知道我们存储的数据是一个什么类型的数据
使用 `typeof` 关键字来进行判断
// 第一种使用方式
var n1 = 100;
console.log(typeof n1);
// 第二种使用方式
var s1 = 'abcdefg';
console.log(typeof(s1));
判断一个变量是不是数字
可以使用 `isNaN` 这个方法来判断一个变量是不是数字
`isNaN` :is not a number
// 如果变量是一个数字
var n1 = 100;
console.log(isNaN(n1)); //=> false
// 如果变量不是一个数字
var s1 = 'Jack'
console.log(isNaN(s1)); //=> true
数据类型转换
数据类型之间的转换,比如数字转成字符串,字符串转成布尔,布尔转成数字等
其他数据类型转成数值
1. `Number(变量)`
- 可以把一个变量强制转换成数值类型
- 可以转换小数,会保留小数
- 可以转换布尔值
- 遇到不可转换的都会返回 NaN
2. `parseInt(变量)`
- 从第一位开始检查,是数字就转换,知道一个不是数字的内容
- 开头就不是数字,那么直接返回 NaN
- 不认识小数点,只能保留整数
3. `parseFloat(变量)`
- 从第一位开始检查,是数字就转换,知道一个不是数字的内容
- 开头就不是数字,那么直接返回 NaN
- 认识一次小数点
4. 除了加法以外的数学运算
- 运算符两边都是可运算数字才行
- 如果运算符任何一遍不是一个可运算数字,那么就会返回 NaN
- 加法不可以用
其他数据类型转成字符串
1. `变量.toString()`
- 有一些数据类型不能使用 `toString()` 方法,比如 undefined 和 null
2. `String(变量)`
- 所有数据类型都可以
3. 使用加法运算
- 在 JS 里面,`+` 由两个含义
- 字符串拼接: 只要 `+` 任意一边是字符串,就会进行字符串拼接
- 加法运算:只有 `+` 两边都是数字的时候,才会进行数学运算
其他数据类型转成布尔
`Boolean(变量)`
- 在 js 中,只有 `''`、`0`、`null`、`undefined`、`NaN`,这些是 false,其余都是 true
运算符
就是在代码里面进行运算的时候使用的符号,不光只是数学运算,我们在 js 里面还有很多的运算方式
1.数学运算符
1. `+`
- 只有符号两边都是数字的时候才会进行加法运算
- 只要符号任意一边是字符串类型,就会进行字符串拼接
2. `-`
- 会执行减法运算
- 会自动把两边都转换成数字进行运算
3. `*`
- 会执行乘法运算
- 会自动把两边都转换成数字进行运算
4. `/`
- 会执行除法运算
- 会自动把两边都转换成数字进行运算
5. `%`
- 会执行取余运算
- 会自动把两边都转换成数字进行运算
2.赋值运算符
=
- 就是把 `=` 右边的赋值给等号左边的变量名
- var num = 100
- 就是把 100 赋值给 num 变量
- 那么 num 变量的值就是 100
+=
var a = 10;
a += 10;
console.log(a); //=> 20
`a += 10` 等价于 `a = a + 10`
-=
var a = 10;
a -= 10;
console.log(a); //=> 0
*=
```var a = 10;
a *= 10;
console.log(a); //=> 100
/=
var a = 10;
a /= 10;
console.log(a); //=> 1
`a /= 10` 等价于 `a = a / 10`
`%=`
var a = 10;
a %= 10;
console.log(a); //=> 0
`a %= 10` 等价于 `a = a % 10`
3.比较运算符
1. `==`
- 比较符号两边的值是否相等,不管数据类型
- `1 == '1'`
- 两个的值是一样的,所以得到 true
2. `===`
- 比较符号两边的值和数据类型是否都相等
- `1 === '1'`
- 两个值虽然一样,但是因为数据类型不一样,所以得到 false
3. `!=`
- 比较符号两边的值是否不等
- `1 != '1'`
- 因为两边的值是相等的,所以比较他们不等的时候得到 false
4. `!==`
- 比较符号两边的数据类型和值是否不等
- `1 !== '1'`
- 因为两边的数据类型确实不一样,所以得到 true
5. `>=`
- 比较左边的值是否 大于或等于 右边的值
- `1 >= 1` true
- `1 >= 0` true
- `1 >= 2` false
6. `<=`
- 比较左边的值是否 小于或等于 右边的值
- `1 <= 2` true
- `1 <= 1` true
- `1 <= 0` false
7. `>`
- 比较左边的值是否 大于 右边的值
- `1 > 0` true
- `1 > 1` false
- `1 > 2` false
8. `<`
- 比较左边的值是否 小于 右边的值
- `1 < 2` true
- `1 < 1` false
- `1 < 0` false
4.逻辑运算符
1. `&&`
- 进行 且 的运算
- 符号左边必须为 true 并且右边也是 true,才会返回 true
- 只要有一边不是 true,那么就会返回 false
- `true && true` true
- `true && false` false
- `false && true` false
- `false && false` false
2. `||`
- 进行 或 的运算
- 符号的左边为 true 或者右边为 true,都会返回 true
- 只有两边都是 false 的时候才会返回 false
- `true || true` true
- `true || false` true
- `false || true` true
- `false || false` false
3. `!`
- 进行 取反 运算
- 本身是 true 的,会变成 false
- 本身是 false 的,会变成 true
- `!true` false
- `!false` true
5.自增自减运算符(一元运算符)
`++`
1进行自增运算
2分成两种,**前置++** 和 **后置++**
3前置++,会先把值自动 +1,在返回
var a = 10;
console.log(++a);
// 会返回 11,并且把 a 的值变成 11
后置++,会先把值返回,在自动+1
var a = 10;
console.log(a++);
// 会返回 10,然后把 a 的值变成 11
`--`
进行自减运算
分成两种,前置-- 和 后置--
和 `++` 运算符道理一样
## 运算符优先级
JavaScript中的运算符优先级是一套规则。
该规则在计算表达式时控制运算符执行的顺序。
具有较高优先级的运算符先于较低优先级的运算符执行。
例如,乘法的执行先于加法。
下表按从最高到最低的优先级列出JavaScript运算符。
具有相同优先级的运算符按从左至右的顺序求值。
练习
1、为抵抗洪水,战士连续作战89小时,编程计算共多少天零多少小时?
// var day = parseInt(89/24)
// var hour = 89 % 24
// console.log(day+'天'+hour+'小时')
2、小明要到美国旅游,可是那里的温度是以华氏度为单位记录的。它需要一个程序将华氏温度(80度)转换为摄氏度,并以华氏度和摄氏度为单位分别显示该温度。
提示:摄氏度与芈氏度的转换公式为:摄氏度 = 5/9.0*(华氏度-32),保留3位小数。
变量.toFixed (3)
// var hua = 80
// var she = 5/9*(hua-32)
// console.log('华氏度为:'+hua+ '度'+ ' '+'摄氏度为:' +she.toFixed(3)+'度')
3、下列程序运算结果
var k = -2;
alert(++k + k++ + ++k + k);
-1 + -1 + 1 + 1 = 0