Create 第二天_数据类型.md

pull/580/head
zhuoliuzhou 3 years ago committed by GitHub
parent 1f7792f303
commit 713d75259d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,975 @@
<div align="center">
<h1> 30 Days Of JavaScript: Data Types</h1>
<a class="header-badge" target="_blank" href="https://www.linkedin.com/in/asabeneh/">
<img src="https://img.shields.io/badge/style--5eba00.svg?label=LinkedIn&logo=linkedin&style=social">
</a>
<a class="header-badge" target="_blank" href="https://twitter.com/Asabeneh">
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/asabeneh?style=social">
</a>
<sub>Author:
<a href="https://www.linkedin.com/in/asabeneh/" target="_blank">Asabeneh Yetayeh</a><br>
<small> 1月, 2020</small>
</sub>
</div>
</div>
[<< Day 1](../readMe.md) | [Day 3 >>](link_to_be_updated)
![Thirty Days Of JavaScript](/images/banners/day_1_2.png)
- [📔 第二天](#-第二天)
- [数据类型](#数据类型)
- [原始数据类型](#原始数据类型)
- [非原始数据类型](#非原始数据类型)
- [数值Numbers](#数值numbers)
- [声明数值变量](#声明数值变量)
- [Math 对象](#math-对象)
- [随机数生成器](#随机数生成器)
- [字符串Strings](#字符串strings)
- [合并字符串](#合并字符串)
- [用加号(+)合并字符串](#用加号合并字符串)
- [长字符串](#长字符串)
- [分离字符Escape Sequences](#分离字符escape-sequences)
- [模版字符串](#模版字符串)
- [字符串方法](#字符串方法)
- [检查数据类型和类型转换](#检查数据类型和类型转换)
- [检查数据类型](#检查数据类型)
- [转换数据类型Casting](#转换数据类型casting)
- [字符串 -> 整数](#字符串---整数)
- [字符串 -> 小数](#字符串---小数)
- [小数 -> 整数](#小数---整数)
- [💻 第二天:作业](#-第二天作业)
- [作业:难度水平 1](#作业难度水平-1)
- [作业:难度水平 2](#作业难度水平-2)
- [作业:难度水平 3](#作业难度水平-3)
# 📔 第二天
## 数据类型
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在前一章节,我们粗略地提到了数据类型。每一个数据和值都有它们对应的数据类型,数据类型代表了数据的特征。数据类型大致可以分为两类:
1. 原始数据类型 primitive data type
2. 非原始数据类型对象引用Non-primitive data types 或 Object References
### 原始数据类型
JavaScript中的原始数据类型包括:
1. 数值Numbers- 整数,浮点小数;
2. 字符串Strings- 任何被单引号、双引号或反引号框住的内容;
3. 布尔值Booleans- true 或 false
4. 空值Null- 空白 或 无;
5. 未定义值Undefined- 已声明但未赋值的变量
6. 符号Symbol- 一种独特的值,可通过符号构造函数生成;
非原始数据类型包括:
1. 对象Objects
2. 列表Arrays
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那么,到底什么是原始数据类型,什么是非原始数据类型吧。
*原始* 数据类型是不可变(无法修改)的数据类型。当某个原始数据类型被创建,我们无法修改它。
**例:**
```js
let word = 'JavaScript'
```
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果我们尝试修改这个变量 *word* 所储存的字符串JavaScript会报错。再次说明任何被单引号、双引号或反引号框住的内容都是字符串类型数值。
```js
word[0] = 'Y'
```
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;尝试运行上面的语句不会改变 *word* 变量存储的字符串。所以,我们说字符串数据型是不可变的。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当对原始数据类型进行比较时实际上是在对比他们的值value。下面的例子我们尝试对比不同的数据值:
```js
let numOne = 3
let numTwo = 3
console.log(numOne == numTwo) // true
let js = 'JavaScript'
let py = 'Python'
console.log(js == py) //false
let lightOn = true
let lightOff = false
console.log(lightOn == lightOff) // false
```
### 非原始数据类型
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *非原始* 数据类型是可变的可修改。我们可以在创建非原始数据类型变量后修改它的值。下例中我们创建了一个列表。列表是用方括号框住的一列数据。列表可以包含相同或不同的数据类型。列表的值可通过对应的序号获取。JavaScript规定列表的序号从0开始也就是说一个列表的第一个值的序号是0第二个值的序号是1依此类推。
```js
let nums = [1, 2, 3]
nums[0] = 10
console.log(nums) // [10, 2, 3]
```
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由上可见,列表是可变的。非原始数据类型不能进行对比。即便两个非原始数据类型的变量具有相同的性质和值,它们严格意义上也是不相等的。
```js
let nums = [1, 2, 3]
let numbers = [1, 2, 3]
console.log(nums == numbers) // false
let userOne = {
name:'Asabeneh',
role:'teaching',
country:'Finland'
}
let userTwo = {
name:'Asabeneh',
role:'teaching',
country:'Finland'
}
console.log(userOne == userTwo) // false
```
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以,务必牢记,不要对比非原始数据类型的变量,包括列表、函数或对象。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 非原始数据类型变量的“值”的类型是引用类型reference type因为当对它们进行比较时实际上比较的是所引用的地址而不是值。若两个对象引用的是同一个底层对象那么它们才是严格意义上的相等。
```js
let nums = [1, 2, 3]
let numbers = nums
console.log(nums == numbers) // true
let userOne = {
name:'Asabeneh',
role:'teaching',
country:'Finland'
}
let userTwo = userOne
console.log(userOne == userTwo) // true
```
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果你还是不太理解原始数据类型和非原始数据类型的区别别担心先继续学习。等之后再回头来看这部分也许会有不一样的体会。现在让我们首先细聊一下数值类型Number
## 数值Numbers
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数值包括整数和小数,可以进行算术运算,让我们看几个例子。
### 声明数值变量
```js
let age = 35
const gravity = 9.81 // 用const定义不会改变值的变量
let mass = 72 // 质量kg
const PI = 3.14 // PI 也是固定值用const定义
// 更多例子
const boilingPoint = 100 // 水的常温下沸点(摄氏温度)也是固定值。
const bodyTemp = 37 // 常温下人体平均摄氏温度,固定值。
console.log(age, gravity, mass, PI, boilingPoint, bodyTemp)
```
### Math 对象
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JavaScript内建的 Math 对象包含了很多实用的方法可以运用于数值类型变量。
```js
const PI = Math.PI
console.log(PI) // 3.141592653589793
// 四舍五入
console.log(Math.round(PI)) // PI 四舍五入得到 3
console.log(Math.round(9.81)) // 10
console.log(Math.floor(PI)) // 3向下取整
console.log(Math.ceil(PI)) // 4向上取整
console.log(Math.min(-5, 3, 20, 4, 5, 10)) // -5返回最小值
console.log(Math.max(-5, 3, 20, 4, 5, 10)) // 20返回最大值
const randNum = Math.random() // 产生介于 0 0.999999 的随机数
console.log(randNum)
// 产生介于 0 10 的随机数
const num = Math.floor(Math.random () * 11) // 产生介于 0 10 的随机数
console.log(num)
//绝对值
console.log(Math.abs(-10)) // 10
//平方根
console.log(Math.sqrt(100)) // 10
console.log(Math.sqrt(2)) // 1.4142135623730951
//次方
console.log(Math.pow(3, 2)) // 9
console.log(Math.E) // 2.718
//对数
//通过函数返回自然对数以e为底数参数x为指数
console.log(Math.log(2)) // 0.6931471805599453
console.log(Math.log(10)) // 2.302585092994046
//通过 Math 对象内建常量返回自然对数,
console.log(Math.LN2) // 0.6931471805599453
console.log(Math.LN10) // 2.302585092994046
//三角函数
Math.sin(0)
Math.sin(60)
Math.cos(0)
Math.cos(60)
```
#### 随机数生成器
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JavaScript 的 Math 对象提供的 random() 函数可以产生介于 0 0.999999... 的随机数。
```js
let randomNum = Math.random() // g介于 0 0.999999... 的随机数
```
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现在,我们尝试用 random() 函数产生介于0 10 之间的随机数。
```js
let randomNum = Math.random() // 介于 0 0.999999... 的随机数
let numBtnZeroAndTen = randomNum * 11
console.log(numBtnZeroAndTen) // 返回值范围: 0 10.99
let randomNumRoundToFloor = Math.floor(numBtnZeroAndTen)
console.log(randomNumRoundToFloor) // 返回值范围:- 10
```
## 字符串Strings
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符串是一串文字,并用 **_单引号_****_双引号_** 或 **_反引号_** 框住。声明一个字符串变量时,我们需要定义变量名,声明操作符(=),以及一串用单引号、双引号或反引号框住的值。下面给你们打几个样儿;
```js
let space = ' ' // 空格键
let firstName = 'Asabeneh'
let lastName = 'Yetayeh'
let country = 'Finland'
let city = 'Helsinki'
let language = 'JavaScript'
let job = 'teacher'
let quote = "俗话说得好‘一日之计在于晨’"
let quotWithBackTick = `有道是'车到山前必有路‘`
```
### 合并字符串
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将两个或以上字符串相连叫做合并。我们用之前定义的字符串来演示:
```js
let fullName = firstName + space + lastName; // 合并三个字符串
console.log(fullName);
```
```sh
Asabeneh Yetayeh
```
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们可以用多种方式合并字符串。
#### 用加号(+)合并字符串
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用加号合并字符串是old school容易导致错误。在此介绍这种方法供参考但是我强烈建议使用 ES6 标准模版字符串(之后详解)。
```js
// 定义不同类型的变量
let space = ' '
let firstName = 'Asabeneh'
let lastName = 'Yetayeh'
let country = 'Finland'
let city = 'Helsinki'
let language = 'JavaScript'
let job = 'teacher'
let age = 250
let fullName =firstName + space + lastName
let personInfoOne = fullName + '. I am ' + age + '. I live in ' + country; // ES5 string addition
console.log(personInfoOne)
```
```sh
Asabeneh Yetayeh. I am 250. I live in Finland
```
#### 长字符串
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;字符串可以是一个字母、一段话甚至一页内容。如果字符串太长导致一行无法容纳,我们可以用斜线(\\)来标记行末,代表字符串将在下一行继续。
**例:**
```js
const paragraph = "My name is Asabeneh Yetayeh. I live in Finland, Helsinki.\
I am a teacher and I love teaching. I teach HTML, CSS, JavaScript, React, Redux, \
Node.js, Python, Data Analysis and D3.js for anyone who is interested to learn. \
In the end of 2019, I was thinking to expand my teaching and to reach \
to global audience and I started a Python challenge from November 20 - December 19.\
It was one of the most rewarding and inspiring experience.\
Now, we are in 2020. I am enjoying preparing the 30DaysOfJavaScript challenge and \
I hope you are enjoying too."
console.log(paragraph)
```
#### 分离字符Escape Sequences
JavaScript 和大部分其他编程语言使用 \ + 一些字符作为分离字符,让我们看一些常用的分离字符:
- \n: 换行字符
- \t: Tab字符代表8个空格
- \\\\: 斜线
- \\': 单引号
- \\": 双引号
```js
console.log('I hope everyone is enjoying the 30 Days Of JavaScript challenge.\nDo you ?') // 换行
console.log('Days\tTopics\tExercises')
console.log('Day 1\t3\t5')
console.log('Day 2\t3\t5')
console.log('Day 3\t3\t5')
console.log('Day 4\t3\t5')
console.log('This is a backslash symbol (\\)') // 在字符串中显示斜线
console.log('In every programming language it starts with \"Hello, World!\"')
console.log("In every programming language it starts with \'Hello, World!\'")
console.log('The saying \'Seeing is Believing\' isn\'t correct in 2020')
```
控制台输出如下:
```sh
I hope everyone is enjoying the 30 Days Of JavaScript challenge.
Do you ?
Days Topics Exercises
Day 1 3 5
Day 2 3 5
Day 3 3 5
Day 4 3 5
This is a backslash symbol (\)
In every programming language it starts with "Hello, World!"
In every programming language it starts with 'Hello, World!'
The saying 'Seeing is Believing' isn't correct in 2020
```
#### 模版字符串
模版字符串用反引号框住。在模版字符串中我们可以使用表达式。表达式用花括号框住,前面需要加一个美元符号$。语法如下:
```js
//Syntax
`String literal text`
`String literal text ${expression}`
```
**例1**
```js
console.log(`The sum of 2 and 3 is 5`) // statically writing the data
let a = 2
let b = 3
console.log(`The sum of ${a} and ${b} is ${a + b}`) // injecting the data dynamically
```
**例2**
```js
let firstName = 'Asabeneh'
let lastName = 'Yetayeh'
let country = 'Finland'
let city = 'Helsinki'
let language = 'JavaScript'
let job = 'teacher'
let age = 250
let fullName = firstName + ' ' + lastName
let personInfoTwo = `I am ${fullName}. I am ${age}. I live in ${country}.` //ES6 - String interpolation method
let personInfoThree = `I am ${fullName}. I live in ${city}, ${country}. I am a ${job}. I teach ${language}.`
console.log(personInfoTwo)
console.log(personInfoThree)
```
```sh
I am Asabeneh Yetayeh. I am 250. I live in Finland.
I am Asabeneh Yetayeh. I live in Helsinki, Finland. I am a teacher. I teach JavaScript.
```
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用模版字符串,我们可以加入表达式。表达式可以是一个值,或者是语句(对比、运算或条件运算符)。
```js
let a = 2
let b = 3
console.log(`${a} is greater than ${b}: ${a > b}`)
```
```sh
2 is greater than 3: false
```
### 字符串方法
在 JavaScript 里,所有东西都是对象。字符串是原始数据类型,在定义之后就不能修改。字符串对象内建了很多实用方法可以用来处理字符串变量。
1. *length*:字符串的 *length* 方法返回该字符串的字符长度,包括空格字符。
**例:**
```js
let js = 'JavaScript'
console.log(js.length) // 10
let firstName = 'Asabeneh'
console.log(firstName.length) // 8
```
2. *获取字符串内的字符*我们可以用序号获取字符串里面的每一个字符。类似列表字符串的序号也是从0开始最后一个字符的序号是字符串的长度减1.
![Accessing sting by index](/images/string_indexes.png)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 让我们尝试获取 'JavaScript' 这个字符串里的字符吧:
```js
let string = 'JavaScript'
let firstLetter = string[0]
console.log(firstLetter) // J
let secondLetter = string[1] // a
let thirdLetter = string[2]
let lastLetter = string[9]
console.log(lastLetter) // t
let lastIndex = string.length - 1
console.log(lastIndex) // 9
console.log(string[lastIndex]) // t
```
3. *toUpperCase()*: 这个方法将字符串转换为大写。
```js
let string = 'JavaScript'
console.log(string.toUpperCase()) // JAVASCRIPT
let firstName = 'Asabeneh'
console.log(firstName.toUpperCase()) // ASABENEH
let country = 'Finland'
console.log(country.toUpperCase()) // FINLAND
```
4. *toLowerCase()*: 这个方法将字符串转换为小写。
```js
let string = 'JavasCript'
console.log(string.toLowerCase()) // javascript
let firstName = 'Asabeneh'
console.log(firstName.toLowerCase()) // asabeneh
let country = 'Finland'
console.log(country.toLowerCase()) // finland
```
5. *substr()*:这个方法获取字符串的子字符串,需要两个参数:开始序号和子字符串长度。
```js
let string = 'JavaScript'
console.log(string.substr(4,6)) // Script
let country = 'Finland'
console.log(country.substr(3, 4)) // land
```
6. *substring()*: 这个方法也是获取字符串的子字符串,需要两个参数:开始序号和结束序号。注意,返回的子字符串不包括结束序号的字符。
```js
let string = 'JavaScript'
console.log(string.substring(0,4)) // Java
console.log(string.substring(4,10)) // Script
console.log(string.substring(4)) // Script
let country = 'Finland'
console.log(country.substring(0, 3)) // Fin
console.log(country.substring(3, 7)) // land
console.log(country.substring(3)) // land
```
7. *split()*:此方法将字符串按参数分隔
```js
let string = '30 Days Of JavaScript'
console.log(string.split()) // Changes to an array -> ["30 Days Of JavaScript"]
console.log(string.split(' ')) // Split to an array at space -> ["30", "Days", "Of", "JavaScript"]
let firstName = 'Asabeneh'
console.log(firstName.split()) // Change to an array - > ["Asabeneh"]
console.log(firstName.split('')) // Split to an array at each letter -> ["A", "s", "a", "b", "e", "n", "e", "h"]
let countries = 'Finland, Sweden, Norway, Denmark, and Iceland'
console.log(countries.split(',')) // split to any array at comma -> ["Finland", " Sweden", " Norway", " Denmark", " and Iceland"]
console.log(countries.split(', ')) //  ["Finland", "Sweden", "Norway", "Denmark", "and Iceland"]
```
8. *trim()*:删除字符串首尾的空白字符。
```js
let string = ' 30 Days Of JavaScript '
console.log(string)
console.log(string.trim(' '))
let firstName = ' Asabeneh '
console.log(firstName)
console.log(firstName.trim()) // still removes spaces at the beginning and the end of the string
```
```sh
30 Days Of JavasCript
30 Days Of JavasCript
Asabeneh
Asabeneh
```
9. *includes()*此方法通过输入一个子字符串查询是否包含在目标字符串中。若包含则返回true。
```js
let string = '30 Days Of JavaScript'
console.log(string.includes('Days')) // true
console.log(string.includes('days')) // false - it is case sensitive!
console.log(string.includes('Script')) // true
console.log(string.includes('script')) // false
console.log(string.includes('java')) // false
console.log(string.includes('Java')) // true
let country = 'Finland'
console.log(country.includes('fin')) // false
console.log(country.includes('Fin')) // true
console.log(country.includes('land')) // true
console.log(country.includes('Land')) // false
```
10. *replace()*:替换函数,需要两个参数,旧字符串和替换字符串。
```js
string.replace(oldsubstring, newsubstring)
```
```js
let string = '30 Days Of JavaScript'
console.log(string.replace('JavaScript', 'Python')) // 30 Days Of Python
let country = 'Finland'
console.log(country.replace('Fin', 'Noman')) // Nomanland
```
11. *charAt()*:输入序号返回对应的字符
```js
string.charAt(index)
```
```js
let string = '30 Days Of JavaScript'
console.log(string.charAt(0)) // 3
let lastIndex = string.length - 1
console.log(string.charAt(lastIndex)) // t
```
12. *charCodeAt()*输入序号返回对应字符的字符编码ASCII编码
```js
string.charCodeAt(index)
```
```js
let string = '30 Days Of JavaScript'
console.log(string.charCodeAt(3)) // D ASCII number is 68
let lastIndex = string.length - 1
console.log(string.charCodeAt(lastIndex)) // t ASCII is 116
```
13. *indexOf()*:输入子字符串,返回该子字符串的首字符在目标字符串的位置。若目标字符串不包含子字符串,返回-1。
```js
string.indexOf(substring)
```
```js
let string = '30 Days Of JavaScript'
console.log(string.indexOf('D')) // 3
console.log(string.indexOf('Days')) // 3
console.log(string.indexOf('days')) // -1
console.log(string.indexOf('a')) // 4
console.log(string.indexOf('JavaScript')) // 11
console.log(string.indexOf('Script')) //15
console.log(string.indexOf('script')) // -1
```
14. *lastIndexOf()*:输入子字符串,返回该子字符串的最后一个字符在目标字符串的位置。若目标字符串不包含子字符串,返回-1。
```js
//syntax
string.lastIndexOf(substring)
```
```js
let string = 'I love JavaScript. If you do not love JavaScript what else can you love.'
console.log(string.lastIndexOf('love')) // 67
console.log(string.lastIndexOf('you')) // 63
console.log(string.lastIndexOf('JavaScript')) // 38
```
15. *concat()*:可以输入多个字符串,返回合并后的字符串。
```js
string.concat(substring, substring, substring)
```
```js
let string = '30'
console.log(string.concat("Days", "Of", "JavaScript")) // 30DaysOfJavaScript
let country = 'Fin'
console.log(country.concat("land")) // Finland
```
16. *startsWith*:输入字符串,检查目标字符串的开头是否和输入字符串一致,返回布尔值。
```js
//syntax
string.startsWith(substring)
```
```js
let string = 'Love is the best to in this world'
console.log(string.startsWith('Love')) // true
console.log(string.startsWith('love')) // false
console.log(string.startsWith('world')) // false
let country = 'Finland'
console.log(country.startsWith('Fin')) // true
console.log(country.startsWith('fin')) // false
console.log(country.startsWith('land')) // false
```
17. *endsWith*:输入字符串,检查目标字符串的结尾是否和输入字符串一致,返回布尔值。
```js
string.endsWith(substring)
```
```js
let string = 'Love is the most powerful feeling in the world'
console.log(string.endsWith('world')) // true
console.log(string.endsWith('love')) // false
console.log(string.endsWith('in the world')) // true
let country = 'Finland'
console.log(country.endsWith('land')) // true
console.log(country.endsWith('fin')) // false
console.log(country.endsWith('Fin')) // false
```
18. *search*:输入字符串或正则表达式,返回目标字符串中第一个符合输入字符串的序号。
```js
string.search(substring)
```
```js
let string = 'I love JavaScript. If you do not love JavaScript what else can you love.'
console.log(string.search('love')) // 2
console.log(string.search(/javascript/gi)) // 7
```
19. *match*:输入字符串或正则表达式,若目标字符串匹配到输入字符串,则返回列表,否则返回空值。在此我们顺便看看正则表达式,它是用斜线框住的字符串+标记。
```js
let string = 'love'
let patternOne = /love/ // 没有标记
let patternTwo = /love/gi // g代表搜索整个texti代表无视大小写
```
Match syntax
```js
// syntax
string.match(substring)
```
```js
let string = 'I love JavaScript. If you do not love JavaScript what else can you love.'
console.log(string.match('love'))
```
```sh
["love", index: 2, input: "I love JavaScript. If you do not love JavaScript what else can you love.", groups: undefined]
```
```js
let pattern = /love/gi
console.log(string.match(pattern)) // ["love", "love", "love"]
```
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 让我们用正则表达式从字符串中获取数字。别担心,这只是一个简单的例子,并不是对正则表达式的全部介绍,之后的章节会有详细说明。
```js
let txt = 'In 2019, I ran 30 Days of Python. Now, in 2020 I am super exited to start this challenge'
let regEx = /\d+/
// 斜线后加d是分离字符代表匹配的是数字而不是字母d
// + 号代表一个或以上数字
// 若斜线后有g标记则代表搜索全文。
console.log(txt.match(regEx)) // ["2", "0", "1", "9", "3", "0", "2", "0", "2", "0"]
console.log(txt.match(/\d+/g)) // ["2019", "30", "2020"]
```
20. *repeat()*输入数字n返回重复n次字段并合并。
```js
string.repeat(n)
```
```js
let string = 'love'
console.log(string.repeat(10)) // lovelovelovelovelovelovelovelovelovelove
```
## 检查数据类型和类型转换
### 检查数据类型
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_typeof_ 方法检查数据类型。
**Example:**
```js
// 不同的数据类型
// 让我们先定义不同的数据类型变量
let firstName = 'Asabeneh' // 字符串
let lastName = 'Yetayeh' // 字符串
let country = 'Finland' // 字符串
let city = 'Helsinki' // 字符串
let age = 250 // 数值
let job // 未定义值,因为还未赋值
console.log(typeof 'Asabeneh') // 字符串
console.log(typeof firstName) // 字符串
console.log(typeof 10) // 数值
console.log(typeof 3.14) // 数值
console.log(typeof true) // 布尔值
console.log(typeof false) // 布尔值
console.log(typeof NaN) // 数值
console.log(typeof job) // 未定义值
console.log(typeof undifined) // 未定义值
console.log(typeof null) // 对象
```
### 转换数据类型Casting
- 转换Casting将一种数据类型转换为另一种数据类型。常用的方法包括 _parseInt()__parseFloat()__Number()__+ 号_ 或 _str()_
当我们对字符串形式的数字进行运算时,需要先将其转换为数值类型再进行运算,否则会报错。
#### 字符串 -> 整数
可以将字符串形式的数字转换为数字。字符串型数字就是引号内的数字,例如:'10', '5'。
可用以下方法将字符串型数字转换为整数:
- parseInt() 函数
- Number() 函数
- 加号(+)
```js
let num = '10'
let numInt = parseInt(num)
console.log(numInt) // 10
```
```js
let num = '10'
let numInt = Number(num)
console.log(numInt) // 10
```
```js
let num = '10'
let numInt = +num
console.log(numInt) // 10
```
#### 字符串 -> 小数
同样地,我们也可以将字符串型数字转换为小数。字符串形式的小数形如:'9.81', '3.14', '1.44'。
可用以下方法把字符串型数字转换为小数:
- parseFloat() 函数
- Number() 函数
- 加号(+)
```js
let num = '9.81'
let numFloat = parseFloat(num)
console.log(numFloat) // 9.81
```
```js
let num = '9.81'
let numFloat = Number(num)
console.log(numFloat) // 9.81
```
```js
let num = '9.81'
let numFloat = +num
console.log(numFloat) // 9.81
```
#### 小数 -> 整数
可以通过以下方法将小数转换为整数。
- parseInt() 函数
```js
let num = 9.81
let numInt = parseInt(num)
console.log(numInt) // 9
```
🌕 你可太牛逼了!就在此刻,你完成了第二天的挑战,你已经向牛逼头子迈出坚实的两大步了!现在,让我们做一些轻松愉快的小作业巩固知识吧~
## 💻 第二天:作业
### 作业:难度水平 1
1. 定义变量命名为“challenge”并赋值 **'30 Days Of JavaScript'**。
2. 用 __console.log()__ 将1中变量输出到浏览器控制台。
3. 用 _console.log()_ 输出1中变量的 __字符串长度__ 到浏览器控制台。
4. 用 __toUpperCase()__ 函数将1中变量转换为全大写。
5. 用 __toLowerCase()__ 函数将1中变量转换为全小写。
6. 用 __substr()____substring()__ 获取1中变量的第一个词。
7. 将 *Days Of JavaScript* 字符串从 *30 Days Of JavaScript* 字符串中剥离。
8. 用 __includes()__ 函数检查1中变量是否包含词语 __Script__
9. 用 __split()__ 函数将1中变量分隔成 __列表__ 。
10. 用 __split()__ 函数将字符串 ”30 Days Of JavaScript“ 按空格分隔成列表。
11. 'Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon' 按逗号 __分隔__ 此字符串形成列表。
12. 用 __replace()__ 函数将字符串 ”30 Days Of JavaScript“ 修改为 ”30 Days Of Python“。
13. ”30 Days Of JavaScript“ 这个字符串的序号为15的字符是什么请使用 __charAt()__ 函数。
14. ”30 Days Of JavaScript“ 这个字符串里字符”J“的字符编码是什么请使用 __charCodeAt()__ 函数。
15. 用 __indexOf__ 函数找到 __a__ 字符在”30 Days Of JavaScript“字符串中第一次出现的位置。
16. 用 __lastIndexOf__ 函数找到 __a__ 字符在”30 Days Of JavaScript“字符串中最后一次出现的位置。
17. 用 __indexOf__ 函数找到 __because__ 这个词在 __”You cannot end a sentence with because because because is a conjunction“__ 这个句子中第一次出现的位置。
18. 用 __lastIndexOf__ 函数找到 __because__ 这个词在 __"You cannot end a sentence with because because because is a conjunction"__ 这个句子中第最后出现的位置。
19. 用 __search__ 函数找到 __because__ 这个词在 __”You cannot end a sentence with because because because is a conjunction“__ 这个句子中第一次出现的位置。
20. 用 __trim()__ 函数删除' 30 Days Of JavaScript '字符串的前后空格.
21. 将 __startsWith()__ 函数运用于 *30 Days Of JavaScript* 字符串并返回true
22. 用 __endsWith()__ 函数运用于 *30 Days Of JavaScript* 字符串并返回true
23. 用 __match()__ 函数找到 *30 Days Of JavaScript* 字符串里所有字母 __a__
24. 用 __concat()__ 函数合并 '30 Days of' 和 'JavaScript' 得到 '30 Days Of JavaScript'。
25. 用 __repeat()__ 函数输出两次*30 Days Of JavaScript* 。
### 作业:难度水平 2
1. 用 console.log() 输出以下字符串
```sh
The quote 'There is no exercise better for the heart than reaching down and lifting people up.' by John Holmes teaches us to help one another.
```
2. 用 console.log() 输出特蕾莎修女的名言:
```sh
"Love is not patronizing and charity isn't about pity, it is about love. Charity and love are the same -- with charity you give love, so don't just give money but reach out your hand instead."
```
3. 检查 typeof '10' 是否等于 10。如果不是使其相等。
4. 检查 parseFloat('9.8') 是否等于 10。如果不是使其相等。
5. 检查是否可以在 “python”和“jargon”中找到“on“。
6. _I hope this course is not full of jargon_. 检查 _jargon_ 是否在前句中。
7. 产生一个 \[0,100\] 的随机数。
8. 产生一个 \[50,100\] 的随机数。
9. 产生一个 \[0,255\] 的随机数。
10. 用随机数获取 'JavaScript' 字符串中的一个字符。
11. 用 console.log() 和分离字符输出下文。
```js
1 1 1 1 1
2 1 2 4 8
3 1 3 9 27
4 1 4 16 64
5 1 5 25 125
```
12. 用 __substr__ 函数将字符串 __because because because__ 从此句子 __'You cannot end a sentence with because because because is a conjunction'__ 中分离。
### 作业:难度水平 3
1. 'Love is the best thing in this world. Some found their love and some are still looking for their love.' 计算这个句子里面有多少个 __love__
2. 用 __match()__ 函数计算 __'You cannot end a sentence with because because because is a conjunction'__ 这个句子里有多少个 __because__
3. 美化下方文字并找到出现频率最高的词。(提示:用 replace 和 正则表达式)
```js
const sentence = '%I $am@% a %tea@cher%, &and& I lo%#ve %te@a@ching%;. The@re $is no@th@ing; &as& mo@re rewarding as educa@ting &and& @emp%o@weri@ng peo@ple. ;I found tea@ching m%o@re interesting tha@n any ot#her %jo@bs. %Do@es thi%s mo@tiv#ate yo@u to be a tea@cher!? %Th#is 30#Days&OfJavaScript &is al@so $the $resu@lt of &love& of tea&ching'
```
4. 'He earns 5000 euro from salary per month, 10000 euro annual bonus, 15000 euro online courses per month.' 通过从字符串中提取数字,计算这个人的年收入。
🎉 恭喜!🎉
[<< Day 1](../readMe.md) | [Day 3 >>](link_to_be_updated)
Loading…
Cancel
Save