update: 变量的数据类型
This commit is contained in:
parent
4dd15ec49c
commit
f136934676
@ -3,7 +3,13 @@
|
||||
|
||||
“字面量”即**常量**,是固定值,不可改变。看见什么,它就是什么。
|
||||
|
||||
简单的字面量有2种:数字、字符串。
|
||||
字面量有3种:
|
||||
|
||||
- 数字
|
||||
|
||||
- 字符串
|
||||
|
||||
- 布尔字面量
|
||||
|
||||
(1)数值的字面量非常简单,写上去就行了,不需要任何的符号。例如:
|
||||
|
||||
@ -21,6 +27,14 @@
|
||||
|
||||
温馨提示:100是数字,"100"是字符串。
|
||||
|
||||
(3)布尔字面量举例:
|
||||
|
||||
```javascript
|
||||
if (true) {
|
||||
console.log('如果为真,就走这里面的代码);
|
||||
}
|
||||
```
|
||||
|
||||
### 总结
|
||||
|
||||
字面量都可以直接使用,但是我们一般不会直接使用字面量。
|
||||
@ -33,7 +47,7 @@
|
||||
|
||||
## 变量的概念
|
||||
|
||||
**变量**是用于存放数据的容器。我们通过「变量名」获取数据,甚至可以修改数据。
|
||||
**变量**:是用于存放数据的容器。我们通过「变量名」获取数据,甚至可以修改数据。
|
||||
|
||||
变量还可以用来保存字面量。
|
||||
|
||||
@ -43,13 +57,13 @@
|
||||
|
||||
### 变量的声明(变量的定义)
|
||||
|
||||
在ES6之前,统一使用`var`关键字来声明一个变量。比如:
|
||||
在ES6语法之前,统一使用`var`关键字来声明一个变量。比如:
|
||||
|
||||
```javascript
|
||||
var name; // 生命一个名为 name 的变量
|
||||
```
|
||||
|
||||
补充:在ES6及之后,统一使用 `const`、`let`关键字来声明一个变量。这个以后再讲。
|
||||
补充:在ES6语法及之后,统一使用 `const`、`let`关键字来声明一个变量。这个以后再讲。
|
||||
|
||||
### 变量的赋值
|
||||
|
||||
|
@ -147,7 +147,7 @@ var str = 'hello"; // 报错:Uncaught SyntaxError: Invalid or unexpected toke
|
||||
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
|
||||
@ -188,18 +209,23 @@ typeof 变量
|
||||
在JS中所有的数值都是Number类型,包括整数和浮点数(小数)。
|
||||
|
||||
```javascript
|
||||
var a = 100; //定义了一个变量a,并且赋值100
|
||||
console.log(typeof a); //输出a变量的类型
|
||||
var a = 100; // 定义一个变量 a,并且赋值整数100
|
||||
console.log(typeof a); // 输出变量 a 的类型
|
||||
|
||||
var b = 12.3; // 定义一个变量 b,并且赋值浮点数 12.3
|
||||
console.log(typeof a);
|
||||
```
|
||||
|
||||
上方代码的输出结果为:
|
||||
|
||||
```
|
||||
number
|
||||
|
||||
number
|
||||
```
|
||||
|
||||
|
||||
**数值范围:**
|
||||
### 数值范围
|
||||
|
||||
由于内存的限制,ECMAScript 并不能保存世界上所有的数值。
|
||||
|
||||
@ -207,7 +233,7 @@ number
|
||||
|
||||
- 最小值:`Number.MIN_VALUE`,这个值为: 5e-324
|
||||
|
||||
如果使用Number表示的变量超过了最大值,则会返回Infinity。
|
||||
如果使用 Number 表示的变量超过了最大值,则会返回Infinity。
|
||||
|
||||
- 无穷大(正无穷):Infinity
|
||||
|
||||
@ -216,9 +242,9 @@ number
|
||||
注意:`typeof Infinity`的返回结果是number。
|
||||
|
||||
|
||||
**NaN和isNaN()函数:**
|
||||
### NaN
|
||||
|
||||
(1)NaN:是一个特殊的数字,表示Not a Number,非数值。比如:
|
||||
**NaN**:是一个特殊的数字,表示Not a Number,非数值。比如:
|
||||
|
||||
```javascript
|
||||
console.log("abc" / 18); //结果是NaN
|
||||
@ -226,20 +252,13 @@ number
|
||||
console.log("abc" * "abcd"); //按理说,字符串相乘是没有结果的,但如果你非要让JS去算,它就一定会给你一个结果。结果是NaN
|
||||
```
|
||||
|
||||
注意:`typeof NaN`的返回结果是number。
|
||||
注意:`typeof NaN`的返回结果是 number。
|
||||
|
||||
Undefined和任何数值计算的结果为NaN。NaN 与任何值都不相等,包括 NaN 本身。
|
||||
Undefined和任何数值计算的结果为 NaN。NaN 与任何值都不相等,包括 NaN 本身。
|
||||
|
||||
(2)isNaN() :任何不能被转换为数值的值,都会让这个函数返回 true。
|
||||
另外,关于 isNaN() 函数,可以看下一篇文章。
|
||||
|
||||
```javascript
|
||||
isNaN(NaN);// true
|
||||
isNaN("blue"); // true
|
||||
isNaN(123); // false
|
||||
|
||||
```
|
||||
|
||||
**浮点数的运算**:
|
||||
### 浮点数的运算
|
||||
|
||||
在JS中,整数的运算**基本**可以保证精确;但是**小数的运算,可能会得到一个不精确的结果**。所以,千万不要使用JS进行对精确度要求比较高的运算。
|
||||
|
||||
@ -310,7 +329,7 @@ a2
|
||||
|
||||
我们知道,`"2"+1`得到的结果其实是字符串,但是`"2"-1`得到的结果却是数值1,这是因为计算机自动帮我们进行了“**隐式转换**”。
|
||||
|
||||
也就是说,`-`、`*`、`/`、`%``这几个符号会自动进行隐式转换。例如:
|
||||
也就是说,`-`、`*`、`/`、`%`这几个符号会自动进行隐式转换。例如:
|
||||
|
||||
```javascript
|
||||
var a = "4" + 3 - 6;
|
||||
@ -328,7 +347,7 @@ console.log(a);
|
||||
|
||||
## 布尔值:Boolean
|
||||
|
||||
true 和 false。主要用来做逻辑判断。
|
||||
布尔型有两个值:true 和 false。主要用来做逻辑判断: true 表示真,false 表示假。
|
||||
|
||||
布尔值直接使用就可以了,千万不要加上引号。
|
||||
|
||||
@ -345,28 +364,28 @@ console.log(typeof a);
|
||||
boolean
|
||||
```
|
||||
|
||||
布尔型和数字型相加时, true 按 1 来算 ,false 按 0 来算。
|
||||
|
||||
## null和undefined
|
||||
|
||||
## Null 和 Undefined
|
||||
|
||||
### `null`:空值
|
||||
|
||||
专门用来表示一个为空的**对象**(例如:`var a = null`)。注意,专门用来表示**空对象**。
|
||||
|
||||
|
||||
- Null类型的值只有一个,就是null。比如:`var a = null`。
|
||||
|
||||
- Null类型的值只有一个,就是null。比如 `var a = null`。
|
||||
|
||||
- 使用 typeof 检查一个null值时,会返回object。
|
||||
|
||||
### `undefined`:未定义
|
||||
|
||||
**声明**了一个变量,但是没有**赋值**(例如:`var a;`),此时它的值就是undefined。
|
||||
**声明**了一个变量,但是没有**赋值**(例如:`var a;`),此时它的值就是 `undefined`。
|
||||
|
||||
- Undefined类型的值只有一个,就是undefind
|
||||
- Undefined类型的值只有一个,就是undefind。比如
|
||||
|
||||
- 使用 type of 检查一个undefined时,会返回undefined。
|
||||
|
||||
null和undefined有最大的相似性。看看null == undefined的结果(true)也就更加能说明这点。
|
||||
null和undefined有很大的相似性。看看null == undefined的结果(true)也就更加能说明这点。
|
||||
|
||||
但是null === undefined的结果(false)。它们虽然相似,但还是有区别的,其中一个区别是:和数字运算时,10 + null结果为:10;10 + undefined结果为:NaN。
|
||||
|
||||
|
@ -1,21 +1,29 @@
|
||||
## 前言
|
||||
|
||||
强制类型转换:将一个数据类型强制转换为其他的数据类型。
|
||||
**数据类型转换**:将一种数据类型转换为另外一种数据类型。
|
||||
|
||||
类型转换主要指,将指定的数据类型,转换为:String、Number、Boolean。你会把某个数据类型转换成 null 或者 undefined 吗?不会,因为这样做,没有意义。
|
||||
通常有三种类型的转换:
|
||||
|
||||
- 转换为字符串类型
|
||||
|
||||
- 转换为数字型
|
||||
|
||||
- 转换为布尔型
|
||||
|
||||
你会把某个数据类型转换成 null 或者 undefined 吗?不会,因为这样做,没有意义。
|
||||
|
||||
## typeof 运算符
|
||||
|
||||
> 我们先来讲一下 typeof,再讲类型转换。
|
||||
|
||||
`typeof()`表示“**获取变量的类型**”,返回的是小写,语法为:(两种写法都可以)
|
||||
`typeof()`表示“**获取变量的数据类型**”,返回的是小写,语法为:(两种写法都可以)
|
||||
|
||||
```javascript
|
||||
// 写法1
|
||||
typeof 变量;
|
||||
|
||||
// 写法2
|
||||
typeof 变量;
|
||||
typeof(变量);
|
||||
```
|
||||
|
||||
typeof 这个运算符的返回结果就是变量的类型。那返回结果的类型是什么呢?是字符串。
|
||||
@ -36,6 +44,8 @@ typeof 这个运算符的返回结果就是变量的类型。那返回结果的
|
||||
|
||||
备注 2:为啥 `typeof null`的返回值也是 object 呢?因为 null 代表的是**空对象**。
|
||||
|
||||
备注 3:`typeof NaN`的返回值是 number,上一篇文章中讲过,NaN 是一个特殊的数字。
|
||||
|
||||
**返回结果举例**:
|
||||
|
||||
```javascript
|
||||
@ -46,6 +56,8 @@ console.log(type {}); // 空对象的打印结果:object
|
||||
|
||||
代码解释:这里的空数组`[]`、空对象`{}` ,为啥他们在使用 typeof 时,返回值也是 `object`呢?因为这里的 返回结果`object`指的是**引用数据类型**。空数组、空对象都是**引用数据类型 Object**。
|
||||
|
||||
|
||||
|
||||
## 变量的类型转换的分类
|
||||
|
||||
类型转换分为两种:显示类型转换、隐式类型转换。
|
||||
@ -190,15 +202,15 @@ parseInt()的转换情况如下。
|
||||
|
||||
- 3.如果字符串是一个空串或者是一个全是空格的字符串,转换时会报错。
|
||||
|
||||
**情况二:布尔 --> 数字**
|
||||
**情况二:Boolean --> 数字**
|
||||
|
||||
- 结果为:NaN
|
||||
|
||||
**情况三:null --> 数字**
|
||||
**情况三:Null --> 数字**
|
||||
|
||||
- 结果为:NaN
|
||||
|
||||
**情况四:undefined --> 数字**
|
||||
**情况四:Undefined --> 数字**
|
||||
|
||||
- 结果为:NaN
|
||||
|
||||
@ -359,7 +371,7 @@ console.log(a); // 打印结果:56。这个地方要好好理解。
|
||||
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(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)
|
||||
|
Loading…
Reference in New Issue
Block a user