4、JS的数据类型
JS 中变量可以存储 任意类型的值
JS 中数据类型的分类(基本数据类型)
①.Number 类型
* 数字类型, 不区分 整数浮点数
* 100 200 1.1 0 -6 -999都是数字
```js
var a = 100
```
②.String 类型
* 字符串类型:只要是引号包裹的内容,就是字符串类型(引号不区分单双)
```js
var str1 = '你好'
var str2 = "你好"
var str3 = 'qwer'
var str4 = '123' //String 类型
var str5 = 123 //Number 类型
```
③.undefined 类型
* undefined 类型:他是一个数据,表明未定义
* 变量只定义,不赋值的时候,默认的值就是undefined 表明未定义
```js
var un = undefined
var z
console.log(un)//定义一个变量,变量名为un,并给它赋值为undefined
console.log(z)//定义一个变量,变量名为z,没有赋值操作,所以变量默认的值为undefined
```
④.Boolean 类型 (后期更多的 用在判断上)
* 只有两个值 一个是true 一个是false
* * true:代表真,正确的
* * false:代表假,错误的
```js
var boo1 = true;
var boo3 = false;
var boo3 = 'true'
```
⑤.null 类型
* 代表空
* * 本身是一种数据类型,只不过代表的是空(啥也没有)
* * null 和 undefined 不同!!
* * 使用场景:在创建对象的时候,如果开始不知道对象内部有什么,可以给一个null
* 类似于在创建变量的时候,只定义,不赋值默认是一个 undefined
```js
var nu = null; //定义一个变量,名为nu,值为null类型,代表空
console.log(nu);
```
* *延申:一道面试题
JS 中数据类型有哪些?
5、JS 的数据类型检测
通过一个方法检测 数据类型的值是什么
* 语法:typeof(要检测的数据类型的值)
* typeof 的问题,不能正确检测出null 这个类型的实际类型,检测nuLl 的时候打印结果为object
* null代表的含义是空,也就是空对象,所以 typeof会把他当成一个对象去输出
var str1 = '100'
var str2 = 100
var str3
var str4 = true
var str5 = false
var str6 = null
console.log(typeof(str1))
console.log(typeof(str2))
console.log(typeof(str3))
console.log(typeof(str4))
console.log(typeof(str5))
console.log(typeof(str6))
* 面试题:typeof 能正确检测所有数据类型的值吗?
* 不能。因为他没有办法准确的检测出null的类型是什么
* JS如何正确检测null的类型呢? 欠着,以后会有专门的方法讲解
6、JS的数据类型转换
(1).转换为数字类型
* ①.number(数据)
* 可以用于任何数据类型,将其转换为数字类型
* + 字符串转数字
* 如果转换的字符串是纯数字组成的。那么直接转换为数字
* 如果转换的字符串是空字符串或者空白字符串,那么直接转换为数字0
* 其他类型的字符串(不是空---空自---纯数字字符串)会转换为NaN
* NAN:表示的是一个number的数字,但是没有办法通过常规的数字表明它,所以只能使用NaN来代替(坏掉的数字)
```js
console.log(typeof(Number('100')),Number('100'));
console.log(typeof(Number('')),Number(''));
console.log(typeof(Number(' ')),Number(' '));
console.log(typeof(Number('abc')),Number('abc'));
```
* + 布尔值转数字
* true转换为1
* false转换为0
```js
console.log(typeof(Number(true)),Number(true));
console.log(typeof(Number(false)),Number(false));
```
* + undefined转数字
* 会直接转换为NaN
```js
console.log(typeof(Number(undefined)),Number(undefined));
```
* + null转数字
* 会直接转换为0
```js
console.log(typeof(Number(null)),Number(null))
```
* ②.parseInt(数据) 转换为整数
* 会将数据转换为number类型,并且值是整数(直接忽略掉小数点以后的值,并不是四舍五入)
* 在转换的时候,如果数据是绒数字字符串或者是数字开头的字符串,那么会转换为数字,否则就是转换为NaN
```js
console.log(typeof(parseInt('100')),parseInt('100'))
console.log(typeof(parseInt('100.123456789')),parseInt('100.123456789'))
console.log(typeof(Number('100.123456789')),Number('100.123456789'))
console.log(typeof(parseInt('abc')),parseInt('abc'))
console.log(typeof(parseInt('100abc')),parseInt('100abc'))
console.log(typeof(parseInt('999abc')),parseInt('999abc'))
console.log(typeof(parseInt('abc666')),parseInt('abc666'))
console.log(typeof(parseInt('')),parseInt(''))
console.log(typeof(parseInt(' ')),parseInt(' '))
console.log(typeof(parseInt(true)),parseInt(true))
console.log(typeof(parseInt(false)),parseInt(false))
console.log(typeof(parseInt(undefined)),parseInt(undefined))
console.log(typeof(parseInt(null)),parseInt(null))
```
* ③.parseFloat(数据) 转换为小数
* 转换结果与parseInt类似,但是在转换小数的时候会保留小数点后的数字
```js
console.log(typeof(parseFloat('100.123456789')),parseFloat('100.123456789'))
console.log(typeof(parseFloat('100')),parseFloat('100'))
console.log(typeof(parseFloat('100abc')),parseFloat('100abc'))
console.log(typeof(parseFloat('999abc')),parseFloat('999abc'))
console.log(typeof(parseFloat('abc')),parseFloat('abc'))
console.log(typeof(parseFloat('abc666')),parseFloat('abc666'))
console.log(typeof(parseFloat('')),parseFloat(''))
console.log(typeof(parseFloat(' ')),parseFloat(' '))
console.log(typeof(parseFloat(true)),parseFloat(true))
console.log(typeof(parseFloat(false)),parseFloat(false))
console.log(typeof(parseFloat(undefined)),parseFloat(undefined))
console.log(typeof(parseFloat(null)),parseFloat(null))
```
* ④.扩展:在实际开发中 我个人常用 数据 - 0 (暂时先不考虑原理)
```js
console.log(typeof('100'),'100')
console.log(typeof('100' - 0),'100' - 0)
console.log(typeof('100abc' - 0),'100abc' - 0)
console.log(typeof('abc100' - 0),'abc100' - 0)
```
(2).转换为字符串类型
转换为字符串类型
* +. 变量.toString()方法
* 注意:undefined 类型和 null不能使用toString方法(因为JS没有给我们提供,或者说Js不允许)
```js
var str1 = 100
console.log(typeof(str1.toString()),str1.toString())
var str2 = true
console.log(typeof(str2.toString()),str2.toString())
var str3 = false
console.log(typeof(str3.toString()),str3.toString())
var str4 = undefined
console.log(typeof(str4.toString()),str4.toString())
var str5 = null
console.log(typeof(str5.toString()),str5.toString())
```
* +. String(变量)
* 什么类型都可以转换为字符串类型的,包括undefined 和 null类型
```js
var str1 = 100
console.log(typeof(String(str1)),String(str1))
var str2 = true
console.log(typeof(String(str2)),String(str2))
var str3 = false
console.log(typeof(String(str3)),String(str3))
var str4 = undefined
console.log(typeof(String(str4)),String(str4))
var str5 = null
console.log(typeof(String(str5)),String(str5))
```
* +.扩展:开发时常用的一个方法
* 变量 + '' (暂时不考虑原理)
* 转换结果与string类似,写法上更简单一些,所以推荐使用
```js
var str1 = 100
console.log(typeof(str1 + ''),str1 + '')
var str2 = true
console.log(typeof(str2 + ''),str2 + '')
var str3 = false
console.log(typeof(str3 + ''),str3 + '')
var str4 = undefined
console.log(typeof(str4 + ''),str4 + '')
var str5 = null
console.log(typeof(str5 + ''),str5 + '')
```
(3).转换为布尔类型
BooLean(变量) 将其他数据类型,转换为布尔值(也就是转换为 true 或者 false)
①.数字转换布尔值,只有0会转换为false 其他的数字都会转换为true(非0即为真)
```js
var num1 = 100
var num2 = 0
var num3 = -1
console.log(num1,'---->',Boolean(num1))//100
console.log(typeof(Boolean(num1)),Boolean(num1))//BooLean true
console.log(num2,'---->',Boolean(num2))//0
console.log(num3,'---->',Boolean(num3))//-1
```
②.字符串转换布尔值,只有空字符串会转换为 false其他的字符串都会转换为 true
```js
var str1 = ''
var str2 = ' '
var str3 = 'abc'
var str4 = '0'
console.log(str1,'---->',Boolean(str1))//''
console.log(str2,'---->',Boolean(str2))//' '
console.log(str3,'---->',Boolean(str3))//'abc'
console.log(str4,'---->',Boolean(str4))//'0'
```
③.undefined 和 null 转换为布尔值的时候就是false(重点,以后会常用!!!)
```js
var und = undefined
var nul = null
console.log(und,'---->',Boolean(und))
console.log(nul,'---->',Boolean(nul))
```