update: 变量的数据类型

This commit is contained in:
qianguyihao 2019-12-12 15:04:44 +08:00
parent 4dd15ec49c
commit f136934676
3 changed files with 116 additions and 54 deletions

View File

@ -3,7 +3,13 @@
“字面量”即**常量**,是固定值,不可改变。看见什么,它就是什么。 “字面量”即**常量**,是固定值,不可改变。看见什么,它就是什么。
简单的字面量有2种数字、字符串。 字面量有3种
- 数字
- 字符串
- 布尔字面量
1数值的字面量非常简单写上去就行了不需要任何的符号。例如 1数值的字面量非常简单写上去就行了不需要任何的符号。例如
@ -21,6 +27,14 @@
温馨提示100是数字"100"是字符串。 温馨提示100是数字"100"是字符串。
3布尔字面量举例
```javascript
if (true) {
console.log('如果为真,就走这里面的代码);
}
```
### 总结 ### 总结
字面量都可以直接使用,但是我们一般不会直接使用字面量。 字面量都可以直接使用,但是我们一般不会直接使用字面量。
@ -33,7 +47,7 @@
## 变量的概念 ## 变量的概念
**变量**是用于存放数据的容器。我们通过「变量名」获取数据,甚至可以修改数据。 **变量**是用于存放数据的容器。我们通过「变量名」获取数据,甚至可以修改数据。
变量还可以用来保存字面量。 变量还可以用来保存字面量。
@ -43,13 +57,13 @@
### 变量的声明(变量的定义) ### 变量的声明(变量的定义)
在ES6之前统一使用`var`关键字来声明一个变量。比如: 在ES6语法之前,统一使用`var`关键字来声明一个变量。比如:
```javascript ```javascript
var name; // 生命一个名为 name 的变量 var name; // 生命一个名为 name 的变量
``` ```
补充在ES6及之后统一使用 `const`、`let`关键字来声明一个变量。这个以后再讲。 补充在ES6语法及之后,统一使用 `const`、`let`关键字来声明一个变量。这个以后再讲。
### 变量的赋值 ### 变量的赋值

View File

