数据类型

一 概念

#### 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>

posted @ 2018-10-11 16:02  不沉之月  阅读(71)  评论(0编辑  收藏  举报