update:基本数据类型
This commit is contained in:
parent
c573695013
commit
36242240bc
@ -436,12 +436,10 @@ implements、import、int、interface、long、native、package、private、prot
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- **基本数据类型(值类型)**:String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定义。
|
- **基本数据类型(值类型)**:String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定义。
|
||||||
|
|
||||||
- **引用数据类型(引用类型)**:Object 对象。
|
- **引用数据类型(引用类型)**:Object 对象。
|
||||||
|
|
||||||
|
|
||||||
PS:内置对象function、Array、Date、RegExp、Error等都是属于Object。
|
PS:内置对象function、Array、Date、RegExp、Error等都是属于Object。
|
||||||
|
|
||||||
|
|
||||||
@ -449,9 +447,7 @@ PS:内置对象function、Array、Date、RegExp、Error等都是属于Object
|
|||||||
|
|
||||||
引用数据类型:参数赋值的时候,传地址(修改的同一片内存空间)。
|
引用数据类型:参数赋值的时候,传地址(修改的同一片内存空间)。
|
||||||
|
|
||||||
|
接下来,我们讲一下基本数据类型。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### String 字符串
|
### String 字符串
|
||||||
|
|
||||||
@ -490,13 +486,14 @@ PS:内置对象function、Array、Date、RegExp、Error等都是属于Object
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
(2)引号不能嵌套:双引号里不能再放双引号,单引号里不能再放单引号。但是单引号里可以嵌套双引号:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 数值型:Number
|
### 数值型:Number
|
||||||
|
|
||||||
如果一个变量中,存放了数字(包括整数和浮点数),那么这个变量就是数值型的。
|
在JS中所有的数值都是Number类型,包括整数和浮点数(小数)。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var a = 100; //定义了一个变量a,并且赋值100
|
var a = 100; //定义了一个变量a,并且赋值100
|
||||||
@ -509,6 +506,8 @@ PS:内置对象function、Array、Date、RegExp、Error等都是属于Object
|
|||||||
number
|
number
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**补充知识:**
|
||||||
|
|
||||||
**typeof()**表示“**获取变量的类型**”,返回的是小写,语法为:
|
**typeof()**表示“**获取变量的类型**”,返回的是小写,语法为:
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -520,38 +519,61 @@ typeof 变量
|
|||||||
**数值范围:**
|
**数值范围:**
|
||||||
|
|
||||||
由于内存的限制,ECMAScript 并不能保存世界上所有的数值。
|
由于内存的限制,ECMAScript 并不能保存世界上所有的数值。
|
||||||
- 最小值:Number.MIN_VALUE,这个值为: 5e-324
|
|
||||||
|
|
||||||
- 最大值:Number.MAX_VALUE,这个值为: 1.7976931348623157e+308
|
- 最大值:`Number.MAX_VALUE`,这个值为: 1.7976931348623157e+308
|
||||||
|
|
||||||
- 无穷大:Infinity
|
- 最小值:`Number.MIN_VALUE`,这个值为: 5e-324
|
||||||
|
|
||||||
- 无穷小:-Infinity
|
如果使用Number表示的变量超过了最大值,则会返回Infinity。
|
||||||
|
|
||||||
|
- 无穷大(正无穷):Infinity
|
||||||
|
|
||||||
|
- 无穷小(负无穷):-Infinity
|
||||||
|
|
||||||
|
注意,使用typeof检查Infinity也会返回number。
|
||||||
|
|
||||||
**NaN和isNaN()函数:**
|
**NaN和isNaN()函数:**
|
||||||
|
|
||||||
(1)NaN是一个特殊的数字,表示Not a Number,非数值。
|
(1)NaN:是一个特殊的数字,表示Not a Number,非数值。比如:
|
||||||
|
|
||||||
注意:`typeof NaN`的返回值是number。
|
|
||||||
|
|
||||||
```
|
```javascript
|
||||||
console.log(“abc”/18); //结果是NaN
|
console.log("abc" / 18); //结果是NaN
|
||||||
|
|
||||||
|
console.log("abc" * "abcd"); //按理说,字符串相乘是没有结果的,但如果你非要让JS去算,它就一定会给你一个结果。结果是结果是NaN
|
||||||
```
|
```
|
||||||
|
|
||||||
Undefined和任何数值计算为NaN。NaN 与任何值都不相等,包括 NaN 本身。
|
注意:`typeof NaN`的返回结果是number。
|
||||||
|
|
||||||
|
Undefined和任何数值计算的结果为NaN。NaN 与任何值都不相等,包括 NaN 本身。
|
||||||
|
|
||||||
(2)isNaN() :任何不能被转换为数值的值都会导致这个函数返回 true。
|
(2)isNaN() :任何不能被转换为数值的值都会导致这个函数返回 true。
|
||||||
|
|
||||||
|
|
||||||
```
|
```javascript
|
||||||
isNaN(NaN);// true
|
isNaN(NaN);// true
|
||||||
isNaN(“blue”); // true
|
isNaN("blue"); // true
|
||||||
isNaN(123); // false
|
isNaN(123); // false
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
**浮点数的运算**:
|
||||||
|
|
||||||
|
在JS中,整数的运算可以很精确,但是**小数的运算,可能会得到一个不精确的结果**。所以,千万不要使用JS进行对精确度要求比较高的运算。
|
||||||
|
|
||||||
|
如下:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var a = 0.1 + 0.2;
|
||||||
|
console.log(a); //打印结果:0.30000000000000004
|
||||||
|
```
|
||||||
|
|
||||||
|
上方代码中,打印结果并不是0.3,而是0.30000000000000004。
|
||||||
|
|
||||||
|
我们知道,所有的运算都要转换成二进制去计算,然而,二进制是无法精确表示1/10的。因此存在小数的计算不精确的问题。
|
||||||
|
|
||||||
|
|
||||||
### 连字符和加号的区别
|
### 连字符和加号的区别
|
||||||
|
|
||||||
键盘上的`+`可能是连字符,也可能是数字的加号。如下:
|
键盘上的`+`可能是连字符,也可能是数字的加号。如下:
|
||||||
@ -613,10 +635,22 @@ true 和 fase。
|
|||||||
### null和undefined
|
### null和undefined
|
||||||
|
|
||||||
|
|
||||||
- `null`:Null类型的值只有一个,就是null。比如:`var a = null`。专门用来表示一个为空的对象。使用 typeof 检查一个null值时,会返回object。
|
**`null`**:空值
|
||||||
|
|
||||||
|
- Null类型的值只有一个,就是null。比如:`var a = null`。
|
||||||
|
|
||||||
|
- 专门用来表示一个为空的**对象**。(注意,专门用来表示**空对象**)
|
||||||
|
|
||||||
|
- 使用 typeof 检查一个null值时,会返回object。
|
||||||
|
|
||||||
|
|
||||||
- `undefined`:**声明一个变量,但是没有赋值**,此时它的值就是undefined。例如:`var a;`使用 type of 检查一个undefined时,会返回undefined。
|
**`undefined`**:未定义
|
||||||
|
|
||||||
|
- Undefined类型的值只有一个,就是undefind
|
||||||
|
|
||||||
|
- **声明**一个变量,但是没有**赋值**,此时它的值就是undefined。例如:`var a;`
|
||||||
|
|
||||||
|
- 使用 type of 检查一个undefined时,会返回undefined。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -720,8 +754,6 @@ null和undefined有最大的相似性。看看null == undefined的结果(true)
|
|||||||
b = b + a; //"21" "221"
|
b = b + a; //"21" "221"
|
||||||
console.log(a); //21
|
console.log(a); //21
|
||||||
console.log(b) //221
|
console.log(b) //221
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -730,7 +762,6 @@ null和undefined有最大的相似性。看看null == undefined的结果(true)
|
|||||||
```
|
```
|
||||||
21
|
21
|
||||||
221
|
221
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
举例5:(这个例子比较特殊,字符串减去数字)
|
举例5:(这个例子比较特殊,字符串减去数字)
|
||||||
@ -749,44 +780,107 @@ null和undefined有最大的相似性。看看null == undefined的结果(true)
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## 数据类型转换
|
## 强制类型转换
|
||||||
|
|
||||||
### 用户的输入
|
强制类型转换:将一个数据类型强制转换为其他的数据类型。
|
||||||
|
|
||||||
|
类型转换主要指,将其他的数据类型,转换为:String、Number、Boolean。
|
||||||
|
|
||||||
|
### prompt():用户的输入
|
||||||
|
|
||||||
我们在上面的内容里讲过,`prompt()`就是专门用来弹出能够让用户输入的对话框。重要的是:用户不管输入什么,都是字符串。
|
我们在上面的内容里讲过,`prompt()`就是专门用来弹出能够让用户输入的对话框。重要的是:用户不管输入什么,都是字符串。
|
||||||
|
|
||||||
### `parseInt()`:字符串转数字
|
### 任何简单类型转换成String
|
||||||
|
|
||||||
**parseInt()可以将字符串转数字**。parse表示“转换”,Int表示“整数”(注意`Int`的拼写)。例如:
|
**方法1**:变量+"" 或者 变量+"abc"
|
||||||
|
|
||||||
字符串转数字的方法:
|
**方法二:**调用toString()方法。如下:
|
||||||
|
|
||||||
```
|
```
|
||||||
parseInt(“5”);
|
变量.toSting()
|
||||||
|
```
|
||||||
|
|
||||||
|
该方法**不会影响到原变量**,它会将转换的结果返回。当然我们还可以直接写成`a = a.toString()`,这样的话,就是直接修改原变量。
|
||||||
|
|
||||||
|
注意:null和undefined这两个值没有toString()方法,所以它们不能用方法二。如果调用,会报错。
|
||||||
|
|
||||||
|
|
||||||
|
**方法三**:调用String()函数。如下:
|
||||||
|
|
||||||
|
```
|
||||||
|
String(变量)
|
||||||
|
```
|
||||||
|
|
||||||
|
使用String()函数做强制类型转换时:
|
||||||
|
|
||||||
|
- 对于Number和Boolean而言,实际上就是调用toString()方法。
|
||||||
|
|
||||||
|
- 但是对于null和undefined,就不会调用toString()方法。它会将 null 直接转换为 "null"。将 undefined 直接转换为 "undefined"。
|
||||||
|
|
||||||
|
|
||||||
|
### Number()函数:其他的数据类型 --> Number
|
||||||
|
|
||||||
|
情况一:字符串 --> 数字
|
||||||
|
|
||||||
|
- 1.如果字符串中是纯数字,则直接将其转换为数字。
|
||||||
|
|
||||||
|
- 2.如果字符串中有非数字的内容,则转换为NaN。(此处可以看到Number()函数的局限性)
|
||||||
|
|
||||||
|
- 3.如果字符串是一个空串或者是一个全是空格的字符串,则转换为0。
|
||||||
|
|
||||||
|
|
||||||
|
情况二:布尔 --> 数字
|
||||||
|
|
||||||
|
- true 转成 1
|
||||||
|
|
||||||
|
- false 转成 0
|
||||||
|
|
||||||
|
情况三:null --> 数字
|
||||||
|
|
||||||
|
- 结果为:0
|
||||||
|
|
||||||
|
|
||||||
|
情况四:undefined --> 数字
|
||||||
|
|
||||||
|
- 结果为:NaN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### `parseInt()`:字符串 --> 数字
|
||||||
|
|
||||||
|
> `parseInt()`是专门用来对付字符串的。
|
||||||
|
|
||||||
|
**parseInt()的作用是将字符串转为数字**。parse表示“转换”,Int表示“整数”(注意`Int`的拼写)。例如:
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
parseInt("5");
|
||||||
```
|
```
|
||||||
|
|
||||||
得到的结果是数字5。
|
得到的结果是数字5。
|
||||||
|
|
||||||
**parseInt()还具有以下特性**:
|
**parseInt()还具有以下特性**:
|
||||||
|
|
||||||
(1)带有自动净化的功能;**只保留字符串最开头的数字**,后面的中文自动消失。例如:
|
(1)**只保留字符串最开头的数字**,后面的中文自动消失。例如:
|
||||||
|
|
||||||
```
|
```
|
||||||
console.log(parseInt("2017年在公众号上写了6篇文章");
|
console.log(parseInt("2017在公众号上写了6篇文章")); //打印结果:2017
|
||||||
|
|
||||||
|
console.log(parseInt("2017.01在公众号上写了6篇文章")); //打印结果仍是:2017 (说明只会取整数)
|
||||||
|
|
||||||
|
console.log(parseInt("aaa2017.01在公众号上写了6篇文章")); //打印结果:NaN
|
||||||
```
|
```
|
||||||
|
|
||||||
控制台输出:
|
|
||||||
|
|
||||||
```
|
|
||||||
2017
|
|
||||||
```
|
|
||||||
|
|
||||||
(2)自动带有截断小数的功能:**取整,不四舍五入**。
|
(2)自动带有截断小数的功能:**取整,不四舍五入**。
|
||||||
|
|
||||||
例1:
|
例1:
|
||||||
|
|
||||||
|
|
||||||
```
|
```javascript
|
||||||
var a = parseInt(5.8) + parseInt(4.7);
|
var a = parseInt(5.8) + parseInt(4.7);
|
||||||
console.log(a);
|
console.log(a);
|
||||||
```
|
```
|
||||||
@ -799,21 +893,41 @@ null和undefined有最大的相似性。看看null == undefined的结果(true)
|
|||||||
|
|
||||||
例2:
|
例2:
|
||||||
|
|
||||||
```
|
```javascript
|
||||||
var a = parseInt(5.8 + 4.7);
|
var a = parseInt(5.8 + 4.7);
|
||||||
console.log(a);
|
console.log(a);
|
||||||
```
|
```
|
||||||
|
|
||||||
控制台输出:
|
控制台输出:
|
||||||
|
|
||||||
```
|
```javascript
|
||||||
10
|
10
|
||||||
```
|
```
|
||||||
|
|
||||||
(3)带两个参数时,表示进制转换。
|
(3)如果对非String使用parseInt()或parseFloat(),它会先将其转换为String然后再操作。
|
||||||
|
|
||||||
|
比如:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var a = true;
|
||||||
|
console.log(parseInt(a)); //打印结果:NaN (因为是先将a转为字符串"true",然后然后再操作)
|
||||||
|
|
||||||
|
var b = undefined;
|
||||||
|
console.log(parseInt(b)); //打印结果:NaN (因为是先将b转为字符串"undefined",然后然后再操作)
|
||||||
|
|
||||||
|
var c = 168.23;
|
||||||
|
console.log(parseInt(c)); //打印结果:168 (因为是先将c转为字符串"168.23",然后然后再操作)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
(4)带两个参数时,表示进制转换。
|
||||||
|
|
||||||
|
|
||||||
### 字符串转为浮点数(小数):`parseFloat()`:
|
|
||||||
|
### `parseFloat()`:字符串 --> 浮点数(小数)
|
||||||
|
|
||||||
|
> `parseFloat()`是专门用来对付字符串的。
|
||||||
|
|
||||||
|
|
||||||
道理同上。
|
道理同上。
|
||||||
|
|
||||||
@ -839,32 +953,6 @@ null和undefined有最大的相似性。看看null == undefined的结果(true)
|
|||||||
虽然程序可以对`-`、`*`、`/`、`%``这几个符号自动进行“隐式转换”;但作为程序员,我们最好自己完成转换,方便程序的可读性。
|
虽然程序可以对`-`、`*`、`/`、`%``这几个符号自动进行“隐式转换”;但作为程序员,我们最好自己完成转换,方便程序的可读性。
|
||||||
|
|
||||||
|
|
||||||
### 4.1 任何简单类型转换成String
|
|
||||||
|
|
||||||
(1)方法1:变量+“” 或者 变量+“abc”
|
|
||||||
|
|
||||||
(2)方法2:
|
|
||||||
|
|
||||||
```
|
|
||||||
String(变量)
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
使用String()函数做强制类型转换时,对于Number和Boolean而言,实际上是调用的toString()方法。
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(3)方法三:
|
|
||||||
|
|
||||||
```
|
|
||||||
变量.toSting()
|
|
||||||
```
|
|
||||||
|
|
||||||
注意:undefined和null无toString方法,所以它们不能用方法三。
|
|
||||||
|
|
||||||
Null和undefined无toString方法。
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 我的公众号
|
## 我的公众号
|
||||||
|
|
||||||
|
@ -786,9 +786,6 @@ Date对象 有如下方法:
|
|||||||
20180202_1536.png
|
20180202_1536.png
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 字符串练习
|
## 字符串练习
|
||||||
|
|
||||||
**练习1:**"smyhvaevaesmyh"查找字符串中所有m出现的位置。
|
**练习1:**"smyhvaevaesmyh"查找字符串中所有m出现的位置。
|
||||||
|
@ -1,11 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## call()和apply()
|
## call()和apply()
|
||||||
|
|
||||||
### 介绍
|
### 介绍
|
||||||
@ -17,7 +11,7 @@
|
|||||||
|
|
||||||
- 都可以用来改变函数的this对象的指向。
|
- 都可以用来改变函数的this对象的指向。
|
||||||
|
|
||||||
- 第一个参数都是this要指向的对象(函数执行时,this将指向这个对象),后续参数传实参。
|
- 第一个参数都是this要指向的对象(函数执行时,this将指向这个对象),后续参数用来传实参。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -53,7 +47,6 @@ JS提供的绝大多数函数以及我们自己创建的所有函数,都可以
|
|||||||
|
|
||||||
4、传递一个对象时,函数中的this则指向传递的这个对象。
|
4、传递一个对象时,函数中的this则指向传递的这个对象。
|
||||||
|
|
||||||
创建函数创建函数bar的奶鹅绒和变量的创建的ffunciont
|
|
||||||
|
|
||||||
|
|
||||||
### call()和apply()的区别
|
### call()和apply()的区别
|
||||||
@ -97,19 +90,6 @@ call()和apply()方法都可以将实参在对象之后依次传递,但是appl
|
|||||||
看到区别了吗,call后面的实参与say方法中是一一对应的,而apply传实参时,要封装成一个数组,数组中的元素是和say方法中一一对应的,这就是两者最大的区别。
|
看到区别了吗,call后面的实参与say方法中是一一对应的,而apply传实参时,要封装成一个数组,数组中的元素是和say方法中一一对应的,这就是两者最大的区别。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**this的情况:**【非常重要】
|
|
||||||
|
|
||||||
|
|
||||||
- 1.以函数形式调用时,this永远都是window
|
|
||||||
|
|
||||||
- 2.以方法的形式调用时,this是调用方法的对象
|
|
||||||
|
|
||||||
- 3.以构造函数的形式调用时,this是新创建的对象
|
|
||||||
|
|
||||||
- 4.使用call和apply调用时,this是指定的对象
|
|
||||||
|
|
||||||
|
|
||||||
## call()和apply()的作用
|
## call()和apply()的作用
|
||||||
|
|
||||||
- 改变this的指向
|
- 改变this的指向
|
||||||
|
Loading…
x
Reference in New Issue
Block a user