@ -147,7 +147,7 @@ var str = 'hello"; // 报错Uncaught SyntaxError: Invalid or unexpected toke
console.log(str4.length); // 25 console.log(str4.length); // 25
``` ```
由此可见,字符串的 length 属性,在判断字符串的长度时,会认为: 由此可见,字符串的 length 属性,在判断字符串的长度时,会认为:
- 一个中文算一个字符,一个英文算一个字符 - 一个中文算一个字符,一个英文算一个字符
@ -157,30 +157,51 @@ var str = 'hello"; // 报错Uncaught SyntaxError: Invalid or unexpected toke
### 字符串拼接 ### 字符串拼接
多个字符串之间可以使用加号 `+` 进行拼接。
## 补充知识typeof 运算符 **拼接语法**
`typeof`表示“**获取变量的类型**”,返回的是小写,语法为:
``` ```
typeof 变量 字符串 + 任意数据类型 = 拼接之后的新字符串;
``` ```
**返回结果** **拼接规则**:拼接前,会把与字符串相加的这个数据类型转成字符串,然后再拼接成一个新的字符串。
- `typeof 数值`的返回结果number **代码举例**:(字符串与六大数据类型相加)
- `typeof 字符串`的返回结果string ```javascript
var str1 = '千古壹号' + '永不止步';
var str2 = '千古壹号' + 666;
var str3 = '千古壹号' + true;
var str4 = '千古壹号' + null;
var str5 = '千古壹号' + undefined;
- `typeof 布尔型`的返回结果boolean var obj = { name: '千古壹号', age: 28 };
var str6 = '千古壹号' + obj;
- `typeof undefined`的返回结果undefined console.log(str1);
console.log(str2);
console.log(str3);
console.log(str4);
console.log(str5);
console.log(str6);
```
- `typeof null`的返回结果object 打印结果:
在JavaScript中只要是数就是 number 数值型的。无论整浮、浮点数(即小数)、无论大小、无论正负,都是 number 类型的。 ```
千古壹号永不止步
关于 typeof 的知识,下一篇文章,我们会详细讲。 千古壹号666
千古壹号true
千古壹号null
千古壹号undefined
千古壹号[object Object]
```
## 数值型Number ## 数值型Number
@ -188,18 +209,23 @@ typeof 变量
在JS中所有的数值都是Number类型包括整数和浮点数小数 在JS中所有的数值都是Number类型包括整数和浮点数小数
```javascript ```javascript
var a = 100; //定义了一个变量a并且赋值100 var a = 100; // 定义一个变量 a并且赋值整数100
console.log(typeof a); //输出a变量的类型 console.log(typeof a); // 输出变量 a 的类型
var b = 12.3; // 定义一个变量 b并且赋值浮点数 12.3
console.log(typeof a);
``` ```
上方代码的输出结果为: 上方代码的输出结果为:
``` ```
number
number number
``` ```
**数值范围:** ### 数值范围
由于内存的限制ECMAScript 并不能保存世界上所有的数值。 由于内存的限制ECMAScript 并不能保存世界上所有的数值。
@ -207,7 +233,7 @@ number
- 最小值:`Number.MIN_VALUE`,这个值为: 5e-324 - 最小值:`Number.MIN_VALUE`,这个值为: 5e-324
如果使用Number表示的变量超过了最大值则会返回Infinity。 如果使用 Number 表示的变量超过了最大值则会返回Infinity。
- 无穷大正无穷Infinity - 无穷大正无穷Infinity
@ -216,9 +242,9 @@ number
注意:`typeof Infinity`的返回结果是number。 注意:`typeof Infinity`的返回结果是number。
**NaN和isNaN()函数:** ### NaN
1NaN是一个特殊的数字表示Not a Number非数值。比如 **NaN**是一个特殊的数字表示Not a Number非数值。比如
```javascript ```javascript
console.log("abc" / 18); //结果是NaN console.log("abc" / 18); //结果是NaN
@ -226,20 +252,13 @@ number
console.log("abc" * "abcd"); //按理说字符串相乘是没有结果的但如果你非要让JS去算它就一定会给你一个结果。结果是NaN console.log("abc" * "abcd"); //按理说字符串相乘是没有结果的但如果你非要让JS去算它就一定会给你一个结果。结果是NaN
``` ```
注意:`typeof NaN`的返回结果是number。 注意:`typeof NaN`的返回结果是 number。
Undefined和任何数值计算的结果为NaN。NaN 与任何值都不相等,包括 NaN 本身。 Undefined和任何数值计算的结果为 NaN。NaN 与任何值都不相等,包括 NaN 本身。
2isNaN() :任何不能被转换为数值的值,都会让这个函数返回 true 另外,关于 isNaN() 函数,可以看下一篇文章
```javascript ### 浮点数的运算
isNaN(NaN);// true
isNaN("blue"); // true
isNaN(123); // false
```
**浮点数的运算**
在JS中整数的运算**基本**可以保证精确;但是**小数的运算,可能会得到一个不精确的结果**。所以千万不要使用JS进行对精确度要求比较高的运算。 在JS中整数的运算**基本**可以保证精确;但是**小数的运算,可能会得到一个不精确的结果**。所以千万不要使用JS进行对精确度要求比较高的运算。
@ -310,7 +329,7 @@ a2
我们知道,`"2"+1`得到的结果其实是字符串,但是`"2"-1`得到的结果却是数值1这是因为计算机自动帮我们进行了“**隐式转换**”。 我们知道,`"2"+1`得到的结果其实是字符串,但是`"2"-1`得到的结果却是数值1这是因为计算机自动帮我们进行了“**隐式转换**”。
也就是说,`-`、`*`、`/`、`%``这几个符号会自动进行隐式转换。例如: 也就是说,`-`、`*`、`/`、`%`这几个符号会自动进行隐式转换。例如:
```javascript ```javascript
var a = "4" + 3 - 6; var a = "4" + 3 - 6;
@ -328,7 +347,7 @@ console.log(a);
## 布尔值Boolean ## 布尔值Boolean
true 和 false。主要用来做逻辑判断。 布尔型有两个值:true 和 false。主要用来做逻辑判断 true 表示真false 表示假
布尔值直接使用就可以了,千万不要加上引号。 布尔值直接使用就可以了,千万不要加上引号。
@ -345,28 +364,28 @@ console.log(typeof a);
boolean boolean
``` ```
布尔型和数字型相加时, true 按 1 来算 false 按 0 来算。
## null和undefined
## Null 和 Undefined
### `null`:空值 ### `null`:空值
专门用来表示一个为空的**对象**(例如:`var a = null`)。注意,专门用来表示**空对象**。 专门用来表示一个为空的**对象**(例如:`var a = null`)。注意,专门用来表示**空对象**。
- Null类型的值只有一个就是null。比如 `var a = null`
- Null类型的值只有一个就是null。比如`var a = null`。
- 使用 typeof 检查一个null值时会返回object。 - 使用 typeof 检查一个null值时会返回object。
### `undefined`:未定义 ### `undefined`:未定义
**声明**了一个变量,但是没有**赋值**(例如:`var a;`此时它的值就是undefined。 **声明**了一个变量,但是没有**赋值**(例如:`var a;`),此时它的值就是 `undefined`
- Undefined类型的值只有一个就是undefind - Undefined类型的值只有一个就是undefind。比如
- 使用 type of 检查一个undefined时会返回undefined。 - 使用 type of 检查一个undefined时会返回undefined。
null和undefined有大的相似性。看看null == undefined的结果(true)也就更加能说明这点。 null和undefined有大的相似性。看看null == undefined的结果(true)也就更加能说明这点。
但是null === undefined的结果(false)。它们虽然相似但还是有区别的其中一个区别是和数字运算时10 + null结果为1010 + undefined结果为NaN。 但是null === undefined的结果(false)。它们虽然相似但还是有区别的其中一个区别是和数字运算时10 + null结果为1010 + undefined结果为NaN。

View File

@ -1,21 +1,29 @@
## 前言 ## 前言
强制类型转换:将一个数据类型强制转换为其他的数据类型。 **数据类型转换**:将一种数据类型转换为另外一种数据类型。
类型转换主要指将指定的数据类型转换为String、Number、Boolean。你会把某个数据类型转换成 null 或者 undefined 吗?不会,因为这样做,没有意义。 通常有三种类型的转换:
- 转换为字符串类型
- 转换为数字型
- 转换为布尔型
你会把某个数据类型转换成 null 或者 undefined 吗?不会,因为这样做,没有意义。
## typeof 运算符 ## typeof 运算符
> 我们先来讲一下 typeof再讲类型转换。 > 我们先来讲一下 typeof再讲类型转换。
`typeof()`表示“**获取变量的类型**”,返回的是小写,语法为:(两种写法都可以) `typeof()`表示“**获取变量的数据类型**”,返回的是小写,语法为:(两种写法都可以)
```javascript ```javascript
// 写法1 // 写法1
typeof 变量; typeof 变量;
// 写法2 // 写法2
typeof 变量; typeof(变量);
``` ```
typeof 这个运算符的返回结果就是变量的类型。那返回结果的类型是什么呢?是字符串。 typeof 这个运算符的返回结果就是变量的类型。那返回结果的类型是什么呢?是字符串。
@ -36,6 +44,8 @@ typeof 这个运算符的返回结果就是变量的类型。那返回结果的
备注 2为啥 `typeof null`的返回值也是 object 呢?因为 null 代表的是**空对象**。 备注 2为啥 `typeof null`的返回值也是 object 呢?因为 null 代表的是**空对象**。
备注 3`typeof NaN`的返回值是 number上一篇文章中讲过NaN 是一个特殊的数字。
**返回结果举例** **返回结果举例**
```javascript ```javascript
@ -46,6 +56,8 @@ console.log(type {}); // 空对象的打印结果object
代码解释:这里的空数组`[]`、空对象`{}` ,为啥他们在使用 typeof 时,返回值也是 `object`呢?因为这里的 返回结果`object`指的是**引用数据类型**。空数组、空对象都是**引用数据类型 Object**。 代码解释:这里的空数组`[]`、空对象`{}` ,为啥他们在使用 typeof 时,返回值也是 `object`呢?因为这里的 返回结果`object`指的是**引用数据类型**。空数组、空对象都是**引用数据类型 Object**。
## 变量的类型转换的分类 ## 变量的类型转换的分类
类型转换分为两种:显示类型转换、隐式类型转换。 类型转换分为两种:显示类型转换、隐式类型转换。
@ -190,15 +202,15 @@ parseInt()的转换情况如下。
- 3.如果字符串是一个空串或者是一个全是空格的字符串,转换时会报错。 - 3.如果字符串是一个空串或者是一个全是空格的字符串,转换时会报错。
**情况二:布尔 --> 数字** **情况二:Boolean --> 数字**
- 结果为NaN - 结果为NaN
**情况三:null --> 数字** **情况三:Null --> 数字**
- 结果为NaN - 结果为NaN
**情况四:undefined --> 数字** **情况四:Undefined --> 数字**
- 结果为NaN - 结果为NaN
@ -359,7 +371,7 @@ console.log(a); // 打印结果56。这个地方要好好理解。
isNaN(参数); isNaN(参数);
``` ```
解释:判断指定的参数是否为 NaN返回结果为 Boolean 类型。 解释:判断指定的参数是否为 NaN(非数字类型),返回结果为 Boolean 类型。也就是说:**任何不能被转换为数值的参数,都会让这个函数返回 true**。
**执行过程** **执行过程**
@ -377,6 +389,8 @@ console.log(isNaN('abc')); // 返回结果true。因为 Number('abc') 的返
console.log(isNaN(null)); // 返回结果false console.log(isNaN(null)); // 返回结果false
console.log(isNaN(undefined)); // 返回结果true console.log(isNaN(undefined)); // 返回结果true
console.log(isNaN(NaN)); // 返回结果true
``` ```
### 自增/自减运算符:`++`、`—-` ### 自增/自减运算符:`++`、`—-`
@ -427,7 +441,21 @@ console.log(b); // 打印结果666
### 加号:`+` ### 加号:`+`
加号在做隐式类型转换时,有一个特点:当加号的两边,只要有一个是字符串的时候,就会调用 String() 函数,导致最终的运算结果是字符串。 **情况一**:字符串 + 数字
- 当加号的两边,只要有一个是字符串的时候,就会调用 String() 函数,将数字转为字符串再计算。导致最终的运算结果是字符串。
**情况二**Boolean + 数字
- Boolean 型和数字型相加时, true 按 1 来算 false 按 0 来算。这里其实是先调 Number() 函数,将 Boolean 类型转换为 Number类型然后再和 数字相加。
**情况三** null + 数字
- 等价于0 + 数字
**情况四** undefined + 数字
- 计算结果NaN
### 运算符:`-`、`*`、`/` ### 运算符:`-`、`*`、`/`
@ -437,8 +465,9 @@ console.log(b); // 打印结果666
## 我的公众号 ## 我的公众号
想学习<font color=#0000ff>**代码之外的技能**</font>?不妨关注我的微信公众号:**千古壹号**id`qianguyihao`)。 想学习**代码之外的技能**?不妨关注我的微信公众号:**千古壹号**id`qianguyihao`)。
扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外: 扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外:
![](http://img.smyhvae.com/2016040102.jpg) ![](http://img.smyhvae.com/20200101.png)