## 1.number类型
- number数值类型:整数、小数、负数、16进制、8进制、NaN
```js
<script>
//number数值类型:整数、小数、负数、16进制、8进制、NaN
// 1.整数
var a = 10;
console.log(typeof (a));//number
// 2.小数
var b = 3.1415926;
console.log(typeof (b));//number
var d = .5;
console.log(d, typeof (d));//0.5 number
var e = 5.0;
console.log(e);//5
// 3.负数
var c = -10;
console.log(typeof (c));//number
// 4.NaN not a number 不是一个数 当运算没有结果的时候就是NaN
var x = NaN;
console.log(typeof (x));//number
var y = 10 / "你好";
console.log(y);//NaN
// 注意:任何两个NaN都不相等 == 判断左右两侧是否相等
console.log(NaN == NaN);//false
//------------------------了解-------------------
// 浏览器是显示10进制的数据 如果定义的8进制或者16进制 计算机会自动转成10进制
//5.8进制数:以0开头 范围在0-7之间
var x1 = 077;
console.log(x1);//63
var x2 = 0566;
console.log(x2);
// 6.16进制数据:以0x开头 范围在0-9 a-10 b-11 c-12 d-13 e-14 f-15
var x3 = 0xff;
console.log(x3);//255
// 7.精度缺失 0.1+0.2 == 0.3
// 计算机在运算的时候,会把数转换二进制数据然后再进行计算 计算结果再转成10进制 转换过程中会造成精度缺少
console.log(0.1 + 0.2 == 0.3);//false 只要不把小数点计算当成判断条件 是不会影响代码执行的
</script>
```
- ==NaN not a number 不是一个数 当运算没有结果的时候就是NaN==
```js
// 4.NaN not a number 不是一个数 当运算没有结果的时候就是NaN
var x = NaN;
console.log(typeof (x));//number
var y = 10 / "你好";
console.log(y);//NaN
// 注意:任何两个NaN都不相等 == 判断左右两侧是否相等
console.log(NaN == NaN);//false
```
## 2.string类型
- string字符串类型:引号( " " ' ')引起来的都是字符串 所有从页面获取的内容都是字符串数据类型
- 字符串.length:获取字符串的长度
- 字符串[下标]:.获取字符串中某个字符
- 字符串.charAt(下标):获取字符串某个字符
```html
<script>
// string类型 引号( " " ' ')引起来的都是字符串 所有从页面获取的内容都是字符串数据类型
var str1 = '文字';
var str2 = "文字1234";
console.log(typeof str1);//string
console.log(typeof str2);//string
// 1.获取字符串的长度 字符串.length
console.log(str1.length);//2
console.log(str2.length);//6
// 2.获取字符串中某个字符 字符串[下标] 从左往右开始下标从0开始 取对应下标位置的字符
console.log(str1[1]);//字
console.log(str2[4]);//3
// 3.获取字符串某个字符 字符串.charAt(下标) 获取对应下标位置的字符
console.log(str1.charAt(0));//文
console.log(str2.charAt(5));//4
// 4.字符串遇到+ 拼接
console.log(1 + 1);//2
console.log("1" + 1);//"11"
console.log(1 + 2 + "1");//"31"
</script>
```
## 3.boolean类型
- boolean布尔类型 true和false
```html
<script>
var b1 = true;
var b2 = false;
console.log(typeof b1, typeof b2);//boolean boolean
//作用:用作判断条件
if (false) {//如果判断条件为true 执行{}中的代码
console.log("真");
}
</script>
```
## 4.undefined和null类型
- undefined 未定义 null 空对象
```js
<script>
/*
undefined
未定义 你去快递站拿快递 但快递站没有你的包裹
null
空对象 你去快递站拿快递 快递员给了一个包裹 但是这个包裹是空的
*/
var odiv = document.getElementsByTagName("div")[0];
console.log(odiv);//undefined
/*
undefined 和null的区别?
undefined 未定义 声明变量没有赋值 没有存储空间
null 空对象 有存储空间
*/
</script>
```
- 面试题 undefined和null的区别
```js
undefined 未定义 声明变量没有赋值 没有存储空间
null 空对象 有存储空间
```
## 5.数据类型的转换
- 将一种数据类型转成另一种数据类型
- 强制转换(程序员通过某些方法实现转换)
- 隐式转换(计算机自动转换为其他数据类型)
### 5.1强制转换成number类型
- Number() parseInt() parseFloat()
#### 5.1.1Number强制转换
- Number(要转换的数据):将数据转换为Number类型 如果转换不了则是返回NaN
```js
<script>
/*
Number(要转换的数据):将数据转换为Number类型 如果转换不了则是返回NaN
*/
var n1 = 10;
var n2 = false;
var n3 = "10";
var x = "10px";
var y = "";
var n4 = undefined;
var n5 = null;
console.log(Number(n1));//10
console.log(Number(n2));//true-1 false-0
console.log(Number(n3));//10
console.log(Number(x));//NaN
console.log(Number(y));//" "-0 ""-0
console.log(Number(n4));//NaN
console.log(Number(n5));//0
```
==总结:Number方法可以转换的:string类型(纯数字、""-0 " "-0)、boolean类型(true-1,false-0)、null(0) 其他都是NaN==
#### 5.1.2parseInt转换
- parseInt(要转换的数据):将数据转换为number类型,从左往右开始转换,遇到不能转换的或者末尾结束,如果一开始就不能转换则是NaN,结果取整(舍弃小数)
```html
<script>
/*
parseInt(要转换的数据):针对string类型转换
将数据转换为number类型,从左往右开始转换,遇到不能转换的或者末尾结束,如果一开始就不能转换则是NaN,结果取整(舍弃小数)
*/
console.log(parseInt("10"));//10
console.log(parseInt("10px"));//10
console.log(parseInt("10.5px"));//10
console.log(parseInt("10.9px"));//10
console.log(parseInt("px10.9px"));//NaN
</script>
```
#### 5.1.3parseFloat转换
- parseFloat(要转换的数据):将数据转换为number类型,从左往右开始转换,遇到不能转换的或者末尾结束,如果一开始不能转换则是NaN,结果保留小数
```js
<script>
/*
parseFloat(要转换的数据):将数据转换为number类型,从左往右开始转换,遇到不能转换的或者末尾结束,如果一开始不能转换则是NaN,结果保留小数
*/
console.log(parseFloat("10"));//10
console.log(parseFloat("10.5px"));//10.5
console.log(parseFloat("px10.5px"));//NaN
console.log(parseFloat("10.5"));//10.5
</script>
```
### 5.2强制转换为boolean类型
- Boolean(要转换的数据):将数据类型强制转换为boolean类型 结果为true或者是false
```js
<script>
// number类型:非0即真 NaN也是false
console.log(Boolean(1));//true
console.log(Boolean(-10));//true
console.log(Boolean(3.14));//true
console.log(Boolean(0x7788));//true
console.log(Boolean(0));//false
console.log(Boolean(NaN));//false
// string类型:有值即为真
console.log(Boolean("10"));//true
console.log(Boolean("098766*****"));//true
console.log(Boolean(" "));//true
console.log(Boolean(""));//false
// null undefined
console.log(Boolean(null));//false
console.log(Boolean(undefined));//false
/*
总结:Boolean结果为false的有:0 NaN null undefined ""
*/
</script>
```
==总结:Boolean结果为false的有:0 NaN null undefined ""==
### 5.3强制转换为string类型
- String() 要转换的数据.toString()
#### 5.3.1 String强制转换
- String(要转换的数据):将数据转换string类型,直接是在数据外面加引号
```js
<script>
console.log(String(1));//"1"
console.log(String(NaN));//"NaN"
console.log(String(null));//"null"
console.log(String(undefined));//"null"
console.log(String(true));//"true"
</script>
```
#### 5.3.2 toString强制转换
- 要转换的数据.toString: 强制转换为string类型
```js
<script>
/*
1.要转换的数据.toString
强制转换为string类型
*/
var n = 1;
console.log(n, n.toString());//"1"
var b = true;
console.log(b.toString());//"true"
// null和undefined没有toString这个方法的
var x = undefined;
console.log(x.toString());//报错
</script>
```
### 5.4其他小方法
- toFixed(n):保留n位小数
```js
<script>
// 1.toFixed(n):保留n位小数
var n = 3.1415926;
console.log(n.toFixed(4));//3.1416
var n1 = 0.1 * 0.7;
console.log(n1, n1.toFixed(2));
</script>
```
- isNaN:is not a number 是不是 不是一个数字 false是数字 true不是一个数字
```js
// 2.isNaN is not a number 是不是 不是一个数字 false是数字 true不是一个数字
console.log(isNaN(3));//false
console.log(isNaN("文字"));//true
// isNaN 判断之前会先调用Number方法进行强制转换 再来进行判断 Number(true)
console.log(isNaN(true));//false
console.log(isNaN(""));//false
```
## 6.运算符和表达式
- 运算符:连接一个以上的操作符中间的符号
- 表达式:由操作数和运算符组成的式子
```js
10 + 20 var a = 10
+运算符 10 20操作数 表达式 10 + 20
```
- 运算符的分类
- 算术运算符 + - * / %(取余 取模) ++ --
- 赋值运算符 = += -= *= /= %=
- 逻辑运算符
- 比较运算符
- 三目运算符
- 表达式的分类:算术表达式 赋值表达式 逻辑表达式 比较表达式 三目表达式
### 6.1算术运算符
- 算术运算符 + - * / %(取余 取模) ++ --
```js
<script>
// 算术运算符 + - * / %(取余 取模) ++ --
console.log(10 + 2);//12
console.log(10 - 2);//8
console.log(10 * 2);//20
console.log(10 / 2);//5
console.log(10 % 2);//0
console.log(11 % 2);//1
// 特殊情况
//1.精度缺少
console.log(0.1 + 0.2);
console.log(0.1 * 0.7);
// 2.隐式转换:在运算过程中 数据自动进行转换
// 隐式转换的规律 都会转成number类型再进行计算
console.log(100 * false);//0
console.log("100" - 10);//90
console.log(10 + null);// 10
//字符串拼接+ 会拼接
console.log("10" + 10); "1010"
</script>
```
- 自增++和自减--
- 基础用法
```js
// ++ 自增 自加1 i++ ++i 都是自加1
// 1.基础用法
var a = 10;
a++;//a = a+1
console.log(a);//11
++a;//a = a+1
console.log(a);//12
```
- 参与运算
```js