数据类型
一 概念
#### 1、值类型
- number:数字类型
```js
var a = 10;
console.log(a, typeof a)
// 判断方式
console.log(typeof a == 'number')
```
- string:字符串类型
```js
var a = '10';
console.log(a, typeof a)
// 判断方式
console.log(typeof a == 'string')
```
- boolean:布尔类型
```js
var a = true;
console.log(a, typeof a)
// 判断方式
console.log(typeof a == 'boolean')
```
- undefined:未定义类型
```js
var a = undefined;
console.log(a, typeof a)
// 判断方式
console.log(typeof a == 'undefined')
console.log(a == undefined)
```
#### 2、引用类型
- function:函数类型
```js
var a = function(){};
console.log(a, typeof a)
// 判断方式
console.log(typeof a == 'function')
```
- object:对象类型
```js
var a = {};
console.log(a, typeof a)
// 判断方式
console.log(typeof a == 'object')
console.log(a instanceof Object)
```
#### 3、具体的对象类型
- null:空对象
```js
var a = null;
console.log(a, typeof a)
// 判断方式
console.log(typeof a == 'object')
console.log(a == null)
```
- Array:数组对象
```js
var a = new Array(1, 2, 3, 4, 5);
console.log(a, typeof a)
// 判断方式
console.log(typeof a == 'object')
console.log(a instanceof Object)
console.log(a instanceof Array)
```
- Date:时间对象
```js
var a = new Date();
console.log(a, typeof a)
// 判断方式
console.log(typeof a == 'object')
console.log(a instanceof Object)
console.log(a instanceof Date)
```
- RegExp:正则对象
```js
var a = new RegExp();
console.log(a, typeof a)
// 判断方式
console.log(typeof a == 'object')
console.log(a instanceof Object)
console.log(a instanceof RegExp)
```
#### 4、类型转换
- 数字|布尔 转换为 字符串
```js
var a = 10 or true
String(a)
a.toString()
```
- 布尔|字符串 转换为 数字
```js
var a = true or '10'
Number(a)
+ a
parseFloat()
parseInt()
```
- 字符串|数字 转换为 布尔
```js
var a = 10 or '10'
Boolean(a)
```
- 自动转换
```js
5 + null // 5
"5" + null // "5null"
"5" + 1 // "51"
"5" - 1 // 4
```
- 特殊产物
```js
// NaN: 非数字类型
// 不与任何数相等,包含自己
// 利用isNaN()进行判断
```
二 代码示范
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>数据类型</title>
</head>
<body>
数据类型
</body>
<script type="text/javascript">
// 一. 值类型
// 1.number:数字类型
var a = 10;
// typeof()查看类型,可以省略()
console.log(a, typeof a);
// 判断
console.log(typeof a == 'number');
a = 3.14;
console.log(a, typeof a);
a = 314e2
console.log(a, typeof a);
// 2.string:字符串类型
var a = '字符串';
console.log(a, typeof a);
a = "字符串";
console.log(a, typeof a);
// ES6会检测变量的重复定义,报错
// let x = 10;
// let x = '10';
// 3.boolean:布尔类型 true|false
a = true;
console.log(a, typeof a);
// 4.undefined:未定义类型
var b;
console.log(b, typeof b);
var c = undefined;
console.log(c, typeof c);
// 二.引用类型
// 5.function:函数类型
var m = function () {};
console.log(m, typeof m);
// 6.object:对象类型
var obj = {};
console.log(obj, typeof obj);
obj = new Object();
console.log(obj, typeof obj);
// 判断
// instanceof:对象类型判断
console.log(obj instanceof Object);
// 三.特殊的Object
// Number() String() Boolean() Math
// 7.null:空对象
var o = null;
console.log(o, typeof o);
// 判断
console.log(o == null);
// 8.Array:数组对象
o = new Array(1, 2, 3, 4, 5);
console.log(o, typeof o);
console.log(o instanceof Object);
// 判断
console.log(o instanceof Array);
// 9.Date:时间对象
o = new Date();
console.log(o, typeof o);
// 10.RegExp:正则对象
o = new RegExp();
console.log(o, typeof o);
</script>
</html>
类型转换
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>类型转换</title>
</head>
<body>
类型转换
</body>
<script>
// 类型转换针对 值类型
// number string boolean
// 一.显性转化
// 1. num,bool => str
var a = 10;
var b = true;
// var c = new String(a);
// console.log(c, typeof c); // '10', object
var c = String(a);
console.log(c, typeof c); // '10', string
c = String(b);
console.log(c, typeof c); // 'true', string
c = a.toString();
console.log(c, typeof c); // '10', string
c = b.toString();
console.log(c, typeof c); // 'true', string
// 2.bool,str => num
var aa = true;
var bb = '10';
var cc = Number(aa);
console.log(cc, typeof cc); // 1 number
cc = Number(bb);
console.log(cc, typeof cc); // 10 number
cc = + aa;
console.log(cc, typeof cc); // 1 number
cc = + bb;
console.log(cc, typeof cc); // 10 number
// 针对字符串
cc = parseFloat('3.14.15.16abc');
console.log(cc, typeof cc); // 3.14
cc = parseInt('10.35abc'); // 10
console.log(cc, typeof cc);
// 字符串以非数字开头,结果为NaN
// 1.非数字类型
// 2.不与任何数相等,包含自己
// 3.通过isNaN()进行判断
var res = parseInt("abc10def");
console.log(res, isNaN(res))
// 二.隐性转换(自动转换)
// 5 + null // 5
// "5" + null // "5null"
// "5" + 1 // "51"
// "5" - 1 // 4
console.log("5" - 1);
// "" + ? // "?"
</script>
</html>