- [Nối chuỗi bằng toán tử cộng](#concatenating-using-addition-operator)
- [Chuỗi dài](#long-literal-strings)
@ -48,29 +48,29 @@
## Kiểu dữ liệu
In the previous section, we mentioned a little bit about data types. Data or values have data types. Data types describe the characteristics of data. Data types can be divided into two:
Trong phần trước, chúng ta đã đề cập một chút về kiểu dữ liệu. Dữ liệu hoặc giá trị có kiểu dữ liệu. Kiểu dữ liệu mô tả các đặc điểm của dữ liệu. Các kiểu dữ liệu có thể được chia thành hai:
1. Primitive data types
2. Non-primitive data types(Object References)
1. Kiểu dữ liệu nguyên thủy
2. Kiểu dữ liệu không nguyên thủy (Tham chiếu đối tượng)
### Kiểu dữ liệu nguyên thuỷ
Primitive data types in JavaScript include:
Các kiểu dữ liệu nguyên thuỷ trong JavaScript bao gồm:
1. Numbers - Integers, floats
2. Strings - Any data under single quote, double quote or backtick quote
3. Booleans - true or false value
4. Null - empty value or no value
5. Undefined - a declared variable without a value
1. Số - Số thực, số nguyên
2. Chuỗi - Bất kỳ ký tự nào nằm trong dấu nháy đơn nháy kép, back-tick
3. Boolean - `true` hoặc `false`
4. Null - rỗng hoặc không có giá trị
5. Undefined - khai báo không gán giá trị
Non-primitive data types in JavaScript includes:
Các kiểu dữ liệu không nguyên thủy trong JavaScript bao gồm:
1. Objects
2. Functions
3. Arrays
Now, let us see what exactly primitive and non-primitive data types mean.
*Primitive* data types are immutable(non-modifiable) data types. Once a primitive data type is created we cannot modify it.
Bây giờ, chúng ta hãy xem các kiểu dữ liệu nguyên thủy và không nguyên thủy chính xác nghĩa là gì.
Kiểu dữ liệu *nguyên thủy* là kiểu dữ liệu bất biến (không thể sửa đổi). Khi một kiểu dữ liệu nguyên thủy được tạo, chúng ta không thể sửa đổi nó.
**Example:**
@ -78,14 +78,14 @@ Now, let us see what exactly primitive and non-primitive data types mean.
let word = 'JavaScript'
```
If we try to modify the string stored in variable *word*, JavaScript should raise an error. Any data type under a single quote, double quote, or backtick quote is a string data type.
Nếu chúng tôi cố gắng sửa đổi chuỗi được lưu trữ trong biến *word*, JavaScript sẽ phát sinh lỗi. Bất kỳ kiểu dữ liệu nào dưới dấu ngoặc kép, dấu ngoặc kép hoặc dấu ngoặc kép đều là kiểu dữ liệu chuỗi.
```js
word[0] = 'Y'
```
This expression does not change the string stored in the variable *word*. So, we can say that strings are not modifiable or in other words immutable.
Primitive data types are compared by its values. Let us compare different data values. See the example below:
Biểu thức này không thay đổi chuỗi được lưu trữ trong biến *word*. Vì vậy, chúng ta có thể nói rằng các chuỗi không thể sửa đổi hay nói cách khác là bất biến.
Các kiểu dữ liệu ban đầu được so sánh bằng các giá trị của nó. Hãy để chúng tôi so sánh các giá trị dữ liệu khác nhau. Xem ví dụ bên dưới:
*Non-primitive* data types are modifiable or mutable. We can modify the value of non-primitive data types after it gets created.
Let us see by creating an array. An array is a list of data values in a square bracket. Arrays can contain the same or different data types. Array values are referenced by their index. In JavaScript array index starts at zero. I.e., the first element of an array is found at index zero, the second element at index one, and the third element at index two, etc.
Các kiểu dữ liệu *không nguyên thủy* có thể sửa đổi hoặc thay đổi được. Chúng ta có thể sửa đổi giá trị của các kiểu dữ liệu không nguyên thủy sau khi nó được tạo.
Hãy để chúng tôi xem bằng cách tạo một mảng. Mảng là một danh sách các giá trị dữ liệu trong một dấu ngoặc vuông. Mảng có thể chứa các kiểu dữ liệu giống nhau hoặc khác nhau. Giá trị mảng được tham chiếu bởi chỉ mục của chúng. Trong JavaScript, chỉ mục mảng bắt đầu từ 0. Tức là, phần tử đầu tiên của một mảng được tìm thấy ở chỉ số 0, phần tử thứ hai ở chỉ mục một và phần tử thứ ba ở chỉ mục hai, v.v.
```js
let nums = [1, 2, 3]
@ -116,7 +116,7 @@ nums[0] = 10
console.log(nums) // [10, 2, 3]
```
As you can see, an array, which is a non-primitive data type is mutable. Non-primitive data types cannot be compared by value. Even if two non-primitive data types have the same properties and values, they are not strictly equal.
Như bạn có thể thấy, một mảng, một kiểu dữ liệu không phải nguyên thủy có thể thay đổi được. Các kiểu dữ liệu không nguyên thủy không thể được so sánh theo giá trị. Ngay cả khi hai kiểu dữ liệu không nguyên thủy có cùng thuộc tính và giá trị, chúng cũng không hoàn toàn bằng nhau.
```js
let nums = [1, 2, 3]
@ -139,8 +139,8 @@ country:'Finland'
console.log(userOne == userTwo) // false
```
Rule of thumb, we do not compare non-primitive data types. Do not compare arrays, functions, or objects.
Non-primitive values are referred to as reference types, because they are being compared by reference instead of value. Two objects are only strictly equal if they refer to the same underlying object.
Quy tắc ngón tay cái, chúng tôi không so sánh các kiểu dữ liệu không nguyên thủy. Không so sánh mảng, hàm hoặc đối tượng.
Các giá trị không nguyên thủy được gọi là kiểu tham chiếu, vì chúng đang được so sánh bằng tham chiếu thay vì giá trị. Hai đối tượng chỉ hoàn toàn bằng nhau nếu chúng tham chiếu đến cùng một đối tượng cơ bản.
```js
let nums = [1, 2, 3]
@ -159,14 +159,14 @@ let userTwo = userOne
console.log(userOne == userTwo) // true
```
If you have a hard time understanding the difference between primitive data types and non-primitive data types, you are not the only one. Calm down and just go to the next section and try to come back after some time. Now let us start the data types by number type.
Nếu bạn gặp khó khăn trong việc hiểu sự khác biệt giữa kiểu dữ liệu nguyên thủy và kiểu dữ liệu không nguyên thủy, bạn không phải là người duy nhất. Hãy bình tĩnh và chuyển sang phần tiếp theo và cố gắng quay lại sau một thời gian. Bây giờ chúng ta hãy bắt đầu các kiểu dữ liệu theo kiểu số.
## Numbers
## Số
Numbers are integers and decimal values which can do all the arithmetic operations.
Let's see some examples of Numbers.
Số là số nguyên và giá trị thập phân có thể thực hiện tất cả các phép toán số học.
In JavaScript the Math Object provides a lots of methods to work with numbers.
Trong JavaScript, Đối tượng Math cung cấp rất nhiều phương thức để tương tác các con số.
```js
const PI = Math.PI
@ -245,13 +245,13 @@ Math.cos(60)
#### Tạo số ngẫu nhiên
The JavaScript Math Object has a random() method number generator which generates number from 0 to 0.999999999...
Đối tượng Math trong JavaScript có phương thức `random()` để tạo ra số ngẫu nhiên từ 0 đến 0,999999999...
```js
let randomNum = Math.random() // generates 0 to 0.999...
```
Now, let us see how we can use random() method to generate a random number between 0 and 10:
Bây giờ, chúng ta hãy xem cách sử dụng phương thức `random()` để tạo số ngẫu nhiên từ 0 đến 10:
```js
let randomNum = Math.random() // generates 0 to 0.999
@ -260,13 +260,13 @@ let numBtnZeroAndTen = randomNum * 11
console.log(numBtnZeroAndTen) // this gives: min 0 and max 10.99
let randomNumRoundToFloor = Math.floor(numBtnZeroAndTen)
console.log(randomNumRoundToFloor) // this gives between 0 and 10
console.log(randomNumRoundToFloor) // số từ 0 đến 10
```
## Strings
## Chuỗi
Strings are texts, which are under **_single_** , **_double_**, **_back-tick_** quote. To declare a string, we need a variable name, assignment operator, a value under a single quote, double quote, or backtick quote.
Let's see some examples of strings:
Chuỗi là văn bản, nằm dưới dấu **nháy kép**, **nháy đơn**, **back-tick**. Để khai báo một chuỗi, chúng ta cần tên biến, toán tử gán, giá trị dưới dấu nháy đơn, dấu nháy kép hoặc dấu ngoặc kép.
Hãy xem một số ví dụ về chuỗi:
```js
let space = ' ' // chuỗi rỗng
@ -282,11 +282,11 @@ let quotWithBackTick = `The saying,'Seeing is Believing' is not correct in 2020.
### Nối chuỗi
Connecting two or more strings together is called concatenation.
Using the strings declared in the previous String section:
Nối hai hoặc nhiều chuỗi với nhau được gọi là nối chuỗi.
Sử dụng các chuỗi được khai báo trong phần Chuỗi trước:
```js
let fullName = firstName + space + lastName; // concatenation, merging two string together.
let fullName = firstName + space + lastName; // nối hai chuỗi với nhau.
console.log(fullName);
```
@ -294,14 +294,14 @@ console.log(fullName);
Asabeneh Yetayeh
```
We can concatenate strings in different ways.
Chúng ta có thể nối các chuỗi theo nhiều cách khác nhau.
#### Concatenating Using Addition Operator
#### Sử dụng toán tử cộng để nối chuỗi
Concatenating using the addition operator is an old way. This way of concatenating is tedious and error-prone. It is good to know how to concatenate this way, but I strongly suggest to use the ES6 template strings (explained later on).
Nối chuỗi bằng cách sử dụng toán tử bổ sung là một cách cũ. Cách nối này tẻ nhạt và dễ xảy ra lỗi. Thật tốt khi biết cách nối theo cách này, nhưng tôi thực sự khuyên bạn nên sử dụng chuỗi mẫu ES6 (sẽ giải thích ở phần sau).
```js
// Declaring different variables of different data types
// Khai báo biến với các kiểu dữ liệu khác nhau
let space = ' '
let firstName = 'Asabeneh'
let lastName = 'Yetayeh'
@ -324,8 +324,9 @@ Asabeneh Yetayeh. I am 250. I live in Finland
#### Chuỗi dài
A string could be a single character or paragraph or a page. If the string length is too big it does not fit in one line. We can use the backslash character (\\) at the end of each line to indicate that the string will continue on the next line.
**Example:**
Một chuỗi có thể là một ký tự hoặc đoạn hoặc một trang. Nếu độ dài chuỗi quá lớn, nó không vừa với một dòng. Chúng ta có thể sử dụng ký tự gạch chéo ngược (\\) ở cuối mỗi dòng để chỉ ra rằng chuỗi sẽ tiếp tục ở dòng tiếp theo.
**Ví dụ:**
```js
const paragraph = "My name is Asabeneh Yetayeh. I live in Finland, Helsinki.\
@ -342,7 +343,7 @@ console.log(paragraph)
#### Chuỗi thoát trong Strings
In JavaScript and other programming languages \ followed by some characters is an escape sequence. Let's see the most common escape characters:
Trong JavaScript và các ngôn ngữ lập trình khác \ theo sau một số ký tự là một chuỗi thoát. Hãy xem các ký tự thoát phổ biến nhất:
- \n: new line
- \t: Tab, means 8 spaces
@ -357,13 +358,13 @@ 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 (\\)') // To write a backslash
console.log('This is a backslash symbol (\\)') // Để viết một dấu gạch chéo ngược
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')
```
Output in console:
Kết quả trong console:
```sh
I hope everyone is enjoying the Học JavaScript trong 30 ngày challenge.
@ -381,7 +382,7 @@ The saying 'Seeing is Believing' isn't correct in 2020
#### Template Literals (Template Strings)
To create a template strings, we use two back-ticks. We can inject data as expressions inside a template string. To inject data, we enclose the expression with a curly bracket({}) preceded by a $ sign. See the syntax below.
Để tạo chuỗi mẫu, chúng tôi sử dụng hai dấu tích. Chúng ta có thể đưa dữ liệu vào dưới dạng các biểu thức bên trong một chuỗi mẫu. Để nhập dữ liệu, chúng tôi đặt biểu thức bằng một dấu ngoặc nhọn ({}) trước dấu $. Xem cú pháp bên dưới.
```js
//Syntax
@ -435,9 +436,9 @@ console.log(`${a} is greater than ${b}: ${a > b}`)
### Phương thức String
Everything in JavaScript is an object. A string is a primitive data type that means we can not modify it once it is created. The string object has many string methods. There are different string methods that can help us to work with strings.
Mọi thứ trong JavaScript đều là một đối tượng. Chuỗi là một kiểu dữ liệu nguyên thủy có nghĩa là chúng ta không thể sửa đổi nó sau khi nó được tạo. Đối tượng string có nhiều phương thức string. Có nhiều phương thức chuỗi khác nhau có thể giúp chúng tôi làm việc với chuỗi.
1. *length*: The string *length* method returns the number of characters in a string included empty space.
1. *length*: Phương thức `length` trả về độ dài của chuỗi bao gồm không gian trống.
**Example:**
@ -448,11 +449,11 @@ let firstName = 'Asabeneh'
console.log(firstName.length) // 8
```
2. *Accessing characters in a string*: We can access each character in a string using its index. In programming, counting starts from 0. The first index of the string is zero, and the last index is the length of the string minus one.
2. *Truy cập các ký tự trong chuỗi*: Chúng ta có thể truy cập từng ký tự trong một chuỗi bằng cách sử dụng chỉ mục của nó. Trong lập trình, việc đếm bắt đầu từ 0. Chỉ số đầu tiên của chuỗi bằng 0 và chỉ số cuối cùng là độ dài của chuỗi trừ đi một.
![Accessing sting by index](../../images/string_indexes.png)
![Truy cập string theo index](../../images/string_indexes.png)
Let us access different characters in 'JavaScript' string.
phương thức này thay đổi chuỗi thành chữ thường..
```js
let string = 'JavaScript'
@ -472,7 +473,7 @@ console.log(lastIndex) // 9
console.log(string[lastIndex]) // t
```
3. *toUpperCase()*: this method changes the string to uppercase letters.
3. *toUpperCase()*: thay đổi chuỗi thành chữ hoa.
```js
let string = 'JavaScript'
@ -488,7 +489,7 @@ let country = 'Finland'
console.log(country.toUpperCase()) // FINLAND
```
4. *toLowerCase()*: this method changes the string to lowercase letters.
4. *toLowerCase()*: thay đổi chuỗi thành chữ thường.
```js
let string = 'JavasCript'
@ -504,7 +505,7 @@ let country = 'Finland'
console.log(country.toLowerCase()) // finland
```
5. *substr()*: It takes two arguments, the starting index and number of characters to slice.
5. *substr()*: Cần có hai đối số, index bắt đầu và số ký tự để cắt.
```js
let string = 'JavaScript'
@ -514,7 +515,7 @@ let country = 'Finland'
console.log(country.substr(3, 4)) // land
```
6. *substring()*: It takes two arguments, the starting index and the stopping index but it doesn't include the character at the stopping index.
6. *substring()*: Nó có hai đối số, index bắt đầu và index dừng nhưng nó không bao gồm ký tự ở index dừng.
```js
let string = 'JavaScript'
@ -530,7 +531,7 @@ console.log(country.substring(3, 7)) // land
console.log(country.substring(3)) // land
```
7. *split()*: The split method splits a string at a specified place.
7. *split()*: Tách một chuỗi tại một vị trí được chỉ định.
```js
let string = 'Học JavaScript trong 30 ngày'
@ -545,11 +546,11 @@ console.log(firstName.split('')) // Split to an array at each letter -> ["A",
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(',')) // tách thành mảng tại dấu phẩy -> ["Finland", " Sweden", " Norway", " Denmark", " and Iceland"]
8. *trim()*: Removes trailing space in the beginning or the end of a string.
8. *trim()*: Loại bỏ khoảng trắng ở đầu hoặc cuối chuỗi.
```js
let string = ' Học JavaScript trong 30 ngày '
@ -560,7 +561,7 @@ 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
console.log(firstName.trim()) // vẫn xóa khoảng trắng ở đầu và cuối chuỗi
```
```sh
@ -570,7 +571,7 @@ Học JavaScript trong 30 ngày
Asabeneh
```
9. *includes()*: It takes a substring argument and it checks if substring argument exists in the string. *includes()* returns a boolean. If a substring exist in a string, it returns true, otherwise it returns false.
9. *includes()*: Nó nhận một đối số chuỗi con và nó kiểm tra xem đối số chuỗi con có tồn tại trong chuỗi hay không. `include()` trả về kiểu boolean. Nếu một chuỗi con tồn tại trong một chuỗi, nó trả về `true`, ngược lại là `false`.
11. *charAt()*: Takes index and it returns the value at that index
11. *charAt()*: Lấy index và nó trả về giá trị tại index đó
```js
string.charAt(index)
@ -618,7 +619,7 @@ let lastIndex = string.length - 1
console.log(string.charAt(lastIndex)) // t
```
12. *charCodeAt()*: Takes index and it returns char code (ASCII number) of the value at that index
12. *charCodeAt()*: Lấy index và nó trả về mã char (số ASCII) của giá trị tại index đó.
```js
string.charCodeAt(index)
@ -633,7 +634,7 @@ console.log(string.charCodeAt(lastIndex)) // t ASCII is 116
```
13. *indexOf()*: Takes a substring and if the substring exists in a string it returns the first position of the substring if does not exist it returns -1
13. *indexOf()*: Lấy một chuỗi con và nếu chuỗi con tồn tại trong một chuỗi, nó trả về vị trí đầu tiên của chuỗi con nếu không tồn tại nó trả về `-1`.
14. *lastIndexOf()*: Takes a substring and if the substring exists in a string it returns the last position of the substring if it does not exist it returns -1
14. *lastIndexOf()*: Lấy một chuỗi con và nếu chuỗi con tồn tại trong một chuỗi, nó trả về vị trí cuối cùng của chuỗi con nếu nó không tồn tại, nó trả về `-1`.
15. *concat()*: it takes many substrings and joins them.
15. *concat()*: nối các chuỗi được truyền vào nó
```js
string.concat(substring, substring, substring)
@ -681,7 +682,7 @@ let country = 'Fin'
console.log(country.concat("land")) // Finland
```
16. *startsWith*: it takes a substring as an argument and it checks if the string starts with that specified substring. It returns a boolean(true or false).
16. *startsWith*: nó nhận một chuỗi con làm đối số và nó kiểm tra xem chuỗi có bắt đầu bằng chuỗi con được chỉ định hay không. Nó trả về kiểu boolean (`true` hoặc `false`).
17. *endsWith*: it takes a substring as an argument and it checks if the string ends with that specified substring. It returns a boolean(true or false).
17. *endsWith*: nó nhận một chuỗi con làm đối số và nó kiểm tra xem chuỗi có kết thúc bằng chuỗi con được chỉ định hay không. Nó trả về kiểu boolean (`true` hoặc `false`).
18. *search*: it takes a substring as an argument and it returns the index of the first match. The search value can be a string or a regular expression pattern.
18. *search*: nó nhận một chuỗi con làm đối số và nó trả về index của kết quả khớp đầu tiên. Giá trị tìm kiếm có thể là một chuỗi hoặc một mẫu biểu thức chính quy.
19. *match*: it takes a substring or regular expression pattern as an argument and it returns an array if there is match if not it returns null. Let us see how a regular expression pattern looks like. It starts with / sign and ends with / sign.
19. *match*: nó nhận một chuỗi con hoặc một mẫu biểu thức chính quy làm đối số và nó trả về một mảng nếu có khớp nếu không thì nó trả về null. Hãy để chúng tôi xem mẫu biểu thức chính quy trông như thế nào. Nó bắt đầu bằng dấu / và kết thúc bằng dấu /.
```js
let string = 'love'
@ -742,7 +743,7 @@ let patternOne = /love/ // with out any flag
let patternTwo = /love/gi // g-means to search in the whole text, i - case insensitive
Let us extract numbers from text using a regular expression. This is not the regular expression section, do not panic! We will cover regular expressions later on.
Chúng ta hãy tách các số từ văn bản bằng cách sử dụng một biểu thức chính quy. Đây không phải là phần biểu thức chính quy, đừng hoảng sợ! Chúng ta sẽ đề cập đến các cụm từ thông dụng ở phần sau.
```js
let txt = 'In 2019, I ran 30 Days of Python. Now, in 2020 I am super exited to start this challenge'
- Casting: Converting one data type to another data type. We use _parseInt()_, _parseFloat()_, _Number()_, _+ sign_, _str()_
When we do arithmetic operations string numbers should be first converted to integer or float if not it returns an error.
- Kép kiểu: Chuyển đổi một kiểu dữ liệu này sang kiểu dữ liệu khác. Có các phương thức như `parseInt()`, `parseFloat()`, `Number()`, `dấu +`, `str()`.
Khi chúng ta thực hiện các phép toán số học, đầu tiên chuỗi số phải được chuyển đổi thành số nguyên hoặc float nếu không nó sẽ trả về lỗi.
#### String thành Int
We can convert string number to a number. Any number inside a quote is a string number. An example of a string number: '10', '5', etc.
We can convert string to number using the following methods:
Chúng ta có thể chuyển đổi chuỗi số thành một số. Bất kỳ số nào bên trong một dấu ngoặc kép là một chuỗi số. Ví dụ về chuỗi số: '10', '5', v.v.
Chúng ta có thể chuyển đổi chuỗi thành số bằng các phương pháp sau:
- parseInt()
- Number()
- Plus sign(+)
- Dấu cộng (+)
```js
let num = '10'
@ -855,12 +856,12 @@ console.log(numInt) // 10
#### String thành Float
We can convert string float number to a float number. Any float number inside a quote is a string float number. An example of a string float number: '9.81', '3.14', '1.44', etc.
We can convert string float to number using the following methods:
Chúng ta có thể chuyển đổi chuỗi số thực thành một số thực. Bất kỳ số thực nào bên trong dấu ngoặc kép đều là chuỗi số thực. Ví dụ về chuỗi số thực: '9.81', '3.14', '1.44', v.v.
Chúng ta có thể chuyển đổi chuỗi số thực thành số bằng các phương pháp sau:
- parseFloat()
- Number()
- Plus sign(+)
- Dấu cộng (+)
```js
let num = '9.81'
@ -885,10 +886,8 @@ console.log(numFloat) // 9.81
#### Float thành Int
We can convert float numbers to integers.
We use the following method to convert float to int:
- parseInt()
Chúng ta có thể chuyển đổi số thực thành số nguyên.
Sử dụng phương thức `parseInt()` để chuyển đổi float thành int:
```js
let num = 9.81
@ -897,61 +896,61 @@ let numInt = parseInt(num)
console.log(numInt) // 9
```
🌕 You are awesome. You have just completed day 2 challenges and you are two steps ahead on your way to greatness. Now do some exercises for your brain and for your muscle.
🌕 Bạn thật tuyệt vời. Bạn vừa hoàn thành thử thách ngày thứ 2 và bạn đang đi trước hai bước trên con đường vươn tới sự vĩ đại. Bây giờ hãy thực hiện một số bài tập cho não và cho cơ của bạn.
## 💻 Ngày 2: Bài tập
### Bài tập: Cấp độ 1
1. Declare a variable named challenge and assign it to an initial value**'Học JavaScript trong 30 ngày'**.
2. Print the string on the browser console using __console.log()__
3. Print the __length__ of the string on the browser console using _console.log()_
4. Change all the string characters to capital letters using __toUpperCase()__ method
5. Change all the string characters to lowercase letters using __toLowerCase()__ method
6. Cut (slice) out the first word of the string using __substr()__ or __substring()__ method
7. Slice out the phrase *Days Of JavaScript* from *Học JavaScript trong 30 ngày*.
8. Check if the string contains a word __Script__ using __includes()__ method
9. Split the __string__ into an __array__ using __split()__ method
10. Split the string Học JavaScript trong 30 ngày at the space using __split()__ method
11. 'Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon' __split__ the string at the comma and change it to an array.
12. Change Học JavaScript trong 30 ngày to 30 Days Of Python using __replace()__ method.
13. What is character at index 15 in 'Học JavaScript trong 30 ngày' string? Use __charAt()__ method.
14. What is the character code of J in 'Học JavaScript trong 30 ngày' string using __charCodeAt()__
15. Use __indexOf__ to determine the position of the first occurrence of __a__ in Học JavaScript trong 30 ngày
16. Use __lastIndexOf__ to determine the position of the last occurrence of __a__ in Học JavaScript trong 30 ngày.
17. Use __indexOf__ to find the position of the first occurrence of the word __because__ in the following sentence:__'You cannot end a sentence with because because because is a conjunction'__
18. Use __lastIndexOf__ to find the position of the last occurrence of the word __because__ in the following sentence:__'You cannot end a sentence with because because because is a conjunction'__
19. Use __search__ to find the position of the first occurrence of the word __because__ in the following sentence:__'You cannot end a sentence with because because because is a conjunction'__
20. Use __trim()__ to remove any trailing whitespace at the beginning and the end of a string.E.g ' Học JavaScript trong 30 ngày '.
21. Use __startsWith()__ method with the string *Học JavaScript trong 30 ngày* and make the result true
22. Use __endsWith()__ method with the string *Học JavaScript trong 30 ngày* and make the result true
23. Use __match()__ method to find all the __a__’s in Học JavaScript trong 30 ngày
24. Use __concat()__ and merge '30 Days of' and 'JavaScript' to a single string, 'Học JavaScript trong 30 ngày'
25. Use __repeat()__ method to print Học JavaScript trong 30 ngày 2 times
1. Khai báo một biến có tên là challenge và gán giá trị là**'Học JavaScript trong 30 ngày'**.
2. In chuỗi trên console của trình duyệt bằng __console.log()__.
3. In __độ dài__ của chuỗi trên console của trình duyệt bằng cách sử dụng __console.log()__.
4. Đổi thành chữ in hoa tất cả ký tự trong chuỗi bằng phương thức __toUpperCase()__.
5. Đổi thành chữ thường tất cả ký tự trong chuỗi bằng phương thức __toLowerCase()__.
6. Cắt (slice) từ đầu tiên của chuỗi bằng cách sử dụng phương thức __substr()__ hoặc __substring()__.
7. Cắt bỏ cụm từ *Học JavaScript* from *Học JavaScript trong 30 ngày*.
8. Sử dụng phương thức __includes()__ để kiểm tra xem __Script__ có trong chuỗi hay không.
9. Tách __string__ thành __array__ sử dụng phương thức __split()__
10. Tách chuỗi __Học JavaScript trong 30 ngày__ tại khoảng trắng bằng phương thức __split()__
11. 'Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon' __tách__ chuỗi tại dấu phẩy và đổi thành một mảng.
12. Sử dụng __replace()__ để đổi __Học JavaScript trong 30 ngày__ thành __Học Python trong 30 ngày__.
13. Ký tự ở index 15 trong chuỗi 'Học JavaScript trong 30 ngày' là gì? Sử dụng phương thức __charAt()__.
14. Mã ký tự của J trong chuỗi 'Học JavaScript trong 30 ngày' bằng cách sử dụng là gì __charCodeAt()__
15. Sử dụng phương thức __indexOf__ để xác định vị trí của lần xuất hiện đầu tiên của từ __o__ trong Học JavaScript trong 30 ngày
16. Sử dụng phương thức __lastIndexOf__ để xác định vị trí của lần xuất hiện cuối cùng của từ __o__ trong __Học JavaScript trong 30 ngày__.
17. Sử dụng phương thức __indexOf__ để tìm vị trí xuất hiện đầu tiên của từ __vì__ trong câu sau:__'Bạn không thể kết thúc câu bằng bởi vì bởi vì bởi vì là một liên từ'__
18. Sử dụng phương thức __lastIndexOf__ để tìm vị trí xuất hiện cuối cùng của từ __vì__ trong câu sau:__'Bạn không thể kết thúc câu bằng bởi vì bởi vì bởi vì là một liên từ'__
19. Sử dụng phương thức __search__ để tìm vị trí xuất hiện đầu tiên của từ __vì__ trong câu sau:__'Bạn không thể kết thúc câu bằng bởi vì bởi vì bởi vì là một liên từ'__
20. Sử dụng phương thức __trim()__ để xóa mọi khoảng trắng ở đầu và cuối chuỗi. ví dụ ' Học JavaScript trong 30 ngày '.
21. Sử dụng phương thức __startsWith()__ với chuỗi *Học JavaScript trong 30 ngày* và làm kết quả thành `true`.
22. Sử dụng phương thức __endsWith()__ với chuỗi *Học JavaScript trong 30 ngày* và làm cho kết quả thành `true`.
23. Sử dụng phương thức __match()__ để tìm tất cả chữ __o__ có trong __Học JavaScript trong 30 ngày__
24. Sử dụng __concat()__ để thêm 'Học JavaScript trong' và '30 ngày' vào 1 chuỗi, 'Học JavaScript trong 30 ngày'
25. Sử dụng phương thức __repeat()__ để in __Học JavaScript trong 30 ngày__ 2 lần.
### Bài tập: Cấp độ 2
1. Using console.log() print out the following statement:
1. `Sử dụng console.log()` in ra câu lệnh sau:
```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. Using console.log() print out the following quote by Mother Teresa:
2. Sử dụng `console.log()` in ra câu trích dẫn sau đây của Mẹ Teresa:
```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. Check if typeof '10' is exactly equal to 10. If not make it exactly equal.
4. Check if parseFloat('9.8') is equal to 10 if not make it exactly equal with 10.
5. Check if 'on' is found in both python and jargon
6. _I hope this course is not full of jargon_. Check if _jargon_ is in the sentence.
7. Generate a random number between 0 and 100 inclusively.
8. Generate a random number between 50 and 100 inclusively.
9. Generate a random number between 0 and 255 inclusively.
10. Access the 'JavaScript' string characters using a random number.
11. Use console.log() and escape characters to print the following pattern.
3. Kiểm tra xem typeof '10' có bằng 10 hay không. Nếu không, hãy làm cho nó bằng nhau.
4. Kiểm tra xem `parseFloat('9, 8')` có bằng 10 hay không nếu không hãy làm cho nó bằng 10.
5. Kiểm tra xem có tìm thấy 'on' trong python và jargon không.
6. _Tôi hy vọng khóa học này không chứa đầy những biệt ngữ_. Kiểm tra nếu _biệt ngữ_ có trong câu.
7. Tạo một số ngẫu nhiên từ 0 đến 100.
8. Tạo một số ngẫu nhiên từ 50 đến 100.
9. Tạo một số ngẫu nhiên từ 0 đến 255.
10. Truy cập các ký tự chuỗi 'JavaScript' bằng cách sử dụng số ngẫu nhiên.
11. Sử dụng `console.log()` và các ký tự thoát để in mẫu sau.
```js
1 1 1 1 1
@ -961,20 +960,20 @@ console.log(numInt) // 9
5 1 5 25 125
```
12. Use __substr__ to slice out the phrase __because because because__ from the following sentence:__'You cannot end a sentence with because because because is a conjunction'__
12. Sử dụng __substr__ để cắt ra cụm từ __bởi vì bởi vì__ từ câu sau:__'Bạn không thể kết thúc câu bằng bởi vì bởi vì bởi vì là một liên từ'__
### Bài tập: Cấp độ 3
1. 'Love is the best thing in this world. Some found their love and some are still looking for their love.' Count the number of word __love__ in this sentence.
2. Use __match()__ to count the number of all __because__ in the following sentence:__'You cannot end a sentence with because because because is a conjunction'__
1. 'Tình yêu là điều tuyệt vời nhất trên thế giới này. Một số đã tìm thấy tình yêu của mình và một số vẫn đang tìm kiếm tình yêu của mình.' Đếm số từ __tình yêu__ trong câu này.
2. Sử dụng __match()__ để đếm số lần từ __vì_ trong câu sau:__'Bạn không thể kết thúc câu bằng bởi vì bởi vì bởi vì là một liên từ'__
3. Clean the following text and find the most frequent word (hint, use replace and regular expressions).
```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. Calculate the total annual income of the person by extracting the numbers from the following text. 'He earns 5000 euro from salary per month, 10000 euro annual bonus, 15000 euro online courses per month.'
4. Tính tổng thu nhập hàng năm của người đó bằng cách trích các số từ văn bản sau. 'Anh ấy kiếm được 5000 euro từ lương mỗi tháng, 10000 euro tiền thưởng hàng năm, các khóa học trực tuyến 15000 euro mỗi tháng.'
🎉 CONGRATULATIONS ! 🎉
🎉 CHÚC MỪNG ! 🎉
[<< Day 1](../readMe.md) | [Day 3 >>](../03_Day_Booleans_operators_date/03_booleans_operators_date.md)
[<< Ngày 1](../README.md) | [Ngày 3 >>](../03_Day_Booleans_operators_date/03_booleans_operators_date.md)