+
+
+
+
+
diff --git a/01_Day_Introduction/01_day_starter/varaible.js b/01_Day_Introduction/01_day_starter/variable.js
similarity index 100%
rename from 01_Day_Introduction/01_day_starter/varaible.js
rename to 01_Day_Introduction/01_day_starter/variable.js
diff --git a/02_Day_Data_types/02_day_data_types.md b/02_Day_Data_types/02_day_data_types.md
index 198ae2b26..e27d43d7e 100644
--- a/02_Day_Data_types/02_day_data_types.md
+++ b/02_Day_Data_types/02_day_data_types.md
@@ -19,30 +19,30 @@

- [📔 Day 2](#-day-2)
- - [Data Types](#data-types)
- - [Primitive Data Types](#primitive-data-types)
- - [Non-Primitive Data Types](#non-primitive-data-types)
- - [Numbers](#numbers)
- - [Declaring Number Data Types](#declaring-number-data-types)
- - [Math Object](#math-object)
- - [Random Number Generator](#random-number-generator)
- - [Strings](#strings)
- - [String Concatenation](#string-concatenation)
- - [Concatenating Using Addition Operator](#concatenating-using-addition-operator)
- - [Long Literal Strings](#long-literal-strings)
- - [Escape Sequences in Strings](#escape-sequences-in-strings)
- - [Template Literals (Template Strings)](#template-literals-template-strings)
- - [String Methods](#string-methods)
- - [Checking Data Types and Casting](#checking-data-types-and-casting)
- - [Checking Data Types](#checking-data-types)
- - [Changing Data Type (Casting)](#changing-data-type-casting)
- - [String to Int](#string-to-int)
- - [String to Float](#string-to-float)
- - [Float to Int](#float-to-int)
- - [💻 Day 2: Exercises](#-day-2-exercises)
- - [Exercise: Level 1](#exercise-level-1)
- - [Exercise: Level 2](#exercise-level-2)
- - [Exercises: Level 3](#exercises-level-3)
+ - [Data Types](#data-types)
+ - [Primitive Data Types](#primitive-data-types)
+ - [Non-Primitive Data Types](#non-primitive-data-types)
+ - [Numbers](#numbers)
+ - [Declaring Number Data Types](#declaring-number-data-types)
+ - [Math Object](#math-object)
+ - [Random Number Generator](#random-number-generator)
+ - [Strings](#strings)
+ - [String Concatenation](#string-concatenation)
+ - [Concatenating Using Addition Operator](#concatenating-using-addition-operator)
+ - [Long Literal Strings](#long-literal-strings)
+ - [Escape Sequences in Strings](#escape-sequences-in-strings)
+ - [Template Literals (Template Strings)](#template-literals-template-strings)
+ - [String Methods](#string-methods)
+ - [Checking Data Types and Casting](#checking-data-types-and-casting)
+ - [Checking Data Types](#checking-data-types)
+ - [Changing Data Type (Casting)](#changing-data-type-casting)
+ - [String to Int](#string-to-int)
+ - [String to Float](#string-to-float)
+ - [Float to Int](#float-to-int)
+ - [💻 Day 2: Exercises](#-day-2-exercises)
+ - [Exercise: Level 1](#exercise-level-1)
+ - [Exercise: Level 2](#exercise-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
# 📔 Day 2
@@ -62,12 +62,12 @@ Primitive data types in JavaScript include:
3. Booleans - true or false value
4. Null - empty value or no value
5. Undefined - a declared variable without a value
+ 6. Symbol - A unique value that can be generated by Symbol constructor
Non-primitive data types in JavaScript includes:
1. Objects
-2. Functions
-3. Arrays
+2. 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.
@@ -231,6 +231,10 @@ console.log(Math.E) // 2.718
console.log(Math.log(2)) // 0.6931471805599453
console.log(Math.log(10)) // 2.302585092994046
+// Returns the natural logarithm of 2 and 10 respectively
+console.log(Math.LN2) // 0.6931471805599453
+console.log(Math.LN10) // 2.302585092994046
+
// Trigonometry
Math.sin(0)
Math.sin(60)
@@ -876,7 +880,7 @@ console.log(numFloat) // 9.81
let num = '9.81'
let numFloat = +num
-console.log(numInt) // 9.81
+console.log(numFloat) // 9.81
```
#### Float to Int
diff --git a/02_Day_Data_types/02_day_starter/index.html b/02_Day_Data_types/02_day_starter/index.html
index 03ea938ee..8fbbe0d1b 100644
--- a/02_Day_Data_types/02_day_starter/index.html
+++ b/02_Day_Data_types/02_day_starter/index.html
@@ -1,5 +1,5 @@
-
+
30DaysOfJavaScript
diff --git a/02_Day_Data_types/string_methods/match.js b/02_Day_Data_types/string_methods/match.js
index 54e18a83c..40d1ffd6e 100644
--- a/02_Day_Data_types/string_methods/match.js
+++ b/02_Day_Data_types/string_methods/match.js
@@ -14,7 +14,7 @@ let pattern = /love/gi
console.log(string.match(pattern)) // ["love", "love", "love"]
// Let us extract numbers from text using regular expression. This is not regular expression section, no panic.
-let txt = 'In 2019, I run 30 Days of Pyhton. Now, in 2020 I super exited to start this challenge'
+let txt = 'In 2019, I run 30 Days of Python. Now, in 2020 I super exited to start this challenge'
let regEx = /\d/g // d with escape character means d not a normal d instead acts a digit
// + means one or more digit numbers,
// if there is g after that it means global, search everywhere.
diff --git a/02_Day_Data_types/string_methods/split.js b/02_Day_Data_types/string_methods/split.js
index 6b0ce6e79..f955bcc41 100644
--- a/02_Day_Data_types/string_methods/split.js
+++ b/02_Day_Data_types/string_methods/split.js
@@ -1,5 +1,5 @@
// split(): The split method splits a string at a specified place.
-let string = '30 Days Of JavaScipt'
+let string = '30 Days Of JavaScript'
console.log(string.split()) // ["30 Days Of JavaScript"]
console.log(string.split(' ')) // ["30", "Days", "Of", "JavaScript"]
let firstName = 'Asabeneh'
diff --git a/03_Day_Booleans_operators_date/03_booleans_operators_date.md b/03_Day_Booleans_operators_date/03_booleans_operators_date.md
index ec847c508..bb376ae46 100644
--- a/03_Day_Booleans_operators_date/03_booleans_operators_date.md
+++ b/03_Day_Booleans_operators_date/03_booleans_operators_date.md
@@ -18,38 +18,38 @@

- [📔 Day 3](#-day-3)
- - [Booleans](#booleans)
- - [Truthy values](#truthy-values)
- - [Falsy values](#falsy-values)
- - [Undefined](#undefined)
- - [Null](#null)
- - [Operators](#operators)
- - [Assignment operators](#assignment-operators)
- - [Arithmetic Operators](#arithmetic-operators)
- - [Comparison Operators](#comparison-operators)
- - [Logical Operators](#logical-operators)
- - [Increment Operator](#increment-operator)
- - [Decrement Operator](#decrement-operator)
- - [Ternary Operators](#ternary-operators)
- - [Operator Precendence](#operator-precendence)
- - [Window Methods](#window-methods)
- - [Window alert() method](#window-alert-method)
- - [Window prompt() method](#window-prompt-method)
- - [Window confirm() method](#window-confirm-method)
- - [Date Object](#date-object)
- - [Creating a time object](#creating-a-time-object)
- - [Getting full year](#getting-full-year)
- - [Getting month](#getting-month)
- - [Getting date](#getting-date)
- - [Getting day](#getting-day)
- - [Getting hours](#getting-hours)
- - [Getting minutes](#getting-minutes)
- - [Getting seconds](#getting-seconds)
- - [Getting time](#getting-time)
- - [💻 Day 3: Exercises](#-day-3-exercises)
- - [Exercises: Level 1](#exercises-level-1)
- - [Exercises: Level 2](#exercises-level-2)
- - [Exercises: Level 3](#exercises-level-3)
+ - [Booleans](#booleans)
+ - [Truthy values](#truthy-values)
+ - [Falsy values](#falsy-values)
+ - [Undefined](#undefined)
+ - [Null](#null)
+ - [Operators](#operators)
+ - [Assignment operators](#assignment-operators)
+ - [Arithmetic Operators](#arithmetic-operators)
+ - [Comparison Operators](#comparison-operators)
+ - [Logical Operators](#logical-operators)
+ - [Increment Operator](#increment-operator)
+ - [Decrement Operator](#decrement-operator)
+ - [Ternary Operators](#ternary-operators)
+ - [Operator Precedence](#operator-precedence)
+ - [Window Methods](#window-methods)
+ - [Window alert() method](#window-alert-method)
+ - [Window prompt() method](#window-prompt-method)
+ - [Window confirm() method](#window-confirm-method)
+ - [Date Object](#date-object)
+ - [Creating a time object](#creating-a-time-object)
+ - [Getting full year](#getting-full-year)
+ - [Getting month](#getting-month)
+ - [Getting date](#getting-date)
+ - [Getting day](#getting-day)
+ - [Getting hours](#getting-hours)
+ - [Getting minutes](#getting-minutes)
+ - [Getting seconds](#getting-seconds)
+ - [Getting time](#getting-time)
+ - [💻 Day 3: Exercises](#-day-3-exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
# 📔 Day 3
@@ -218,7 +218,7 @@ console.log('python'.length > 'dragon'.length) // false
```
Try to understand the above comparisons with some logic. Remembering without any logic might be difficult.
-JavaScript is some how a wired kind of programming language. JavaScript code run and give you a result but unless you are good at it may not be the desired result.
+JavaScript is somehow a wired kind of programming language. JavaScript code run and give you a result but unless you are good at it may not be the desired result.
As rule of thumb, if a value is not true with == it will not be equal with ===. Using === is safer than using ==. The following [link](https://dorey.github.io/JavaScript-Equality-Table/) has an exhaustive list of comparison of data types.
@@ -254,7 +254,7 @@ let isMarried = !false // true
### Increment Operator
-In JavaScrip we use the increment operator to increase a value stored in a variable. The increment could be pre or post increment. Let us see each of them:
+In JavaScript we use the increment operator to increase a value stored in a variable. The increment could be pre or post increment. Let us see each of them:
1. Pre-increment
@@ -276,7 +276,7 @@ We use most of the time post-increment. At least you should remember how to use
### Decrement Operator
-In JavaScrip we use the decrement operator to decrease a value stored in a variable. The decrement could be pre or post decrement. Let us see each of them:
+In JavaScript we use the decrement operator to decrease a value stored in a variable. The decrement could be pre or post decrement. Let us see each of them:
1. Pre-decrement
@@ -333,9 +333,9 @@ number > 0
-5 is a negative number
```
-### Operator Precendence
+### Operator Precedence
-I would like to recommend you to read about operator precendence from this [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)
+I would like to recommend you to read about operator precedence from this [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)
## Window Methods
@@ -568,9 +568,9 @@ console.log(`${date}/${month}/${year} ${hours}:${minutes}`) // 4/1/2020 0:56
1. Get length and width using prompt and calculate an area of rectangle (area = length x width and the perimeter of rectangle (perimeter = 2 x (length + width))
1. Get radius using prompt and calculate the area of a circle (area = pi x r x r) and circumference of a circle(c = 2 x pi x r) where pi = 3.14.
1. Calculate the slope, x-intercept and y-intercept of y = 2x -2
-1. Slope is (m = y2-y1/x2-x1). Find the slope between point (2, 2) and point(6,10)
+1. Slope is m = (y2-y1)/(x2-x1). Find the slope between point (2, 2) and point(6,10)
1. Compare the slope of above two questions.
-1. Calculate the value of y (y = x^2 + 6x + 9). Try to use different x values and figure out at what x value y is 0.
+1. Calculate the value of y (y = x2 + 6x + 9). Try to use different x values and figure out at what x value y is 0.
1. Writ a script that prompt a user to enter hours and rate per hour. Calculate pay of the person?
```sh
diff --git a/03_Day_Booleans_operators_date/03_day_starter/index.html b/03_Day_Booleans_operators_date/03_day_starter/index.html
index 3db517d8c..2a8e6a80f 100644
--- a/03_Day_Booleans_operators_date/03_day_starter/index.html
+++ b/03_Day_Booleans_operators_date/03_day_starter/index.html
@@ -1,5 +1,5 @@
-
+
30DaysOfJavaScript: 03 Day
diff --git a/04_Day_Conditionals/04_day_conditionals.md b/04_Day_Conditionals/04_day_conditionals.md
index b2a935a80..010084499 100644
--- a/04_Day_Conditionals/04_day_conditionals.md
+++ b/04_Day_Conditionals/04_day_conditionals.md
@@ -18,16 +18,16 @@

- [📔 Day 4](#-day-4)
- - [Conditionals](#conditionals)
- - [If](#if)
- - [If Else](#if-else)
- - [If Else if Else](#if-else-if-else)
- - [Switch](#switch)
- - [Ternary Operators](#ternary-operators)
- - [💻 Exercises](#-exercises)
- - [Exercises: Level 1](#exercises-level-1)
- - [Exercises: Level 2](#exercises-level-2)
- - [Exercises: Level 3](#exercises-level-3)
+ - [Conditionals](#conditionals)
+ - [If](#if)
+ - [If Else](#if-else)
+ - [If Else if Else](#if--else-if-else)
+ - [Switch](#switch)
+ - [Ternary Operators](#ternary-operators)
+ - [💻 Exercises](#-exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
# 📔 Day 4
@@ -189,7 +189,8 @@ switch(caseValue){
// code
break
case 3:
- // code
+ // code
+ break
default:
// code
}
@@ -279,7 +280,7 @@ isRaining
### Exercises: Level 1
-1. Get user input using prompt(“Enter your age:”). If user is 18 or older , give feedback:'You are old enough to drive' but if not 18 give another feedback stating to wait for the number of years he neds to turn 18.
+1. Get user input using prompt(“Enter your age:”). If user is 18 or older , give feedback:'You are old enough to drive' but if not 18 give another feedback stating to wait for the number of years he needs to turn 18.
```sh
Enter your age: 30
diff --git a/04_Day_Conditionals/04_day_starter/index.html b/04_Day_Conditionals/04_day_starter/index.html
index 30d37fcf4..093c6e6e1 100644
--- a/04_Day_Conditionals/04_day_starter/index.html
+++ b/04_Day_Conditionals/04_day_starter/index.html
@@ -1,14 +1,14 @@
-
+
- 30DaysOfJavaScript
+ 30DaysOfJavaScript
-
-
+
+
diff --git a/05_Day_Arrays/05_day_arrays.md b/05_Day_Arrays/05_day_arrays.md
index d73eb4cef..0dae6356a 100644
--- a/05_Day_Arrays/05_day_arrays.md
+++ b/05_Day_Arrays/05_day_arrays.md
@@ -18,35 +18,35 @@

- [📔 Day 5](#-day-5)
- - [Arrays](#arrays)
- - [How to create an empty array](#how-to-create-an-empty-array)
- - [How to create an array with values](#how-to-create-an-array-with-values)
- - [Creating an array using split](#creating-an-array-using-split)
- - [Accessing array items using index](#accessing-array-items-using-index)
- - [Modifying array element](#modifying-array-element)
- - [Methods to manipulate array](#methods-to-manipulate-array)
- - [Array Constructor](#array-constructor)
- - [Creating static values with fill](#creating-static-values-with-fill)
- - [Concatenating array using concat](#concatenating-array-using-concat)
- - [Getting array length](#getting-array-length)
- - [Getting index an element in arr array](#getting-index-an-element-in-arr-array)
- - [Getting last index of an element in array](#getting-last-index-of-an-element-in-array)
- - [Checking array](#checking-array)
- - [Converting array to string](#converting-array-to-string)
- - [Joining array elements](#joining-array-elements)
- - [Slice array elements](#slice-array-elements)
- - [Splice method in array](#splice-method-in-array)
- - [Adding item to an array using push](#adding-item-to-an-array-using-push)
- - [Removing the end element using pop](#removing-the-end-element-using-pop)
- - [Removing an element from the beginning](#removing-an-element-from-the-beginning)
- - [Add an element from the beginning](#add-an-element-from-the-beginning)
- - [Reversing array order](#reversing-array-order)
- - [Sorting elements in array](#sorting-elements-in-array)
- - [Array of arrays](#array-of-arrays)
- - [💻 Exercise](#-exercise)
- - [Exercise: Level 1](#exercise-level-1)
- - [Exercise: Level 2](#exercise-level-2)
- - [Exercise: Level 3](#exercise-level-3)
+ - [Arrays](#arrays)
+ - [How to create an empty array](#how-to-create-an-empty-array)
+ - [How to create an array with values](#how-to-create-an-array-with-values)
+ - [Creating an array using split](#creating-an-array-using-split)
+ - [Accessing array items using index](#accessing-array-items-using-index)
+ - [Modifying array element](#modifying-array-element)
+ - [Methods to manipulate array](#methods-to-manipulate-array)
+ - [Array Constructor](#array-constructor)
+ - [Creating static values with fill](#creating-static-values-with-fill)
+ - [Concatenating array using concat](#concatenating-array-using-concat)
+ - [Getting array length](#getting-array-length)
+ - [Getting index an element in arr array](#getting-index-an-element-in-arr-array)
+ - [Getting last index of an element in array](#getting-last-index-of-an-element-in-array)
+ - [Checking array](#checking-array)
+ - [Converting array to string](#converting-array-to-string)
+ - [Joining array elements](#joining-array-elements)
+ - [Slice array elements](#slice-array-elements)
+ - [Splice method in array](#splice-method-in-array)
+ - [Adding item to an array using push](#adding-item-to-an-array-using-push)
+ - [Removing the end element using pop](#removing-the-end-element-using-pop)
+ - [Removing an element from the beginning](#removing-an-element-from-the-beginning)
+ - [Add an element from the beginning](#add-an-element-from-the-beginning)
+ - [Reversing array order](#reversing-array-order)
+ - [Sorting elements in array](#sorting-elements-in-array)
+ - [Array of arrays](#array-of-arrays)
+ - [💻 Exercise](#-exercise)
+ - [Exercise: Level 1](#exercise-level-1)
+ - [Exercise: Level 2](#exercise-level-2)
+ - [Exercise: Level 3](#exercise-level-3)
# 📔 Day 5
@@ -59,7 +59,7 @@ An array is a collection of different data types which are ordered and changeabl
### How to create an empty array
In JavaScript, we can create an array in different ways. Let us see different ways to create an array.
-It is very common to use *const* instead of *let* to declare an array variable. If you ar using const it means you do not use that variable name again.
+It is very common to use _const_ instead of _let_ to declare an array variable. If you ar using const it means you do not use that variable name again.
- Using Array constructor
@@ -390,22 +390,22 @@ Check an element if it exist in an array.
const fruits = ['banana', 'orange', 'mango', 'lemon']
let index = fruits.indexOf('banana') // 0
-if(index != -1){
- console.log('This fruit does exist in the array')
+if(index === -1){
+ console.log('This fruit does not exist in the array')
} else {
- console.log('This fruit does not exist in the array')
+ console.log('This fruit does exist in the array')
}
// This fruit does exist in the array
// we can use also ternary here
-index != -1 ? console.log('This fruit does exist in the array'): console.log('This fruit does not exist in the array')
+index === -1 ? console.log('This fruit does not exist in the array'): console.log('This fruit does exist in the array')
-// let us check if a avocado exist in the array
+// let us check if an avocado exist in the array
let indexOfAvocado = fruits.indexOf('avocado') // -1, if the element not found index is -1
-if(indexOfAvocado!= -1){
- console.log('This fruit does exist in the array')
+if(indexOfAvocado === -1){
+ console.log('This fruit does not exist in the array')
} else {
- console.log('This fruit does not exist in the array')
+ console.log('This fruit does exist in the array')
}
// This fruit does not exist in the array
```
@@ -521,18 +521,20 @@ Splice: It takes three parameters:Starting position, number of times to be remov
```js
const numbers = [1, 2, 3, 4, 5]
-
- console.log(numbers.splice()) // -> remove all items
+ numbers.splice()
+ console.log(numbers) // -> remove all items
```
```js
const numbers = [1, 2, 3, 4, 5]
- console.log(numbers.splice(0,1)) // remove the first item
+ numbers.splice(0,1)
+ console.log(numbers) // remove the first item
```
```js
- const numbers = [1, 2, 3, 4, 5, 6];
+ const numbers = [1, 2, 3, 4, 5, 6]
+ numbers.splice(3, 3, 7, 8, 9)
console.log(numbers.splice(3, 3, 7, 8, 9)) // -> [1, 2, 3, 7, 8, 9] //it removes three item and replace three items
```
@@ -544,7 +546,6 @@ Push: adding item in the end. To add item to the end of an existing array we use
// syntax
const arr = ['item1', 'item2','item3']
arr.push('new item')
-
console.log(arr)
// ['item1', 'item2','item3','new item']
```
@@ -552,7 +553,6 @@ console.log(arr)
```js
const numbers = [1, 2, 3, 4, 5]
numbers.push(6)
-
console.log(numbers) // -> [1,2,3,4,5,6]
numbers.pop() // -> remove one item from the end
@@ -562,7 +562,6 @@ console.log(numbers) // -> [1,2,3,4,5]
```js
let fruits = ['banana', 'orange', 'mango', 'lemon']
fruits.push('apple')
-
console.log(fruits) // ['banana', 'orange', 'mango', 'lemon', 'apple']
fruits.push('lime')
@@ -576,7 +575,6 @@ pop: Removing item in the end.
```js
const numbers = [1, 2, 3, 4, 5]
numbers.pop() // -> remove one item from the end
-
console.log(numbers) // -> [1,2,3,4]
```
@@ -587,7 +585,6 @@ shift: Removing one array element in the beginning of the array.
```js
const numbers = [1, 2, 3, 4, 5]
numbers.shift() // -> remove one item from the beginning
-
console.log(numbers) // -> [2,3,4,5]
```
@@ -598,7 +595,6 @@ unshift: Adding array element in the beginning of the array.
```js
const numbers = [1, 2, 3, 4, 5]
numbers.unshift(0) // -> add one item from the beginning
-
console.log(numbers) // -> [0,1,2,3,4,5]
```
@@ -609,7 +605,6 @@ reverse: reverse the order of an array.
```js
const numbers = [1, 2, 3, 4, 5]
numbers.reverse() // -> reverse array order
-
console.log(numbers) // [5, 4, 3, 2, 1]
numbers.reverse()
@@ -769,7 +764,7 @@ const webTechs = [
- Find the median age(one middle item or two middle items divided by two)
- Find the average age(all items divided by number of items)
- Find the range of the ages(max minus min)
- - Compare the value of (min - average) and (max - average), use *abs()* method
+ - Compare the value of (min - average) and (max - average), use _abs()_ method
1.Slice the first ten countries from the [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js)
1. Find the middle country(ies) in the [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js)
2. Divide the countries array into two equal arrays if it is even. If countries array is not even , one more country for the first half.
diff --git a/05_Day_Arrays/05_day_starter/index.html b/05_Day_Arrays/05_day_starter/index.html
index 8f138fbd8..7d8eeea5b 100644
--- a/05_Day_Arrays/05_day_starter/index.html
+++ b/05_Day_Arrays/05_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:05 Day
+ 30DaysOfJavaScript:05 Day
-
30DaysOfJavaScript:05 Day
-
Arrays
-
-
-
+
30DaysOfJavaScript:05 Day
+
Arrays
+
+
+
diff --git a/06_Day_Loops/06_day_loops.md b/06_Day_Loops/06_day_loops.md
index 711b1def1..c0934956b 100644
--- a/06_Day_Loops/06_day_loops.md
+++ b/06_Day_Loops/06_day_loops.md
@@ -18,17 +18,17 @@

- [📔 Day 6](#-day-6)
- - [Loops](#loops)
- - [for Loop](#for-loop)
- - [while loop](#while-loop)
- - [do while loop](#do-while-loop)
- - [for of loop](#for-of-loop)
- - [break](#break)
- - [continue](#continue)
- - [💻 Exercises:Day 6](#-exercisesday-6)
- - [Exercises: Level 1](#exercises-level-1)
- - [Exercises: Level 2](#exercises-level-2)
- - [Exercises: Level 3](#exercises-level-3)
+ - [Loops](#loops)
+ - [for Loop](#for-loop)
+ - [while loop](#while-loop)
+ - [do while loop](#do-while-loop)
+ - [for of loop](#for-of-loop)
+ - [break](#break)
+ - [continue](#continue)
+ - [💻 Exercises:Day 6](#-exercisesday-6)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
# 📔 Day 6
@@ -178,7 +178,9 @@ for (const num of numbers) {
// adding all the numbers in the array
let sum = 0
for (const num of numbers) {
- sum = sum + num // can be also shorten like this, sum += num
+ sum = sum + num
+ // can be also shorten like this, sum += num
+ // after this we will use the shorter synthax(+=, -=, *=, /= etc)
}
console.log(sum) // 15
diff --git a/06_Day_Loops/06_day_starter/index.html b/06_Day_Loops/06_day_starter/index.html
index 28d2d7811..697bdd617 100644
--- a/06_Day_Loops/06_day_starter/index.html
+++ b/06_Day_Loops/06_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:06 Day
+ 30DaysOfJavaScript:06 Day
-
30DaysOfJavaScript:06 Day
-
Loops
-
-
-
+
30DaysOfJavaScript:06 Day
+
Loops
+
+
+
diff --git a/07_Day_Functions/07_day_functions.md b/07_Day_Functions/07_day_functions.md
index 710ba9bdb..17d90873e 100644
--- a/07_Day_Functions/07_day_functions.md
+++ b/07_Day_Functions/07_day_functions.md
@@ -18,26 +18,26 @@

- [📔 Day 7](#-day-7)
- - [Functions](#functions)
- - [Function Declaration](#function-declaration)
- - [Function without a parameter and return](#function-without-a-parameter-and-return)
- - [Function returning value](#function-returning-value)
- - [Function with a parameter](#function-with-a-parameter)
- - [Function with two parameters](#function-with-two-parameters)
- - [Function with many parameters](#function-with-many-parameters)
- - [Function with unlimited number of parameters](#function-with-unlimited-number-of-parameters)
- - [Unlimited number of parameters in regular function](#unlimited-number-of-parameters-in-regular-function)
- - [Unlimited number of parameters in arrow function](#unlimited-number-of-parameters-in-arrow-function)
- - [Anonymous Function](#anonymous-function)
- - [Expression Function](#expression-function)
- - [Self Invoking Functions](#self-invoking-functions)
- - [Arrow Function](#arrow-function)
- - [Function with default parameters](#function-with-default-parameters)
- - [Function declaration versus Arrow function](#function-declaration-versus-arrow-function)
- - [💻 Exercises](#-exercises)
- - [Exercises: Level 1](#exercises-level-1)
- - [Exercises: Level 2](#exercises-level-2)
- - [Exercises: Level 3](#exercises-level-3)
+ - [Functions](#functions)
+ - [Function Declaration](#function-declaration)
+ - [Function without a parameter and return](#function-without-a-parameter-and-return)
+ - [Function returning value](#function-returning-value)
+ - [Function with a parameter](#function-with-a-parameter)
+ - [Function with two parameters](#function-with-two-parameters)
+ - [Function with many parameters](#function-with-many-parameters)
+ - [Function with unlimited number of parameters](#function-with-unlimited-number-of-parameters)
+ - [Unlimited number of parameters in regular function](#unlimited-number-of-parameters-in-regular-function)
+ - [Unlimited number of parameters in arrow function](#unlimited-number-of-parameters-in-arrow-function)
+ - [Anonymous Function](#anonymous-function)
+ - [Expression Function](#expression-function)
+ - [Self Invoking Functions](#self-invoking-functions)
+ - [Arrow Function](#arrow-function)
+ - [Function with default parameters](#function-with-default-parameters)
+ - [Function declaration versus Arrow function](#function-declaration-versus-arrow-function)
+ - [💻 Exercises](#-exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
# 📔 Day 7
@@ -239,7 +239,7 @@ function sumAllNums() {
console.log(arguments)
}
-sumAllNums(1, 2, 3, 4))
+sumAllNums(1, 2, 3, 4)
// Arguments(4) [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]
```
@@ -269,11 +269,11 @@ console.log(sumAllNums(15, 20, 30, 25, 10, 33, 40)) // 173
const sumAllNums = (...args) => {
// console.log(arguments), arguments object not found in arrow function
- // instead we use an a parameter followed by spread operator
+ // instead we use a parameter followed by spread operator (...)
console.log(args)
}
-sumAllNums(1, 2, 3, 4))
+sumAllNums(1, 2, 3, 4)
// [1, 2, 3, 4]
```
@@ -506,8 +506,7 @@ It Will be covered in other section.
🌕 You are a rising star, now you knew function . Now, you are super charged with the power of functions. You have just completed day 7 challenges and you are 7 steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
-## Testimony
-Now it is time to express your thoughts about the Author and 30DaysOfJavaScript. You can leave your testimonial on this [link](https://testimonify.herokuapp.com/)
+
## 💻 Exercises
@@ -524,7 +523,7 @@ Now it is time to express your thoughts about the Author and 30DaysOfJavaScript.
9. Density of a substance is calculated as follows:_density= mass/volume_. Write a function which calculates _density_.
10. Speed is calculated by dividing the total distance covered by a moving object divided by the total amount of time taken. Write a function which calculates a speed of a moving object, _speed_.
11. Weight of a substance is calculated as follows: _weight = mass x gravity_. Write a function which calculates _weight_.
-12. Temperature in oC can be converted to oF using this formula: _oF = (oC x 9/5) + 32_. Write a function which convert oC to oF _convertCelciusToFahrenheit_.
+12. Temperature in oC can be converted to oF using this formula: _oF = (oC x 9/5) + 32_. Write a function which convert oC to oF _convertCelsiusToFahrenheit_.
13. Body mass index(BMI) is calculated as follows: _bmi = weight in Kg / (height x height) in m2_. Write a function which calculates _bmi_. BMI is used to broadly define different weight groups in adults 20 years old or older.Check if a person is _underweight, normal, overweight_ or _obese_ based the information given below.
- The same groups apply to both men and women.
diff --git a/07_Day_Functions/07_day_starter/index.html b/07_Day_Functions/07_day_starter/index.html
index f7eb67c46..eff81009e 100644
--- a/07_Day_Functions/07_day_starter/index.html
+++ b/07_Day_Functions/07_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:07 Day
+ 30DaysOfJavaScript:07 Day
-
30DaysOfJavaScript:07 Day
-
Functions
-
-
-
+
30DaysOfJavaScript:07 Day
+
Functions
+
+
+
diff --git a/08_Day_Objects/08_day_objects.md b/08_Day_Objects/08_day_objects.md
index 653f9db4d..69f5dc429 100644
--- a/08_Day_Objects/08_day_objects.md
+++ b/08_Day_Objects/08_day_objects.md
@@ -18,50 +18,49 @@

- [📔 Day 8](#-day-8)
- - [Scope](#scope)
- - [Window Scope](#window-scope)
- - [Global scope](#global-scope)
- - [Local scope](#local-scope)
- - [📔 Object](#-object)
- - [Creating an empty object](#creating-an-empty-object)
- - [Creating an objecting with values](#creating-an-objecting-with-values)
- - [Getting values from an object](#getting-values-from-an-object)
- - [Creating object methods](#creating-object-methods)
- - [Setting new key for an object](#setting-new-key-for-an-object)
- - [Object Methods](#object-methods)
- - [Getting object keys using Object.keys()](#getting-object-keys-using-objectkeys)
- - [Getting object values using Object.values()](#getting-object-values-using-objectvalues)
- - [Getting object keys and values using Object.entries()](#getting-object-keys-and-values-using-objectentries)
- - [Checking properties using hasOwnProperty()](#checking-properties-using-hasownproperty)
- - [💻 Exercises](#-exercises)
- - [Exercises: Level 1](#exercises-level-1)
- - [Exercises: Level 2](#exercises-level-2)
- - [Exercises: Level 3](#exercises-level-3)
+ - [Scope](#scope)
+ - [Window Global Object](#window-global-object)
+ - [Global scope](#global-scope)
+ - [Local scope](#local-scope)
+ - [📔 Object](#-object)
+ - [Creating an empty object](#creating-an-empty-object)
+ - [Creating an objecting with values](#creating-an-objecting-with-values)
+ - [Getting values from an object](#getting-values-from-an-object)
+ - [Creating object methods](#creating-object-methods)
+ - [Setting new key for an object](#setting-new-key-for-an-object)
+ - [Object Methods](#object-methods)
+ - [Getting object keys using Object.keys()](#getting-object-keys-using-objectkeys)
+ - [Getting object values using Object.values()](#getting-object-values-using-objectvalues)
+ - [Getting object keys and values using Object.entries()](#getting-object-keys-and-values-using-objectentries)
+ - [Checking properties using hasOwnProperty()](#checking-properties-using-hasownproperty)
+ - [💻 Exercises](#-exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
# 📔 Day 8
## Scope
-Variable is the fundamental part in programming. We declare variable to store different data types. To declare a variable we use the key word _var_, _let_ and _const_. A variable can declared at different scope. In this section we will see the scope, scope of variables when we use var or let.
+Variable is the fundamental part in programming. We declare variable to store different data types. To declare a variable we use the key word _var_, _let_ and _const_. A variable can be declared at different scope. In this section, we will see the scope variables, scope of variables when we use var or let.
Variables scopes can be:
-- Window
- Global
- Local
-Variable can be declared globally or locally or window scope. We will see both global and local scope.
-Anything declared without let, var or const is scoped at window level.
+Variable can be declared globally or locally scope. We will see both global and local scope.
+Anything declared without let, var or const is scoped at global level.
Let us imagine that we have a scope.js file.
-### Window Scope
+### Window Global Object
Without using console.log() open your browser and check, you will see the value of a and b if you write a or b on the browser. That means a and b are already available in the window.
```js
//scope.js
-a = 'JavaScript' // is a window scope this found anywhere
-b = 10 // this is a window scope variable
+a = 'JavaScript' // declaring a variable without let or const make it available in window object and this found anywhere
+b = 10 // this is a global scope variable and found in the window object
function letsLearnScope() {
console.log(a, b)
if (true) {
@@ -96,13 +95,18 @@ console.log(a, b) // JavaScript 10, accessible
A variable declared as local can be accessed only in certain block code.
+- Block Scope
+- Function Scope
+
```js
//scope.js
let a = 'JavaScript' // is a global scope it will be found anywhere in this file
let b = 10 // is a global scope it will be found anywhere in this file
+// Function scope
function letsLearnScope() {
console.log(a, b) // JavaScript 10, accessible
let value = false
+// block scope
if (true) {
// we can access from the function and outside the function but
// variables declared inside the if will not be accessed outside the if block
@@ -111,7 +115,7 @@ function letsLearnScope() {
let c = 30
let d = 40
value = !value
- console.log(a, b, c) // Python 20 30
+ console.log(a, b, c, value) // Python 20 30 true
}
// we can not access c because c's scope is only the if block
console.log(a, b, value) // JavaScript 10 true
@@ -138,9 +142,9 @@ if (true){
console.log(gravity) // 9.81
for(var i = 0; i < 3; i++){
- console.log(i) // 1, 2, 3
+ console.log(i) // 0, 1, 2
}
-console.log(i)
+console.log(i) // 3
```
@@ -163,13 +167,13 @@ if (true){
// console.log(gravity), Uncaught ReferenceError: gravity is not defined
for(let i = 0; i < 3; i++){
- console.log(i) // 1, 2, 3
+ console.log(i) // 0, 1, 2
}
// console.log(i), Uncaught ReferenceError: i is not defined
```
-The scope *let* and *const* is the same. The difference is only reassigning. We can not change or reassign the value of const variable. I would strongly suggest you to use *let* and *const*, by using *let* and *const* you will writ clean code and avoid hard to debug mistakes. As a rule of thumb, you can use *let* for any value which change, *const* for any constant value, and for array, object, arrow function and function expression.
+The scope *let* and *const* are the same. The difference is only reassigning. We can not change or reassign the value of the `const` variable. I would strongly suggest you to use *let* and *const*, by using *let* and *const* you will write clean code and avoid hard to debug mistakes. As a rule of thumb, you can use *let* for any value which change, *const* for any constant value, and for an array, object, arrow function and function expression.
## 📔 Object
@@ -252,14 +256,14 @@ const person = {
console.log(person.firstName)
console.log(person.lastName)
console.log(person.age)
-console.log(person.location)
+console.log(person.location) // undefined
// value can be accessed using square bracket and key name
console.log(person['firstName'])
console.log(person['lastName'])
console.log(person['age'])
console.log(person['age'])
-console.log(person['location'])
+console.log(person['location']) // undefined
// for instance to access the phone number we only use the square bracket method
console.log(person['phone number'])
@@ -387,7 +391,7 @@ _Object.keys_: To get the keys or properties of an object as an array
```js
const keys = Object.keys(copyPerson)
-console.log(keys) //['name', 'age', 'country', 'skills', 'address', 'getPersonInfo']
+console.log(keys) //['firstName', 'age', 'country','city', 'skills','title', 'address', 'getPersonInfo']
const address = Object.keys(copyPerson.address)
console.log(address) //['street', 'pobox', 'city']
```
diff --git a/08_Day_Objects/08_day_starter/index.html b/08_Day_Objects/08_day_starter/index.html
index fbe7e8118..78ef2a28a 100644
--- a/08_Day_Objects/08_day_starter/index.html
+++ b/08_Day_Objects/08_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:08 Day
+ 30DaysOfJavaScript:08 Day
-
30DaysOfJavaScript:08 Day
-
Objects
+
30DaysOfJavaScript:08 Day
+
Objects
-
-
+
+
diff --git a/09_Day_Higher_order_functions/09_day_higher_order_functions.md b/09_Day_Higher_order_functions/09_day_higher_order_functions.md
index a37dffd7c..9aa68718d 100644
--- a/09_Day_Higher_order_functions/09_day_higher_order_functions.md
+++ b/09_Day_Higher_order_functions/09_day_higher_order_functions.md
@@ -19,29 +19,29 @@

- [Day 9](#day-9)
- - [Higher Order Function](#higher-order-function)
- - [Callback](#callback)
- - [Returning function](#returning-function)
- - [setting time](#setting-time)
- - [setInterval](#setinterval)
- - [setTimeout](#settimeout)
- - [Functional Programming](#functional-programming)
- - [forEach](#foreach)
- - [map](#map)
- - [filter](#filter)
- - [reduce](#reduce)
- - [every](#every)
- - [find](#find)
- - [findIndex](#findindex)
- - [some](#some)
- - [sort](#sort)
- - [Sorting string values](#sorting-string-values)
- - [Sorting Numeric values](#sorting-numeric-values)
- - [Sorting Object Arrays](#sorting-object-arrays)
- - [💻 Exercises](#-exercises)
- - [Exercises: Level 1](#exercises-level-1)
- - [Exercises: Level 2](#exercises-level-2)
- - [Exercises: Level 3](#exercises-level-3)
+ - [Higher Order Function](#higher-order-function)
+ - [Callback](#callback)
+ - [Returning function](#returning-function)
+ - [Setting time](#setting-time)
+ - [Setting Interval using a setInterval function](#setting-interval-using-a-setinterval-function)
+ - [Setting a time using a setTimeout](#setting-a-time-using-a-settimeout)
+ - [Functional Programming](#functional-programming)
+ - [forEach](#foreach)
+ - [map](#map)
+ - [filter](#filter)
+ - [reduce](#reduce)
+ - [every](#every)
+ - [find](#find)
+ - [findIndex](#findindex)
+ - [some](#some)
+ - [sort](#sort)
+ - [Sorting string values](#sorting-string-values)
+ - [Sorting Numeric values](#sorting-numeric-values)
+ - [Sorting Object Arrays](#sorting-object-arrays)
+ - [💻 Exercises](#-exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
# Day 9
@@ -54,12 +54,12 @@ Higher order functions are functions which take other function as a parameter or
A callback is a function which can be passed as parameter to other function. See the example below.
```js
-// a callback function, the function could be any name
+// a callback function, the name of the function could be any name
const callback = (n) => {
return n ** 2
}
-// function take other function as a callback
+// function that takes other function as a callback
function cube(callback, n) {
return callback(n) * n
}
@@ -71,7 +71,6 @@ console.log(cube(callback, 3))
Higher order functions return function as a value
-
```js
// Higher order function returning an other function
const higherOrder = n => {
@@ -89,8 +88,7 @@ console.log(higherOrder(2)(3)(10))
Let us see were we use call back functions. For instance the _forEach_ method uses call back.
```js
-const numbers = [1, 2, 3, 4]
-
+const numbers = [1, 2, 3, 4, 5]
const sumArray = arr => {
let sum = 0
const callback = function(element) {
@@ -134,7 +132,7 @@ In JavaScript we can execute some activities in a certain interval of time or we
- setInterval
- setTimeout
-#### Setting Interaval using a setInterval function
+#### Setting Interval using a setInterval function
In JavaScript, we use setInterval higher order function to do some activity continuously with in some interval of time. The setInterval global method take a callback function and a duration as a parameter. The duration is in milliseconds and the callback will be always called in that interval of time.
@@ -354,8 +352,8 @@ const scores = [
{ name: 'John', score: 100 },
]
-const scoresGreaterEight = scores.filter((score) => score.score > 80)
-console.log(scoresGreaterEight)
+const scoresGreaterEighty = scores.filter((score) => score.score > 80)
+console.log(scoresGreaterEighty)
```
```sh
@@ -392,7 +390,7 @@ _every_: Check if all the elements are similar in one aspect. It returns boolean
const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
const areAllStr = names.every((name) => typeof name === 'string') // Are all strings?
-console.log(arrAllStr)
+console.log(areAllStr)
```
```sh
@@ -520,7 +518,7 @@ console.log(numbers) //[100, 37, 9.81, 3.14]
#### Sorting Object Arrays
-When ever we sort objects in an array. We use the object key to compare. Lets see the example below.
+Whenever we sort objects in an array, we use the object key to compare. Let us see the example below.
```js
objArr.sort(function (a, b) {
@@ -540,7 +538,7 @@ objArr.sort(function (a, b) {
const users = [
{ name: 'Asabeneh', age: 150 },
{ name: 'Brook', age: 50 },
- { name: 'Eyo', age: 100 },
+ { name: 'Eyob', age: 100 },
{ name: 'Elias', age: 22 },
]
users.sort((a, b) => {
@@ -573,7 +571,7 @@ const products = [
```
1. Explain the difference between **_forEach, map, filter, and reduce_**.
-2. Define a call function before you them in forEach, map, filter or reduce.
+2. Define a callback function before you use it in forEach, map, filter or reduce.
3. Use **_forEach_** to console.log each country in the countries array.
4. Use **_forEach_** to console.log each name in the names array.
5. Use **_forEach_** to console.log each number in the numbers array.
diff --git a/09_Day_Higher_order_functions/09_day_starter/index.html b/09_Day_Higher_order_functions/09_day_starter/index.html
index 14b20bac5..cbf51280e 100644
--- a/09_Day_Higher_order_functions/09_day_starter/index.html
+++ b/09_Day_Higher_order_functions/09_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:09 Day
+ 30DaysOfJavaScript:09 Day
-
30DaysOfJavaScript:09 Day
-
Functional Programming
+
30DaysOfJavaScript:09 Day
+
Functional Programming
-
-
+
+
diff --git a/10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md b/10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md
index 95fc3331e..25dafe988 100644
--- a/10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md
+++ b/10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md
@@ -19,33 +19,33 @@

- [Day 10](#day-10)
- - [Set](#set)
- - [Creating an empty set](#creating-an-empty-set)
- - [Creating set from array](#creating-set-from-array)
- - [Adding an element to a set](#adding-an-element-to-a-set)
- - [Deleting an element a set](#deleting-an-element-a-set)
- - [Checking an element in the set](#checking-an-element-in-the-set)
- - [Clearing the set](#clearing-the-set)
- - [Union of sets](#union-of-sets)
- - [Intersection of sets](#intersection-of-sets)
- - [Difference of sets](#difference-of-sets)
- - [Map](#map)
- - [Creating an empty Map](#creating-an-empty-map)
- - [Creating an Map from array](#creating-an-map-from-array)
- - [Adding values to the Map](#adding-values-to-the-map)
- - [Getting a value from Map](#getting-a-value-from-map)
- - [Checking key in Map](#checking-key-in-map)
- - [Exercises](#exercises)
- - [Exercises:Level 1](#exerciseslevel-1)
- - [Exercises:Level 2](#exerciseslevel-2)
- - [Exercises:Level 3](#exerciseslevel-3)
+ - [Set](#set)
+ - [Creating an empty set](#creating-an-empty-set)
+ - [Creating set from array](#creating-set-from-array)
+ - [Adding an element to a set](#adding-an-element-to-a-set)
+ - [Deleting an element a set](#deleting-an-element-a-set)
+ - [Checking an element in the set](#checking-an-element-in-the-set)
+ - [Clearing the set](#clearing-the-set)
+ - [Union of sets](#union-of-sets)
+ - [Intersection of sets](#intersection-of-sets)
+ - [Difference of sets](#difference-of-sets)
+ - [Map](#map)
+ - [Creating an empty Map](#creating-an-empty-map)
+ - [Creating an Map from array](#creating-an-map-from-array)
+ - [Adding values to the Map](#adding-values-to-the-map)
+ - [Getting a value from Map](#getting-a-value-from-map)
+ - [Checking key in Map](#checking-key-in-map)
+ - [Exercises](#exercises)
+ - [Exercises:Level 1](#exerciseslevel-1)
+ - [Exercises:Level 2](#exerciseslevel-2)
+ - [Exercises:Level 3](#exerciseslevel-3)
# Day 10
## Set
Set is a collection of elements. Set can only contains unique elements.
-Lets see how to create a set
+Let us see how to create a set in the section below.
### Creating an empty set
@@ -55,7 +55,7 @@ console.log(companies)
```
```sh
-{}
+Set(0) {}
```
### Creating set from array
@@ -71,8 +71,8 @@ const languages = [
'French',
]
-const setOfLangauges = new Set(languages)
-console.log(setOfLangauges)
+const setOfLanguages = new Set(languages)
+console.log(setOfLanguages)
```
```sh
@@ -92,9 +92,9 @@ const languages = [
'French',
]
-const setOfLangauges = new Set(languages)
+const setOfLanguages = new Set(languages)
-for (const language of setOfLangauges) {
+for (const language of setOfLanguages) {
console.log(language)
}
```
@@ -117,7 +117,6 @@ companies.add('Facebook')
companies.add('Amazon')
companies.add('Oracle')
companies.add('Microsoft')
-
console.log(companies.size) // 5 elements in the set
console.log(companies)
```
@@ -165,13 +164,11 @@ It removes all the elements from a set.
```js
companies.clear()
-
console.log(companies)
```
```sh
-{}
-
+Set(0) {}
```
See the example below to learn how to use set.
@@ -202,7 +199,7 @@ console.log(counts)
```
```js
-;[
+[
{ lang: 'English', count: 3 },
{ lang: 'Finnish', count: 1 },
{ lang: 'French', count: 2 },
@@ -345,7 +342,7 @@ Helsinki
### Checking key in Map
-Check if a key exist in a map using _has_ method. It returns _true_ or _false_.
+Check if a key exists in a map using _has_ method. It returns _true_ or _false_.
```js
console.log(countriesMap.has('Finland'))
@@ -371,7 +368,7 @@ for (const country of countriesMap) {
```js
for (const [country, city] of countriesMap){
-console.log(country, city)
+ console.log(country, city)
}
```
@@ -438,8 +435,6 @@ const countries = ['Finland', 'Sweden', 'Norway']
]
```
-
🎉 CONGRATULATIONS ! 🎉
-
[<< Day 9](../09_Day_Higher_order_functions/09_day_higher_order_functions.md) | [Day 11 >>](../11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md)
diff --git a/10_Day_Sets_and_Maps/10_day_starter/index.html b/10_Day_Sets_and_Maps/10_day_starter/index.html
index 38b79a2a1..ad006dd64 100644
--- a/10_Day_Sets_and_Maps/10_day_starter/index.html
+++ b/10_Day_Sets_and_Maps/10_day_starter/index.html
@@ -1,5 +1,5 @@
-
+
30DaysOfJavaScript:10 Day
diff --git a/11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md b/11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md
index 3367ab125..d4ffc343f 100644
--- a/11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md
+++ b/11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md
@@ -18,23 +18,23 @@

- [Day 11](#day-11)
- - [Destructuring and Spread](#destructuring-and-spread)
- - [Destructing Arrays](#destructing-arrays)
- - [Destructuring during iteration](#destructuring-during-iteration)
- - [Destructuring Object](#destructuring-object)
- - [Renaming during structuring](#renaming-during-structuring)
- - [Object parameter without destructuring](#object-parameter-without-destructuring)
- - [Object parameter with destructuring](#object-parameter-with-destructuring)
- - [Destructuring object during iteration](#destructuring-object-during-iteration)
- - [Spread or Rest Operator](#spread-or-rest-operator)
- - [Spread operator to get the rest of array elements](#spread-operator-to-get-the-rest-of-array-elements)
- - [Spread operator to copy array](#spread-operator-to-copy-array)
- - [Spread operator to copy object](#spread-operator-to-copy-object)
- - [Spread operator with arrow function](#spread-operator-with-arrow-function)
- - [Exercises](#exercises)
- - [Exercises: Level 1](#exercises-level-1)
- - [Exercises: Level 2](#exercises-level-2)
- - [Exercises: Level 3](#exercises-level-3)
+ - [Destructuring and Spread](#destructuring-and-spread)
+ - [Destructing Arrays](#destructing-arrays)
+ - [Destructuring during iteration](#destructuring-during-iteration)
+ - [Destructuring Object](#destructuring-object)
+ - [Renaming during structuring](#renaming-during-structuring)
+ - [Object parameter without destructuring](#object-parameter-without-destructuring)
+ - [Object parameter with destructuring](#object-parameter-with-destructuring)
+ - [Destructuring object during iteration](#destructuring-object-during-iteration)
+ - [Spread or Rest Operator](#spread-or-rest-operator)
+ - [Spread operator to get the rest of array elements](#spread-operator-to-get-the-rest-of-array-elements)
+ - [Spread operator to copy array](#spread-operator-to-copy-array)
+ - [Spread operator to copy object](#spread-operator-to-copy-object)
+ - [Spread operator with arrow function](#spread-operator-with-arrow-function)
+ - [Exercises](#exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
# Day 11
@@ -108,7 +108,7 @@ If we like to skip on of the values in the array we use additional comma. The co
```js
const names = ['Asabeneh', 'Brook', 'David', 'John']
- let [, secondPerson, , fourthPerson] = name // first and third person is omitted
+ let [, secondPerson, , fourthPerson] = names // first and third person is omitted
console.log(secondPerson, fourthPerson)
```
@@ -218,7 +218,7 @@ console.log(w, h, a, p)
20 10 200 undefined
```
-If the key is not found in the object the variable will be assigned to undefined. In case, the key is not in the object we can give a default value during declaration. See the example.
+If the key is not found in the object the variable will be assigned to undefined. Sometimes the key might not be in the object, in that case we can give a default value during declaration. See the example.
```js
const rectangle = {
@@ -229,7 +229,7 @@ const rectangle = {
let { width, height, area, perimeter = 60 } = rectangle
console.log(width, height, area, perimeter) //20 10 200 60
-//Lets modify the object:width to 30 and perimeter to 80
+//Let us modify the object:width to 30 and perimeter to 80
```
```js
@@ -243,7 +243,7 @@ let { width, height, area, perimeter = 60 } = rectangle
console.log(width, height, area, perimeter) //30 10 200 80
```
-Destructuring keys as a function parameters. Lets create a function which take a rectangle object and it return a perimeter of a rectangle.
+Destructuring keys as a function parameters. Let us create a function which takes a rectangle object and it returns a perimeter of a rectangle.
### Object parameter without destructuring
@@ -282,7 +282,7 @@ const person = {
],
languages: ['Amharic', 'English', 'Suomi(Finnish)']
}
-// Lets create a function which give information about the person object without destructuring
+// Let us create a function which give information about the person object without destructuring
const getPersonInfo = obj => {
const skills = obj.skills
@@ -314,7 +314,7 @@ console.log(calculatePerimeter(rect)) // 60
```
```js
-// Lets create a function which give information about the person object with destructuring
+// Let us create a function which give information about the person object with destructuring
const getPersonInfo = ({
firstName,
lastName,
@@ -335,7 +335,7 @@ const getPersonInfo = ({
}
console.log(getPersonInfo(person))
/*
-Asabeneh Yetayeh lives in Finland. He is 200 years old. He is an Instructor and Developer. He teaches HTML, CSS, JavaScript, React, Redux, Node, MongoDB, Python and D3.js. He speaks Amharic, English and a little bit of Suomi(Finnish)
+Asabeneh Yetayeh lives in Finland. He is 250 years old. He is an Instructor and Developer. He teaches HTML, CSS, JavaScript, React, Redux, Node, MongoDB, Python and D3.js. He speaks Amharic, English and a little bit of Suomi(Finnish)
*/
```
@@ -373,7 +373,7 @@ Assess Test Result 4/1/2020 1:00 false
### Spread or Rest Operator
-When we destructure an array we use the spread operator(...) to get the rest elements as array. In addition to that we use spread operator to spread arr elements to another array.
+When we destructure an array we use the spread operator(...) to get the rest elements as array. In addition to that we use spread operator to spread array elements to another array.
### Spread operator to get the rest of array elements
@@ -499,7 +499,7 @@ const sumAllNums = (...args) => {
console.log(args)
}
-sumAllNums(1, 2, 3,4,5)
+sumAllNums(1, 2, 3, 4, 5)
```
@@ -519,7 +519,7 @@ const sumAllNums = (...args) => {
}
-console.log(sumAllNums(1, 2, 3,4,5))
+console.log(sumAllNums(1, 2, 3, 4, 5))
```
```sh
@@ -597,7 +597,6 @@ const users = [
1. Iterate through the users array and get all the keys of the object using destructuring
2. Find the persons who have less than two skills
-
### Exercises: Level 3
1. Destructure the countries object print name, capital, population and languages of all countries
@@ -613,7 +612,7 @@ const users = [
```
3. Write a function called *convertArrayToObject* which can convert the array to a structure object.
-
+
```js
const students = [
['David', ['HTM', 'CSS', 'JS', 'React'], [98, 85, 90, 95]],
@@ -693,6 +692,7 @@ const users = [
}
```
+
🎉 CONGRATULATIONS ! 🎉
-[<< Day 10](../10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md) | [Day 12 >>](../12_Day_Regular_expressions/12_day_regular_expressions.md)
\ No newline at end of file
+[<< Day 10](../10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md) | [Day 12 >>](../12_Day_Regular_expressions/12_day_regular_expressions.md)
diff --git a/11_Day_Destructuring_and_spreading/11_day_starter/index.html b/11_Day_Destructuring_and_spreading/11_day_starter/index.html
index 6efcab4fd..1c2ed8db9 100644
--- a/11_Day_Destructuring_and_spreading/11_day_starter/index.html
+++ b/11_Day_Destructuring_and_spreading/11_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:11 Day
+ 30DaysOfJavaScript:11 Day
-
30DaysOfJavaScript:11 Day
-
Destructuring and Spread
+
30DaysOfJavaScript:11 Day
+
Destructuring and Spread
-
-
+
+
diff --git a/12_Day_Regular_expressions/12_day_regular_expressions.md b/12_Day_Regular_expressions/12_day_regular_expressions.md
index 99d85f0ff..ef838821f 100644
--- a/12_Day_Regular_expressions/12_day_regular_expressions.md
+++ b/12_Day_Regular_expressions/12_day_regular_expressions.md
@@ -18,29 +18,29 @@

- [📘 Day 12](#-day-12)
- - [Regular Expressions](#regular-expressions)
- - [RegExp parameters](#regexp-parameters)
- - [Pattern](#pattern)
- - [Flags](#flags)
- - [Creating a pattern with RegExp Constructor](#creating-a-pattern-with-regexp-constructor)
- - [Creating a pattern without RegExp Constructor](#creating-a-pattern-without-regexp-constructor)
- - [RegExpp Object Methods](#regexpp-object-methods)
- - [Testing for a match](#testing-for-a-match)
- - [Array containing all of the match](#array-containing-all-of-the-match)
- - [Replacing a substring](#replacing-a-substring)
- - [Square Bracket](#square-bracket)
- - [Escape character(\\) in RegExp](#escape-character-in-regexp)
- - [One or more times(+)](#one-or-more-times)
- - [Period(.)](#period)
- - [Zero or more times(*)](#zero-or-more-times)
- - [Zero or one times(?)](#zero-or-one-times)
- - [Quantifier in RegExp](#quantifier-in-regexp)
- - [Cart ^](#cart-)
- - [Exact match](#exact-match)
- - [💻 Exercises](#-exercises)
- - [Exercises: Level 1](#exercises-level-1)
- - [Exercises: Level 2](#exercises-level-2)
- - [Exercises: Level 3](#exercises-level-3)
+ - [Regular Expressions](#regular-expressions)
+ - [RegExp parameters](#regexp-parameters)
+ - [Pattern](#pattern)
+ - [Flags](#flags)
+ - [Creating a pattern with RegExp Constructor](#creating-a-pattern-with-regexp-constructor)
+ - [Creating a pattern without RegExp Constructor](#creating-a-pattern-without-regexp-constructor)
+ - [RegExpp Object Methods](#regexpp-object-methods)
+ - [Testing for a match](#testing-for--a-match)
+ - [Array containing all of the match](#array-containing-all-of-the-match)
+ - [Replacing a substring](#replacing-a-substring)
+ - [Square Bracket](#square-bracket)
+ - [Escape character(\\) in RegExp](#escape-character-in-regexp)
+ - [One or more times(+)](#one-or-more-times)
+ - [Period(.)](#period)
+ - [Zero or more times(*)](#zero-or-more-times)
+ - [Zero or one times(?)](#zero-or-one-times)
+ - [Quantifier in RegExp](#quantifier-in-regexp)
+ - [Cart ^](#cart-)
+ - [Exact match](#exact-match)
+ - [💻 Exercises](#-exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
# 📘 Day 12
@@ -60,9 +60,9 @@ A pattern could be a text or any form of pattern which some sort of similarity.
#### Flags
-Flags are optional parameters in a regular expression which determine the type of searching. Let see some of the flags:
+Flags are optional parameters in a regular expression which determine the type of searching. Let us see some of the flags:
-- g:is a global flag which means looking for a pattern in whole text
+- g: a global flag which means looking for a pattern in whole text
- i: case insensitive flag(it searches for both lowercase and uppercase)
- m: multiline
@@ -106,7 +106,7 @@ let regEx= new RegExp('love','gi')
### RegExpp Object Methods
-Let see some of RegExp methods
+Let us see some of RegExp methods
#### Testing for a match
@@ -227,7 +227,7 @@ I am teacher and I love teaching.There is nothing as more rewarding as educatin
* [0-9] means any number 0 to 9
* [A-Za-z0-9] any character which is a to z, A to Z, 0 to 9
* \\: uses to escape special characters
- * \d mean:match where the string contains digits (numbers from 0-9)
+ * \d mean: match where the string contains digits (numbers from 0-9)
* \D mean: match where the string does not contain digits
* . : any character except new line character(\n)
* ^: starts with
@@ -236,13 +236,14 @@ I am teacher and I love teaching.There is nothing as more rewarding as educatin
* $: ends with
* r'substring$' eg r'love$', sentence ends with a word love
* *: zero or more times
- * r'[a]*' means a optional or it can be occur many times.
+ * r'[a]*' means a optional or it can occur many times.
* +: one or more times
- * r'[a]+' mean at least once or more times
+ * r'[a]+' means at least once or more times
* ?: zero or one times
- * r'[a]?' mean zero times or once
+ * r'[a]?' means zero times or once
+* \b: word bounder, matches with the beginning or ending of a word
* {3}: Exactly 3 characters
-* {3,}: At least 3 character
+* {3,}: At least 3 characters
* {3,8}: 3 to 8 characters
* |: Either or
* r'apple|banana' mean either of an apple or a banana
@@ -257,20 +258,20 @@ Let's use example to clarify the above meta characters
Let's use square bracket to include lower and upper case
```js
-const pattern = '[Aa]pple' // this square bracket mean either A or a
-const txt = 'Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away. '
+const pattern = '[Aa]pple' // this square bracket means either A or a
+const txt = 'Apple and banana are fruits. An old cliche says an apple a day keeps the doctor way has been replaced by a banana a day keeps the doctor far far away. '
const matches = txt.match(pattern)
console.log(matches)
```
```sh
-["Apple", index: 0, input: "Apple and banana are fruits. An old cliche says an…by a banana a day keeps the doctor far far away. ", groups: undefined]
+["Apple", index: 0, input: "Apple and banana are fruits. An old cliche says an apple a day keeps the doctor way has been replaced by a banana a day keeps the doctor far far away.", groups: undefined]
```
```js
-const pattern = /[Aa]pple/g // this square bracket mean either A or a
+const pattern = /[Aa]pple/g // this square bracket means either A or a
const txt = 'Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away. '
const matches = txt.match(pattern)
@@ -344,7 +345,7 @@ console.log(matches) // ['and banana are fruits']
### Zero or more times(*)
-Zero or many times. The pattern could may not occur or it can occur many times.
+Zero or many times. The pattern may not occur or it can occur many times.
```js
@@ -358,7 +359,7 @@ console.log(matches) // ['and banana are fruits']
### Zero or one times(?)
-Zero or one times. The pattern could may not occur or it may occur once.
+Zero or one times. The pattern may not occur or it may occur once.
```js
const txt = 'I am not sure if there is a convention how to write the word e-mail.\
@@ -372,11 +373,25 @@ console.log(matches) // ["e-mail", "email", "Email", "E-mail"]
### Quantifier in RegExp
-We can specify the length of the substring we look for in a text, using a curly bracket. Lets imagine, we are interested in substring that their length are 4 characters
+We can specify the length of the substring we look for in a text, using a curly bracket. Let us see, how ot use RegExp quantifiers. Imagine, we are interested in substring that their length are 4 characters
+
+```js
+const txt = 'This regular expression example was made in December 6, 2019.'
+const pattern = /\\b\w{4}\b/g // exactly four character words
+const matches = txt.match(pattern)
+console.log(matches) //['This', 'made', '2019']
+```
+
+```js
+const txt = 'This regular expression example was made in December 6, 2019.'
+const pattern = /\b[a-zA-Z]{4}\b/g // exactly four character words without numbers
+const matches = txt.match(pattern)
+console.log(matches) //['This', 'made']
+```
```js
const txt = 'This regular expression example was made in December 6, 2019.'
-const pattern = /\d{4}/g // exactly four times
+const pattern = /\d{4}/g // a number and exactly four digits
const matches = txt.match(pattern)
console.log(matches) // ['2019']
```
@@ -403,7 +418,7 @@ console.log(matches) // ['This']
```js
const txt = 'This regular expression example was made in December 6, 2019.'
-const pattern = /[^A-Za-z,. ]+/g // ^ in set character means negation, not A to Z, not a to z, no space, no coma no period
+const pattern = /[^A-Za-z,. ]+/g // ^ in set character means negation, not A to Z, not a to z, no space, no comma no period
const matches = txt.match(pattern)
console.log(matches) // ["6", "2019"]
```
@@ -503,22 +518,19 @@ distance = 12
```js
sentence = `%I $am@% a %tea@cher%, &and& I lo%#ve %tea@ching%;. There $is nothing; &as& mo@re rewarding as educa@ting &and& @emp%o@wering peo@ple. ;I found tea@ching m%o@re interesting tha@n any other %jo@bs. %Do@es thi%s mo@tivate yo@u to be a tea@cher!?`
-
- console.log(cleanText(sentence))
+ console.log(cleanText(sentence))
```
```sh
I am a teacher and I love teaching There is nothing as more rewarding as educating and empowering people I found teaching more interesting than any other jobs Does this motivate you to be a teacher
```
-1. Write a function which find the most frequent words. After cleaning, count three most frequent words in the string.
+2. Write a function which find the most frequent words. After cleaning, count three most frequent words in the string.
- ```js
+ ```js
console.log(mostFrequentWords(cleanedText))
[{word:'I', count:3}, {word:'teaching', count:2}, {word:'teacher', count:2}]
- ```
-
+ ```
🎉 CONGRATULATIONS ! 🎉
-
-[<< Day 11](../11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md) | [Day 13>>](../13_Day_Console_object_methods/13_day_console_object_methods.md)
+[<< Day 11](../11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md) | [Day 13 >>](../13_Day_Console_object_methods/13_day_console_object_methods.md)
diff --git a/12_Day_Regular_expressions/12_day_starter/index.html b/12_Day_Regular_expressions/12_day_starter/index.html
index 6efcab4fd..1c2ed8db9 100644
--- a/12_Day_Regular_expressions/12_day_starter/index.html
+++ b/12_Day_Regular_expressions/12_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:11 Day
+ 30DaysOfJavaScript:11 Day
-
30DaysOfJavaScript:11 Day
-
Destructuring and Spread
+
30DaysOfJavaScript:11 Day
+
Destructuring and Spread
-
-
+
+
diff --git a/13_Day_Console_object_methods/13_day_console_object_methods.md b/13_Day_Console_object_methods/13_day_console_object_methods.md
index f17cf293b..6f7b61177 100644
--- a/13_Day_Console_object_methods/13_day_console_object_methods.md
+++ b/13_Day_Console_object_methods/13_day_console_object_methods.md
@@ -19,21 +19,21 @@

- [Day 13](#day-13)
- - [Console Object Methods](#console-object-methods)
- - [console.log()](#consolelog)
- - [console.warn()](#consolewarn)
- - [console.error()](#consoleerror)
- - [console.table()](#consoletable)
- - [console.time()](#consoletime)
- - [console.info()](#consoleinfo)
- - [console.assert()](#consoleassert)
- - [console.group()](#consolegroup)
- - [console.count()](#consolecount)
- - [console.clear()](#consoleclear)
- - [Exercises](#exercises)
- - [Exercises:Level 1](#exerciseslevel-1)
- - [Exercises:Level 2](#exerciseslevel-2)
- - [Exercises:Level 3](#exerciseslevel-3)
+ - [Console Object Methods](#console-object-methods)
+ - [console.log()](#consolelog)
+ - [console.warn()](#consolewarn)
+ - [console.error()](#consoleerror)
+ - [console.table()](#consoletable)
+ - [console.time()](#consoletime)
+ - [console.info()](#consoleinfo)
+ - [console.assert()](#consoleassert)
+ - [console.group()](#consolegroup)
+ - [console.count()](#consolecount)
+ - [console.clear()](#consoleclear)
+ - [Exercises](#exercises)
+ - [Exercises:Level 1](#exerciseslevel-1)
+ - [Exercises:Level 2](#exerciseslevel-2)
+ - [Exercises:Level 3](#exerciseslevel-3)
# Day 13
@@ -43,7 +43,7 @@ In this section, we will cover about console and console object methods. Absolut
We use console object methods to show output on the browser console and we use document.write to show output on the browser document(view port). Both methods used only for testing and debugging purposes. The console method is the most popular testing and debugging tool on the browser. We use document.getElementById() when we like to interact with DOM try using JavaScript. We will cover DOM in another section.
-In addition to the famous, console.log() method, the console provides other more methods methods.
+In addition to the famous, console.log() method, the console provides other more methods.
### console.log()
@@ -99,7 +99,7 @@ console.warn('Warning is different from error')
### console.error()
-The console.error() methods shows an error messages.
+The console.error() method shows an error messages.
```js
console.error('This is an error message')
@@ -224,7 +224,7 @@ According the above output the regular for loop is slower than for of or forEach
### console.info()
-It display information message on browser console.
+It displays information message on browser console.
```js
console.info('30 Days Of JavaScript challenge is trending on Github')
@@ -312,7 +312,7 @@ console.groupEnd()
### console.count()
-It prints the number of time this console.count() is called. It takes a string label parameter. It is very helpful to count the number of times a function is called. In the following example, the console.count() method will run three times
+It prints the number of times the console.count() is called. It takes a string label parameter. It is very helpful to count the number of times a function is called. In the following example, the console.count() method will run three times
```js
const func = () => {
diff --git a/13_Day_Console_object_methods/13_day_starter/index.html b/13_Day_Console_object_methods/13_day_starter/index.html
index 977daafde..4d58e5517 100644
--- a/13_Day_Console_object_methods/13_day_starter/index.html
+++ b/13_Day_Console_object_methods/13_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:13 Day
+ 30DaysOfJavaScript:13 Day
-
30DaysOfJavaScript:13 Day
-
Console Object Methods
+
30DaysOfJavaScript:13 Day
+
Console Object Methods
-
-
+
+
diff --git a/14_Day_Error_handling/14_day_error_handling.md b/14_Day_Error_handling/13_day_console_object_methods.md
similarity index 94%
rename from 14_Day_Error_handling/14_day_error_handling.md
rename to 14_Day_Error_handling/13_day_console_object_methods.md
index 69cb0c029..d9fba8dbd 100644
--- a/14_Day_Error_handling/14_day_error_handling.md
+++ b/14_Day_Error_handling/13_day_console_object_methods.md
@@ -19,12 +19,12 @@

- [Day 14](#day-14)
- - [Error Handling](#error-handling)
- - [Error Types](#error-types)
- - [Exercises](#exercises)
- - [Exercises:Level 1](#exerciseslevel-1)
- - [Exercises: Level 2](#exercises-level-2)
- - [Exercises:Level](#exerciseslevel)
+ - [Error Handling](#error-handling)
+ - [Error Types](#error-types)
+ - [Exercises](#exercises)
+ - [Exercises:Level 1](#exerciseslevel-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises:Level](#exerciseslevel)
# Day 14
@@ -82,9 +82,7 @@ ReferenceError: fistName is not defined
at :4:20
In any case it will be executed
```
-
The catch block take a parameter. It is common to pass e, err or error as a parameter to the catch block. This parameter is an object and it has name and message keys. Lets use the name and message.
-
```js
try {
let lastName = 'Yetayeh'
@@ -96,24 +94,20 @@ try {
console.log('In any case I will be executed')
}
```
-
```sh
Name of the error ReferenceError
Error message fistName is not defined
In any case I will be executed
```
-
throw: the throw statement allows us to create a custom error. We can through a string, number, boolean or an object. Use the throw statement to throw an exception. When you throw an exception, expression specifies the value of the exception. Each of the following throws an exception:
-
```js
throw 'Error2' // generates an exception with a string value
throw 42 // generates an exception with the value 42
throw true // generates an exception with the value true
throw new Error('Required') // generates an error object with the message of Required
```
-
```js
-const throwErroExampleFun = () => {
+const throwErrorExampleFun = () => {
let message
let x = prompt('Enter a number: ')
try {
@@ -126,68 +120,45 @@ const throwErroExampleFun = () => {
console.log(err)
}
}
-throwErroExampleFun()
+throwErrorExampleFun()
```
-
### Error Types
-
- ReferenceError: An illegal reference has occurred. A ReferenceError is thrown if we use a variable that has not been declared.
-
```js
let firstName = 'Asabeneh'
let fullName = firstName + ' ' + lastName
-
console.log(fullName)
```
-
```sh
Uncaught ReferenceError: lastName is not defined
at :2:35
```
-
- SyntaxError: A syntax error has occurred
-
```js
let square = 2 x 2
console.log(square)
-
console.log('Hello, world")
```
-
```sh
Uncaught SyntaxError: Unexpected identifier
```
-
- TypeError: A type error has occurred
-
```js
let num = 10
console.log(num.toLowerCase())
```
-
```sh
Uncaught TypeError: num.toLowerCase is not a function
at :2:17
```
-
These are some of the common error you may face when you write a code. Understanding errors can help you to know what mistakes you made and it will help you to debug your code fast.
-
🌕 You are flawless. Now, you knew how to handle errors and you can write robust application which handle unexpected user inputs. You have just completed day 14 challenges and you are 14 steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
-
## Exercises
-
### Exercises:Level 1
-
Practice
-
### Exercises: Level 2
-
Practice
-
### Exercises:Level
-
Practice
-
🎉 CONGRATULATIONS ! 🎉
-
-[<< Day 13](../13_Day_Console_object_methods/13_day_console_object_methods.md) | [Day 15>>](../15_Day_Classes/15_day_classes.md)
+[<< Day 13](../13_Day_Console_object_methods/13_day_console_object_methods.md) | [Day 15>>](../15_Day_Classes/15_day_classes.md)
\ No newline at end of file
diff --git a/14_Day_Error_handling/14_day_starter/index.html b/14_Day_Error_handling/14_day_starter/index.html
index b5aa2906b..dca3c1bbb 100644
--- a/14_Day_Error_handling/14_day_starter/index.html
+++ b/14_Day_Error_handling/14_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:12 Day
+ 30DaysOfJavaScript:12 Day
-
30DaysOfJavaScript:14 Day
-
DOM
+
30DaysOfJavaScript:14 Day
+
DOM
-
-
+
+
diff --git a/15_Day_Classes/15_day_classes.md b/15_Day_Classes/15_day_classes.md
index 7b4632895..be9e8dba0 100644
--- a/15_Day_Classes/15_day_classes.md
+++ b/15_Day_Classes/15_day_classes.md
@@ -19,22 +19,22 @@

- [Day 15](#day-15)
- - [Classes](#classes)
- - [Defining a classes](#defining-a-classes)
- - [Class Instantiation](#class-instantiation)
- - [Class Constructor](#class-constructor)
- - [Default values with constructor](#default-values-with-constructor)
- - [Class methods](#class-methods)
- - [Properties with initial value](#properties-with-initial-value)
- - [getter](#getter)
- - [setter](#setter)
- - [Static method](#static-method)
- - [Inheritance](#inheritance)
- - [Overriding methods](#overriding-methods)
- - [Exercises](#exercises)
- - [Exercises Level 1](#exercises-level-1)
- - [Exercises Level 2](#exercises-level-2)
- - [Exercises Level 3](#exercises-level-3)
+ - [Classes](#classes)
+ - [Defining a classes](#defining-a-classes)
+ - [Class Instantiation](#class-instantiation)
+ - [Class Constructor](#class-constructor)
+ - [Default values with constructor](#default-values-with-constructor)
+ - [Class methods](#class-methods)
+ - [Properties with initial value](#properties-with-initial-value)
+ - [getter](#getter)
+ - [setter](#setter)
+ - [Static method](#static-method)
+ - [Inheritance](#inheritance)
+ - [Overriding methods](#overriding-methods)
+ - [Exercises](#exercises)
+ - [Exercises Level 1](#exercises-level-1)
+ - [Exercises Level 2](#exercises-level-2)
+ - [Exercises Level 3](#exercises-level-3)
# Day 15
@@ -111,7 +111,7 @@ console.log(person)
```
```sh
-Person {firstName: undefined, lastName}
+Person {firstName: undefined, lastName:undefined}
```
All the keys of the object are undefined. When ever we instantiate we should pass the value of the properties. Let us pass value at this time when we instantiate the class.
@@ -305,7 +305,7 @@ class Person {
const fullName = this.firstName + ' ' + this.lastName
return fullName
}
- get getscore() {
+ get getScore() {
return this.score
}
get getSkills() {
@@ -586,7 +586,7 @@ Asabeneh Yetayeh is Finland. He lives Helsinki, 250.
### Overriding methods
-As you can see, we manage to access all the methods in the Person Class and we used it in the Student child class. We can customize the parent methods, we can add additional properties to a child class. If we want to customize, the methods and if we want to add extra properties, we need to use the constructor function the child class too. In side the constructor function we call the super() function to access all the properties from the parent class. The Person class didn't have gender but now let us give gender property for the child class, Student. If the same method name used in the child class, the parent method will be overridden.
+As you can see, we manage to access all the methods in the Person Class and we used it in the Student child class. We can customize the parent methods, we can add additional properties to a child class. If we want to customize, the methods and if we want to add extra properties, we need to use the constructor function the child class too. Inside the constructor function we call the super() function to access all the properties from the parent class. The Person class didn't have gender but now let us give gender property for the child class, Student. If the same method name used in the child class, the parent method will be overridden.
```js
class Student extends Person {
diff --git a/15_Day_Classes/15_day_starter/index.html b/15_Day_Classes/15_day_starter/index.html
index db149cc2d..1d17b4962 100644
--- a/15_Day_Classes/15_day_starter/index.html
+++ b/15_Day_Classes/15_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:15 Day
+ 30DaysOfJavaScript:15 Day
-
30DaysOfJavaScript:15 Day
-
Classes
+
30DaysOfJavaScript:15 Day
+
Classes
-
-
+
+
diff --git a/16_Day_JSON/16_day_json.md b/16_Day_JSON/16_day_json.md
index 3cdfb406a..33336dce9 100644
--- a/16_Day_JSON/16_day_json.md
+++ b/16_Day_JSON/16_day_json.md
@@ -19,16 +19,16 @@

- [Day 16](#day-16)
- - [JSON](#json)
- - [Converting JSON to JavaScript Object](#converting-json-to-javascript-object)
- - [JSON.parse()](#jsonparse)
- - [Using a reviver function with JSON.parse()](#using-a-reviver-function-with-jsonparse)
- - [Converting Object to JSON](#converting-object-to-json)
- - [Using a Filter Array with JSON.stringify](#using-a-filter-array-with-jsonstringify)
- - [Exercises](#exercises)
- - [Exercises Level 1](#exercises-level-1)
- - [Exercises Level 2](#exercises-level-2)
- - [Exercises Level 3](#exercises-level-3)
+ - [JSON](#json)
+ - [Converting JSON to JavaScript Object](#converting-json-to-javascript-object)
+ - [JSON.parse()](#jsonparse)
+ - [Using a reviver function with JSON.parse()](#using-a-reviver-function-with-jsonparse)
+ - [Converting Object to JSON](#converting-object-to-json)
+ - [Using a Filter Array with JSON.stringify](#using-a-filter-array-with-jsonstringify)
+ - [Exercises](#exercises)
+ - [Exercises Level 1](#exercises-level-1)
+ - [Exercises Level 2](#exercises-level-2)
+ - [Exercises Level 3](#exercises-level-3)
# Day 16
@@ -63,7 +63,7 @@ JSON stands for JavaScript Object Notation. The JSON syntax is derived from Java
}
```
-The above JSON example is not much different for a normal object. Then, what is the difference ? The difference is the key of a JSON object should be with double quotes or it should be a string. JavaScript Object and JSON are very similar that we can change JSON to Object and Object to JSON.
+The above JSON example is not much different from a normal object. Then, what is the difference ? The difference is the key of a JSON object should be with double quotes or it should be a string. JavaScript Object and JSON are very similar that we can change JSON to Object and Object to JSON.
Let us see the above example in more detail, it starts with a curly bracket. Inside the curly bracket, there is "users" key which has a value array. Inside the array we have different objects and each objects has keys, each keys has to have double quotes. For instance, we use "firstNaMe" instead of just firstName, however in object we use keys without double quotes. This is the major difference between an object and a JSON. Let's see more examples about JSON.
@@ -177,6 +177,10 @@ Mostly we fetch JSON data from HTTP response or from a file, but we can store th
JSON.parse(json[, reviver])
// json or text , the data
// reviver is an optional callback function
+/* JSON.parse(json, (key, value) => {
+
+})
+*/
```
```js
@@ -440,7 +444,7 @@ const user = {
country: 'Finland',
city: 'Helsinki',
email: 'alex@alex.com',
- skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Pyhton'],
+ skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Python'],
age: 250,
isLoggedIn: false,
points: 30
@@ -576,11 +580,8 @@ const txt = `{
### Exercises Level 1
1. Change skills array to JSON using JSON.stringify()
-
1. Stringify the age variable
-
1. Stringify the isMarried variable
-
1. Stringify the student object
### Exercises Level 2
@@ -590,7 +591,7 @@ const txt = `{
### Exercises Level 3
1. Parse the *txt* JSON to object.
-2. Find the the user who has many skills from the variable stored in *txt*.
+2. Find the user who has many skills from the variable stored in *txt*.
🎉 CONGRATULATIONS ! 🎉
diff --git a/16_Day_JSON/16_day_starter/index.html b/16_Day_JSON/16_day_starter/index.html
index 53d732a3f..272028641 100644
--- a/16_Day_JSON/16_day_starter/index.html
+++ b/16_Day_JSON/16_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:16 Day
+ 30DaysOfJavaScript:16 Day
-
30DaysOfJavaScript:16 Day
-
JSON
+
30DaysOfJavaScript:16 Day
+
JSON
-
-
+
+
diff --git a/17_Day_Web_storages/17_day_starter/index.html b/17_Day_Web_storages/17_day_starter/index.html
index e76eeef25..a66b5d33b 100644
--- a/17_Day_Web_storages/17_day_starter/index.html
+++ b/17_Day_Web_storages/17_day_starter/index.html
@@ -1,15 +1,15 @@
-
+
- 30DaysOfJavaScript:17 Day
+ 30DaysOfJavaScript:17 Day
-
30DaysOfJavaScript:17 Day
-
Web Storage
+
30DaysOfJavaScript:17 Day
+
Web Storage
-
+
diff --git a/17_Day_Web_storages/17_day_web_storages.md b/17_Day_Web_storages/17_day_web_storages.md
index d7356adad..348123233 100644
--- a/17_Day_Web_storages/17_day_web_storages.md
+++ b/17_Day_Web_storages/17_day_web_storages.md
@@ -19,18 +19,18 @@

- [Day 17](#day-17)
- - [HTML5 Web Storage](#html5-web-storage)
- - [sessionStorage](#sessionstorage)
- - [localStorage](#localstorage)
- - [Use case of Web Storages](#use-case-of-web-storages)
- - [HTML5 Web Storage Objects](#html5-web-storage-objects)
- - [Setting item to the localStorage](#setting-item-to-the-localstorage)
- - [Getting item from localStorage](#getting-item-from-localstorage)
- - [Clearing the localStorage](#clearing-the-localstorage)
- - [Exercises](#exercises)
- - [Exercises: Level 1](#exercises-level-1)
- - [Exercises: Level 2](#exercises-level-2)
- - [Exercises: Level 3](#exercises-level-3)
+ - [HTML5 Web Storage](#html5-web-storage)
+ - [sessionStorage](#sessionstorage)
+ - [localStorage](#localstorage)
+ - [Use case of Web Storages](#use-case-of-web-storages)
+ - [HTML5 Web Storage Objects](#html5-web-storage-objects)
+ - [Setting item to the localStorage](#setting-item-to-the-localstorage)
+ - [Getting item from localStorage](#getting-item-from-localstorage)
+ - [Clearing the localStorage](#clearing-the-localstorage)
+ - [Exercises](#exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
# Day 17
@@ -77,7 +77,7 @@ For the examples mentioned above, it makes sense to use localStorage. You may be
In cases, we want to to get rid of the data as soon as the window is closed. Or, perhaps, if we do not want the application to interfere with the same application that’s open in another window. These scenarios are served best with sessionStorage.
-Now, let use how use make use of these Web Storage APIs.
+Now, let us see how make use of these Web Storage APIs.
## HTML5 Web Storage Objects
@@ -90,7 +90,7 @@ Web Storage objects:
- _localStorage_ - to display the localStorage object
- _localStorage.clear()_ - to remove everything in the local storage
-- _localStorage.setItem()_ - to storage data in the localStorage. It takes a key and a value parameters.
+- _localStorage.setItem()_ - to store data in the localStorage. It takes a key and a value parameters.
- _localStorage.getItem()_ - to display data stored in the localStorage. It takes a key as a parameter.
- _localStorage.removeItem()_ - to remove stored item form a localStorage. It takes key as a parameter.
- _localStorage.key()_ - to display a data stored in a localStorage. It takes index as a parameter.
diff --git a/18_Day_Promises/18_day_promises.md b/18_Day_Promises/18_day_promises.md
index fe0dac7b8..50545f869 100644
--- a/18_Day_Promises/18_day_promises.md
+++ b/18_Day_Promises/18_day_promises.md
@@ -19,15 +19,15 @@

- [Day 18](#day-18)
- - [Promise](#promise)
- - [Callbacks](#callbacks)
- - [Promise constructor](#promise-constructor)
- - [Fetch API](#fetch-api)
- - [Async and Await](#async-and-await)
- - [Exercises](#exercises)
- - [Exercises: Level 1](#exercises-level-1)
- - [Exercises: Level 2](#exercises-level-2)
- - [Exercises: Level 3](#exercises-level-3)
+ - [Promise](#promise)
+ - [Callbacks](#callbacks)
+ - [Promise constructor](#promise-constructor)
+ - [Fetch API](#fetch-api)
+ - [Async and Await](#async-and-await)
+ - [Exercises](#exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
# Day 18
@@ -105,7 +105,7 @@ doSomething((err, result) => {
### Promise constructor
-We can create a promise using the Promise constructor. We can create a new promise using the key word new followed by the word Promise and followed by a parenthesis. Inside the parenthesis it it takes a callback function. The promise callback function has two parameters which are the _resolve_ and _reject_ functions.
+We can create a promise using the Promise constructor. We can create a new promise using the key word `new` followed by the word `Promise` and followed by a parenthesis. Inside the parenthesis, it takes a `callback` function. The promise callback function has two parameters which are the _`resolve`_ and _`reject`_ functions.
```js
// syntax
@@ -147,7 +147,7 @@ Let us another example when the promise is settled with reject.
const doPromise = new Promise((resolve, reject) => {
setTimeout(() => {
const skills = ['HTML', 'CSS', 'JS']
- if (skills.icludes('Node')) {
+ if (skills.includes('Node')) {
resolve('fullstack developer')
} else {
reject('Something wrong has happened')
@@ -197,7 +197,7 @@ square(2)
Promise {: 4}
```
-The word _async_ in front of a function means that function will return a promise. The above square function instead of a value it returned a promise.
+The word _async_ in front of a function means that function will return a promise. The above square function instead of a value it returns a promise.
How do we access the value from the promise? To access the value from the promise, we will use the keyword _await_.
@@ -206,6 +206,7 @@ const square = async function (n) {
return n * n
}
const value = await square(2)
+console.log(value)
```
```sh
@@ -244,7 +245,7 @@ console.log('===== async and await')
fetchData()
```
-🌕 You are real and you kept your promise and your reached to day 18. Keep your promise and settle the challenge with resolve. You are 18 steps a head to your way to greatness. Now do some exercises for your brain and for your muscle.
+🌕 You are real and you kept your promise and you reached to day 18. Keep your promise and settle the challenge with resolve. You are 18 steps ahead to your way to greatness. Now do some exercises for your brain and muscles.
## Exercises
diff --git a/18_Day_Promises/18_day_starter/index.html b/18_Day_Promises/18_day_starter/index.html
index a0103b7db..f3df8725e 100644
--- a/18_Day_Promises/18_day_starter/index.html
+++ b/18_Day_Promises/18_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:18 Day
+ 30DaysOfJavaScript:18 Day
-
30DaysOfJavaScript:18 Day
-
Promises
+
30DaysOfJavaScript:18 Day
+
Promises
-
-
+
+
diff --git a/19_Day_Closures/19_day_closures.md b/19_Day_Closures/19_day_closures.md
index 4c9601684..653c185dd 100644
--- a/19_Day_Closures/19_day_closures.md
+++ b/19_Day_Closures/19_day_closures.md
@@ -14,15 +14,15 @@
-[<< Day 18](../18_Day_Promises/18_day_promise.md) | [Day 20 >>](../20_Day_Writing_clean_codes/20_day_writing_clean_codes.md)
+[<< Day 18](../18_Day_Promises/18_day_promises.md) | [Day 20 >>](../20_Day_Writing_clean_codes/20_day_writing_clean_codes.md)

- [Day 19](#day-19)
- - [Closure](#closure)
- - [Exercises](#exercises)
- - [Exercises: Level 1](#exercises-level-1)
- - [Exercises: Level 2](#exercises-level-2)
- - [Exercises: Level 3](#exercises-level-3)
+ - [Closure](#closure)
+ - [Exercises](#exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
# Day 19
@@ -80,7 +80,7 @@ console.log(innerFuncs.minusOne)
```sh
1
-1
+0
```
🌕 You are making progress. Maintain your momentum, keep the good work. Now do some exercises for your brain and for your muscle.
@@ -101,4 +101,4 @@ console.log(innerFuncs.minusOne)
🎉 CONGRATULATIONS ! 🎉
-[<< Day 18](../18_Day_Promises/18_day_promise.md) | [Day 20 >>](../20_Day_Writing_clean_codes/20_day_writing_clean_codes.md)
\ No newline at end of file
+[<< Day 18](../18_Day_Promises/18_day_promises.md) | [Day 20 >>](../20_Day_Writing_clean_codes/20_day_writing_clean_codes.md)
\ No newline at end of file
diff --git a/19_Day_Closures/19_day_starter/index.html b/19_Day_Closures/19_day_starter/index.html
index a72d69401..649f1207e 100644
--- a/19_Day_Closures/19_day_starter/index.html
+++ b/19_Day_Closures/19_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:19 Day
+ 30DaysOfJavaScript:19 Day
-
30DaysOfJavaScript:19 Day
-
Writing Clean Code
+
30DaysOfJavaScript:19 Day
+
Writing Clean Code
-
+
diff --git a/20_Day_Writing_clean_codes/20_day_starter/index.html b/20_Day_Writing_clean_codes/20_day_starter/index.html
index ba00ff953..5ccd91fd6 100644
--- a/20_Day_Writing_clean_codes/20_day_starter/index.html
+++ b/20_Day_Writing_clean_codes/20_day_starter/index.html
@@ -1,16 +1,16 @@
-
+
- 30DaysOfJavaScript:20 Day
+ 30DaysOfJavaScript:20 Day
-
30DaysOfJavaScript:20 Day
-
Writing clean code
+
30DaysOfJavaScript:20 Day
+
Writing clean code
-
+
diff --git a/20_Day_Writing_clean_codes/20_day_writing_clean_codes.md b/20_Day_Writing_clean_codes/20_day_writing_clean_codes.md
index 4028bdbf5..8579b6b6a 100644
--- a/20_Day_Writing_clean_codes/20_day_writing_clean_codes.md
+++ b/20_Day_Writing_clean_codes/20_day_writing_clean_codes.md
@@ -18,21 +18,21 @@

- [Day 20](#day-20)
- - [Writing clean code](#writing-clean-code)
- - [JavaScript Style Guide](#javascript-style-guide)
- - [Why we need style guide](#why-we-need-style-guide)
- - [Airbnb JavaScript Style Guide](#airbnb-javascript-style-guide)
- - [Standard JavaScript Style Guide](#standard-javascript-style-guide)
- - [Google JavaScript Style Guide](#google-javascript-style-guide)
- - [JavaScript Coding Conventions](#javascript-coding-conventions)
- - [Conventions use in 30DaysOfJavaScript](#conventions-use-in-30daysofjavascript)
- - [Variables](#variables)
- - [Arrays](#arrays)
- - [Functions](#functions)
- - [Loops](#loops)
- - [Objects](#objects)
- - [Conditional](#conditional)
- - [Classes](#classes)
+ - [Writing clean code](#writing-clean-code)
+ - [JavaScript Style Guide](#javascript-style-guide)
+ - [Why we need style guide](#why-we-need-style-guide)
+ - [Airbnb JavaScript Style Guide](#airbnb-javascript-style-guide)
+ - [Standard JavaScript Style Guide](#standard-javascript-style-guide)
+ - [Google JavaScript Style Guide](#google-javascript-style-guide)
+ - [JavaScript Coding Conventions](#javascript-coding-conventions)
+ - [Conventions use in 30DaysOfJavaScript](#conventions-use-in-30daysofjavascript)
+ - [Variables](#variables)
+ - [Arrays](#arrays)
+ - [Functions](#functions)
+ - [Loops](#loops)
+ - [Objects](#objects)
+ - [Conditional](#conditional)
+ - [Classes](#classes)
# Day 20
@@ -140,10 +140,10 @@ const vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
By now you are very familiar function declaration, expression function, arrow function and anonymous function. In this challenge we tend to use arrow function instead of other functions. Arrow function is not a replacement for other functions. In addition, arrow functions and function declarations are not exactly the same. So you should know when to use and when not. I will cover the difference in detail in other sections. We will use explicit return instead of implicit return if the function is one liner
```js
-// function which prints full name of a person
+// function which return full name of a person
const printFullName = (firstName, lastName) => firstName + ' ' + lastName
-// function which calculate a square of a number
+// function which calculates a square of a number
const square = (n) => n * n
// a function which generate random hexa colors
@@ -180,6 +180,8 @@ const showDateTime = () => {
}
```
+The `new Dat().toLocaleString()` can also be used to display current date time. The `toLocaleString()` methods takes different arguments. You may learn more about date and time from this [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString).
+
#### Loops
We coverer many types of loops in this challenges. The regular for loop, while loop, do while loop, for of loop, forEach loop and for in loop.
@@ -202,7 +204,7 @@ for(let i = 0; i < len; i++){
// iterating an array using for of
for( const name of names) {
- console.log(name.toUpperCasee())
+ console.log(name.toUpperCase())
}
// iterating array using forEach
@@ -218,7 +220,7 @@ const person = {
skills: ['HTML','CSS','JavaScript','React','Node','MongoDB','Python','D3.js'],
isMarried: true
}
-for(const key in user) {
+for(const key in person) {
console.log(key)
}
@@ -236,7 +238,7 @@ const person = {
age: 250,
country: 'Finland',
city: 'Helsinki',
- skills: ['HTML','CSS','JavaScript','React','Node','MongoDB','Python','D3.js'],
+ skills: ['HTML','CSS','JavaScript','TypeScript', 'React','Node','MongoDB','Python','D3.js'],
isMarried: true
}
// iterating through object keys
@@ -244,7 +246,6 @@ for(const key in person) {
console.log(key, person[key])
}
-
```
#### Conditional
diff --git a/21_Day_DOM/21_day_dom.md b/21_Day_DOM/21_day_dom.md
index fd56208e7..af46260f0 100644
--- a/21_Day_DOM/21_day_dom.md
+++ b/21_Day_DOM/21_day_dom.md
@@ -19,31 +19,31 @@

- [Day 21](#day-21)
- - [Document Object Model (DOM) - Day 1](#document-object-model-dom---day-1)
- - [Getting Element](#getting-element)
- - [Getting elements by tag name](#getting-elements-by-tag-name)
- - [Getting elements by class name](#getting-elements-by-class-name)
- - [Getting an element by id](#getting-an-element-by-id)
- - [Getting elements by using querySelector methods](#getting-elements-by-using-queryselector-methods)
- - [Adding attribute](#adding-attribute)
- - [Adding attribute using setAttribute](#adding-attribute-using-setattribute)
- - [Adding attribute without setAttribute](#adding-attribute-without-setattribute)
- - [Adding class using classList](#adding-class-using-classlist)
- - [Removing class using remove](#removing-class-using-remove)
- - [Adding Text to HTML element](#adding-text-to-html-element)
- - [Adding Text content using textContent](#adding-text-content-using-textcontent)
- - [Adding Text Content using innHTML](#adding-text-content-using-innhtml)
- - [Text Content](#text-content)
- - [Inner HTML](#inner-html)
- - [Adding style](#adding-style)
- - [Adding Style Color](#adding-style-color)
- - [Adding Style Background Color](#adding-style-background-color)
- - [Adding Style Font Size](#adding-style-font-size)
- - [Exercises](#exercises)
- - [Exercise: Level 1](#exercise-level-1)
- - [Exercise: Level 2](#exercise-level-2)
- - [Exercise: Level 3](#exercise-level-3)
- - [DOM: Mini project 1](#dom-mini-project-1)
+ - [Document Object Model (DOM) - Day 1](#document-object-model-dom---day-1)
+ - [Getting Element](#getting-element)
+ - [Getting elements by tag name](#getting-elements-by-tag-name)
+ - [Getting elements by class name](#getting-elements-by-class-name)
+ - [Getting an element by id](#getting-an-element-by-id)
+ - [Getting elements by using querySelector methods](#getting-elements-by-using-queryselector-methods)
+ - [Adding attribute](#adding-attribute)
+ - [Adding attribute using setAttribute](#adding-attribute-using-setattribute)
+ - [Adding attribute without setAttribute](#adding-attribute-without-setattribute)
+ - [Adding class using classList](#adding-class-using-classlist)
+ - [Removing class using remove](#removing-class-using-remove)
+ - [Adding Text to HTML element](#adding-text-to-html-element)
+ - [Adding Text content using textContent](#adding-text-content-using-textcontent)
+ - [Adding Text Content using innerHTML](#adding-text-content-using-innerhtml)
+ - [Text Content](#text-content)
+ - [Inner HTML](#inner-html)
+ - [Adding style](#adding-style)
+ - [Adding Style Color](#adding-style-color)
+ - [Adding Style Background Color](#adding-style-background-color)
+ - [Adding Style Font Size](#adding-style-font-size)
+ - [Exercises](#exercises)
+ - [Exercise: Level 1](#exercise-level-1)
+ - [Exercise: Level 2](#exercise-level-2)
+ - [Exercise: Level 3](#exercise-level-3)
+ - [DOM: Mini project 1](#dom-mini-project-1)
# Day 21
@@ -57,7 +57,7 @@ We can access already created element or elements using JavaScript. To access or
```html
-
+
Document Object Model
@@ -74,7 +74,7 @@ We can access already created element or elements using JavaScript. To access or
#### Getting elements by tag name
-**_getElementsByTagName()_**:takes a take name as a string parameter and this method returns an HTMLCollection object. An HTMLCollection is an array like object of HTML elements. The length property provides the size of the collection. Whenever we use this method we access the individual elements using index or after loop through each individual items. An HTMLCollection does not support all array methods therefore we should use regular for loop instead of forEach.
+**_getElementsByTagName()_**:takes a tag name as a string parameter and this method returns an HTMLCollection object. An HTMLCollection is an array like object of HTML elements. The length property provides the size of the collection. Whenever we use this method we access the individual elements using index or after loop through each individual items. An HTMLCollection does not support all array methods therefore we should use regular for loop instead of forEach.
```js
// syntax
@@ -84,7 +84,7 @@ document.getElementsByTagName('tagname')
```js
const allTitles = document.getElementsByTagName('h1')
-console.log(allTitles) //HTMCollections
+console.log(allTitles) //HTMLCollections
console.log(allTitles.length) // 4
for (let i = 0; i < allTitles.length; i++) {
@@ -104,7 +104,7 @@ document.getElementsByClassName('classname')
```js
const allTitles = document.getElementsByClassName('title')
-console.log(allTitles) //HTMCollections
+console.log(allTitles) //HTMLCollections
console.log(allTitles.length) // 4
for (let i = 0; i < allTitles.length; i++) {
@@ -133,15 +133,15 @@ The _document.querySelector_ method can select an HTML or HTML elements by tag n
**_querySelector_**: can be used to select HTML element by its tag name, id or class. If the tag name is used it selects only the first element.
```js
-let firstTitle = document.querySelector('h1') // select the first available h2 element
+let firstTitle = document.querySelector('h1') // select the first available h1 element
let firstTitle = document.querySelector('#first-title') // select id with first-title
-let firstTitle = document.querySelector('.title') // select the first available h2 element with class title
+let firstTitle = document.querySelector('.title') // select the first available element with class title
```
-**_querySelectorAll_**: can be used to select html element by its tag name or class. It return a nodeList which is an array like object which support array methods. We can use **_for loop_** or **_forEach_** to loop through each nodeList elements.
+**_querySelectorAll_**: can be used to select html elements by its tag name or class. It returns a nodeList which is an array like object which supports array methods. We can use **_for loop_** or **_forEach_** to loop through each nodeList elements.
```js
-const allTitles = document.querySelectorAll('h1')
+const allTitles = document.querySelectorAll('h1') # selects all the available h1 elements in the page
console.log(allTitles.length) // 4
for (let i = 0; i < allTitles.length; i++) {
@@ -158,7 +158,7 @@ An attribute is added in the opening tag of HTML which gives additional informat
```js
const titles = document.querySelectorAll('h1')
-titles[3].class = 'title'
+titles[3].className = 'title'
titles[3].id = 'fourth-title'
```
@@ -234,7 +234,7 @@ It value we assign is going to be a string of HTML elements.
```html
-
+
JavaScript for Everyone:DOM
@@ -264,7 +264,7 @@ The innerHTML property can allow us also to remove all the children of a parent
```html
-
+
JavaScript for Everyone:DOM
@@ -351,7 +351,7 @@ As you have notice, the properties of css when we use it in JavaScript is going
### Exercise: Level 1
1. Create an index.html file and put four p elements as above: Get the first paragraph by using **_document.querySelector(tagname)_** and tag name
-2. Get get each of the the paragraph using **_document.querySelector('#id')_** and by their id
+2. Get each of the the paragraph using **_document.querySelector('#id')_** and by their id
3. Get all the p as nodeList using **_document.querySelectorAll(tagname)_** and by their tag name
4. Loop through the nodeList and get the text content of each paragraph
5. Set a text content to paragraph the fourth paragraph,**_Fourth Paragraph_**
@@ -378,7 +378,7 @@ As you have notice, the properties of css when we use it in JavaScript is going
```html
-
+
JavaScript for Everyone:DOM
diff --git a/21_Day_DOM/21_day_starter/index.html b/21_Day_DOM/21_day_starter/index.html
index ad12ac61f..0b2f1f431 100644
--- a/21_Day_DOM/21_day_starter/index.html
+++ b/21_Day_DOM/21_day_starter/index.html
@@ -1,25 +1,25 @@
-
+
- 30DaysOfJavaScript:21 Day
+ 30DaysOfJavaScript:21 Day
-
-
Asabeneh Yetayeh challenges in 2020
-
30DaysOfJavaScript Challenge
-
-
30DaysOfPython Challenge Done
-
30DaysOfJavaScript Challenge Ongoing
-
30DaysOfReact Challenge Coming
-
30DaysOfFullStack Challenge Coming
-
30DaysOfDataAnalysis Challenge Coming
-
30DaysOfReactNative Challenge Coming
-
30DaysOfMachineLearning Challenge Coming
-
-
-
+
+
Asabeneh Yetayeh challenges in 2020
+
30DaysOfJavaScript Challenge
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Ongoing
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
diff --git a/22_Day_Manipulating_DOM_object/22_day_starters/project_1/index.html b/22_Day_Manipulating_DOM_object/22_day_starters/project_1/index.html
index 685505938..9b2e17d2a 100644
--- a/22_Day_Manipulating_DOM_object/22_day_starters/project_1/index.html
+++ b/22_Day_Manipulating_DOM_object/22_day_starters/project_1/index.html
@@ -1,21 +1,21 @@
-
+
- 30DaysOfJavaScript:22 Day: Number Generator
+ 30DaysOfJavaScript:22 Day: Number Generator
-
-
-
+
+
diff --git a/23_Day_Event_listeners/23_day_event_listeners.md b/23_Day_Event_listeners/23_day_event_listeners.md
index 1100593d0..8929480a7 100644
--- a/23_Day_Event_listeners/23_day_event_listeners.md
+++ b/23_Day_Event_listeners/23_day_event_listeners.md
@@ -19,18 +19,18 @@

- [Day 22](#day-22)
- - [DOM(Document Object Model)-Day 3](#domdocument-object-model-day-3)
- - [Event Listeners](#event-listeners)
- - [Click](#click)
- - [Double Click](#double-click)
- - [Mouse enter](#mouse-enter)
- - [Getting value from an input element](#getting-value-from-an-input-element)
- - [input value](#input-value)
- - [input event and change](#input-event-and-change)
- - [blur event](#blur-event)
- - [keypress, keydow and keyup](#keypress-keydow-and-keyup)
- - [Exercises](#exercises)
- - [Exercise: Level 1](#exercise-level-1)
+ - [DOM(Document Object Model)-Day 3](#domdocument-object-model-day-3)
+ - [Event Listeners](#event-listeners)
+ - [Click](#click)
+ - [Double Click](#double-click)
+ - [Mouse enter](#mouse-enter)
+ - [Getting value from an input element](#getting-value-from-an-input-element)
+ - [input value](#input-value)
+ - [input event and change](#input-event-and-change)
+ - [blur event](#blur-event)
+ - [keypress, keydow and keyup](#keypress-keydow-and-keyup)
+ - [Exercises](#exercises)
+ - [Exercise: Level 1](#exercise-level-1)
# Day 22
@@ -174,7 +174,7 @@ By now you are familiar with addEventListen method and how to attach event liste
List of events:
- click - when the element clicked
-- dbclick - when the element double clicked
+- dblclick - when the element double clicked
- mouseenter - when the mouse point enter to the element
- mouseleave - when the mouse pointer leave the element
- mousemove - when the mouse pointer move on the element
diff --git a/23_Day_Event_listeners/23_day_starters/project_1/index.html b/23_Day_Event_listeners/23_day_starters/project_1/index.html
index f8f52cf4f..fae19a733 100644
--- a/23_Day_Event_listeners/23_day_starters/project_1/index.html
+++ b/23_Day_Event_listeners/23_day_starters/project_1/index.html
@@ -1,21 +1,21 @@
-
+
- 30DaysOfJavaScript:23 Day: Number Generator
+ 30DaysOfJavaScript:23 Day: Number Generator
-
Number Generator
-
30DaysOfJavaScript:DOM Day 2
-
Author: Asabeneh Yetayeh
-
+
Number Generator
+
30DaysOfJavaScript:DOM Day 2
+
Author: Asabeneh Yetayeh
+
-
+
-
+
diff --git a/23_Day_Event_listeners/23_day_starters/project_2/index.html b/23_Day_Event_listeners/23_day_starters/project_2/index.html
index 666b473b6..93136da36 100644
--- a/23_Day_Event_listeners/23_day_starters/project_2/index.html
+++ b/23_Day_Event_listeners/23_day_starters/project_2/index.html
@@ -1,14 +1,14 @@
-
+
- 30DaysOfJavaScript:23 Day: Keyboard Key
+ 30DaysOfJavaScript:23 Day: Keyboard Key
-
+
diff --git a/24_Day_Project_solar_system/24_day_starter/index.html b/24_Day_Project_solar_system/24_day_starter/index.html
index b351e190b..8536ad455 100644
--- a/24_Day_Project_solar_system/24_day_starter/index.html
+++ b/24_Day_Project_solar_system/24_day_starter/index.html
@@ -1,39 +1,39 @@
-
+
- Solar System: Document Object Model:30 Days Of JavaScript
-
+ Solar System: Document Object Model:30 Days Of JavaScript
+
-
-
-Support [**Asabeneh**](https://www.patreon.com/asabeneh?fan_landing=true) to create more educational materials
-[](https://www.patreon.com/asabeneh?fan_landing=true)
-
-[<< Day 29](../29_Day_Mini_project_animating_characters/29_day_mini_project_animating_characters.md)
+
+Support the author to create more educational materials
+
+
+
+
+[Gün 2 >>](./02_Day_Data_types/02_day_data_types.md)
+
+
+
+- [30 Günlük JavaScript dərsləri](#30-days-of-javascript)
+- [📔 Gün 1](#-day-1)
+ - [Giriş](#introduction)
+ - [İlkin tələblər](#requirements)
+ - [Hazırlıq](#setup)
+ - [Node.js yüklə](#install-nodejs)
+ - [Brauzer](#browser)
+ - [Google Chrome yüklənməsi](#installing-google-chrome)
+ - [Google Chrome brauzer konsolu açmaq](#opening-google-chrome-console)
+ - [Brauzer konsolunda kod yazılması](#writing-code-on-browser-console)
+ - [Console.log](#consolelog)
+ - [Console.log - birneçə arqument ilə](#consolelog-with-multiple-arguments)
+ - [Şərhlər](#comments)
+ - [Sintaksis](#syntax)
+ - [Riyazi əməliyyatlar](#arithmetics)
+ - [Kod editoru](#code-editor)
+ - [Visual Studio Code'un yüklənməsi](#installing-visual-studio-code)
+ - [Visual Studio Code istifadəsi](#how-to-use-visual-studio-code)
+ - [Veb səhifəyə JavaScript əlavə edilməsi](#adding-javascript-to-a-web-page)
+ - [Sətirdaxili (inline) skript](#inline-script)
+ - [Daxili (internal) skript](#internal-script)
+ - [Xarici skript](#external-script)
+ - [Birneçə xarici skript](#multiple-external-scripts)
+ - [Verilənlərin tiplərinə giriş](#introduction-to-data-types)
+ - [Ədəd tipləri](#numbers)
+ - [Sətir tipləri](#strings)
+ - [Məntiqi tiplər](#booleans)
+ - [Undefined](#undefined)
+ - [Null](#null)
+ - [Verilənlərin tiplərinin yoxlanılması](#checking-data-types)
+ - [Şərhlər (daha artıq)](#comments-again)
+ - [Dəyişənlər](#variables)
+- [💻 Gün 1: Tapşırıqlar](#-day-1-exercises)
+
+# 📔 Gün 1
+
+## Giriş
+
+30 günlük JavaScript proqramlaşdırma müsabiqəsində iştirak etmək qərarına gəldiyiniz üçün sizi **təbrik edirik**. Bu çağırışda siz JavaScript proqramçısı olmaq üçün lazım olan hər şeyi və ümumiyyətlə, proqramlaşdırmanın bütün konsepsiyasını öyrənəcəksiniz. Müsabiqənin sonunda siz 30DaysOfJavaScript proqramlaşdırma testini tamamlama sertifikatı alacaqsınız. Yardıma ehtiyacınız olarsa və ya başqalarına kömək etmək istəyirsinizsə, rəsmi [telegram qrupuna](https://t.me/ThirtyDaysOfJavaScript) qoşula bilərsiniz
+
+**30GünlükJavaScript** çağırışı həm yeni başlayanlar, həm də təcrübəli JavaScript proqramçıları üçün bələdçidir. JavaScript-ə xoş gəlmisiniz. JavaScript internetin dilidir. Mən JavaScript istifadə etməkdən və öyrətməkdən həzz alıram və ümid edirəm ki, siz də bunu edəcəksiniz.
+
+Bu addım-addım JavaScript dərslərində siz bəşəriyyət tarixində ən populyar proqramlaşdırma dili olan JavaScript-i öyrənəcəksiniz.JavaScript **_veb-saytlara interaktivlik əlavə etmək, mobil proqramlar, masaüstü proqramlar, oyunlar hazırlamaq_** üçün istifadə olunur və bu gün JavaScript hətta **_maşın öyrənməsi_** və **_AI (süni intellekt)_** üçün istifadə edilə bilər.
+**_JavaScript (JS)_** son illərdə populyarlığı artıb və son altı ildir ki, ardıcıl olaraq ən məhşur və ən çox istifadə olunan proqramlaşdırma dilidir
+Mənbə: Github.
+
+## Tələblər
+
+İlkin olaraq heç bir proqramlaşdırma biliyi tələb olunmur. Yalnız ehtiyacınız var:
+
+1. Motivasiya
+2. Kompüter
+3. Internet
+4. Brauzer
+5. Kod yazmaq üçün editor
+
+## Hazırlıq
+
+İnanıram ki, sizdə proqramçı olmaq üçün kompüter, internet, motivasiya və güclü istək var. Bunlara sahibsinizsə, başlamaq üçün hər şeyiniz var.
+
+### Node.js-in yüklənilməsi
+
+İndi olmasa belə daha sonrakı addımlar üçün Node-a ehtiyaciniz var. Yükləmək üçün [buraya](https://nodejs.org/en/) istinad edin.
+
+
+
+Yükləndikdən sonra quraşdırılma üçün
+
+
+
+Əməliyyat sistemi terminalımızı açaraq maşınımızda node quraşdırılıb-quraşdırılmadığını yoxlaya bilərik.
+
+```sh
+asabeneh $ node -v
+v12.14.0
+```
+
+Bu dərsliyi hazırlayarkən mən Node versiyası 12.14.0-dan istifadə edirdim, lakin indi yükləmək üçün Node.js-in tövsiyə olunan versiyası v14.17.6-dır.
+
+### Brauzer
+
+Hazırda bir çox brauzer mövcud olsa da müəllif Google Chrome istifadəsini tövsiyə edir.
+
+#### Google Chrome yükləmək
+
+Google Chrome sizdə mövcud deyilsə bu [linkə](https://www.google.com/chrome/) istinad edin. Biz brauzer konsolunda kiçik JavaScript kodu yaza bilərik, lakin ciddi proqramların hazırlanması üçün brauzer konsolundan istifadə etmirik.
+
+
+
+#### Google Chrome konsola giriş
+
+Siz Google Chrome konsolunu brauzerin yuxarı sağ küncündə üç nöqtəyə klikləməklə, _Əlavə alətlər -> Tərtibatçı alətləri_ seçməklə və ya klaviatura qısa yolundan istifadə etməklə aça bilərsiniz. Mən qısayollardan istifadə etməyi üstün tuturam.
+
+
+
+Klaviatura qısayolu ilə brauzer açmaq üçün
+
+```sh
+Mac
+Command+Option+J
+
+Windows/Linux:
+Ctl+Shift+J
+```
+
+
+
+Google Chrome konsolunu açdıqdan sonra işarələnmiş düymələri araşdırmağa çalışın. Biz vaxtımızın çox hissəsini Konsolda keçirəcəyik. Konsol JavaScript kodunuzun mövcud olduğu yerdir. Google Console V8 mühərriki JavaScript kodunuzu maşın koduna tərcümə edir.
+Gəlin Google Chrome konsolunda JavaScript kodu yazaq:
+
+
+
+#### Brauzer konsolunda kodun yazılması
+
+Biz istənilən JavaScript kodunu Google konsolunda və ya istənilən brauzer konsolunda yaza bilərik. Bununla belə, bu problem üçün biz yalnız Google Chrome konsoluna diqqət yetiririk. Konsolu aşağıdakılardan istifadə edərək açın:
+
+```sh
+Mac
+Command+Option+I
+
+Windows:
+Ctl+Shift+I
+```
+
+##### Console.log
+
+İlk JavaScript kodumuzu yazmaq üçün biz daxili funksiyadan istifadə etdik **console.log()**. Biz arqumenti giriş məlumatları kimi ötürdük və funksiya çıxışı göstərir. Biz console.log() funksiyasında giriş məlumatı və ya arqument kimi "Salam, Dünya"nı ötürdük.
+
+```js
+console.log('Salam, Dünya!')
+```
+
+##### Console.log - birneçə arqument ilə
+
+**console.log()** funksiyasi vergüllə ayrılmış istənilən sayda parametri qəbul edə bilər.
+Sintaksis: **console.log(param1, param2, param3)**
+
+
+
+```js
+console.log('Hello', 'World', '!')
+console.log('HAPPY', 'NEW', 'YEAR', 2020)
+console.log('Welcome', 'to', 30, 'Days', 'Of', 'JavaScript')
+```
+
+Yuxarıdakı kod parçasından göründüyü kimi, _console.log()_ çoxlu arqument qəbul edə bilər.
+
+Təbrik edirik! Siz ilk JavaScript kodunuzu _console.log()_ istifadə edərək yazdınız.
+
+##### Şərhlər
+
+Kodumuza şərhlər əlavə edirik. Kodu daha oxunaqlı etmək və kodumuzda qeydlər daxil etmək üçün şərhlər çox vacibdir. JavaScript kodumuzun şərh hissəsini qeydə almır və maşın dilinə tərcümə etmir. JavaScript-də // ilə başlayan hər hansı mətn sətiri şərhdir və həmçinin buna /\* \*/ kimi əlavə edilən hər şey də şərhdir.
+
+**Nümunə: Tək sətirli şərhlər**
+
+// Bu bir şərhdir
+ // Bu da bir şərhdir
+ // Bu da həmçinin
+
+**Nümunə: Çoxsətirli şərhlər**
+
+/*
+Çoxsətirli şərhlər
+ Çoxsətirli şərhlər bir neçə sətiri ehtiva edə bilir
+ JavaScript web-in dilidir
+ */
+
+##### Sintaksis
+
+Proqramlaşdırma dilləri insan dillərinə bənzəyir. İngilis və ya bir çox başqa dil mənalı mesajı çatdırmaq üçün sözlər, ifadələr, cümlələr, mürəkkəb cümlələr və sair istifadə edir. Sintaksisin ingiliscə mənası _dildə yaxşı formalaşmış cümlələr yaratmaq üçün söz və ifadələrin düzülüşüdür_. Sintaksisin texniki tərifi kompüter dilində ifadələrin strukturudur. Proqramlaşdırma dillərində sintaksis var. JavaScript proqramlaşdırma dilidir və digər proqramlaşdırma dilləri kimi onun da öz sintaksisi var. JavaScript-in başa düşdüyü sintaksisi yazmasaq, o, müxtəlif növ xətaları bizə qaytaracaq. Müxtəlif növ JavaScript xətalarını daha sonra araşdıracağıq. Hələlik gəlin sintaksis səhvlərinə baxaq.
+
+
+
+Mən qəsdən səhv etdim. Nəticədə, konsol sintaksis səhvlərini qaytarır. Əslində, sintaksis çox informativdir. Hansı növ səhvə yol verildiyini bildirir. Səhv rəyi təlimatını oxumaqla biz sintaksisi düzəldə və problemi həll edə bilərik. Proqramdakı xətaların müəyyən edilməsi və aradan qaldırılması prosesi "debugging" adlanır. Gəlin səhvləri düzəldək:
+```js
+console.log('Hello, World!')
+console.log('Hello, World!')
+```
+
+İndiyə qədər biz _console.log()_ istifadə edərək mətnin necə göstərildiyini gördük. Əgər biz _console.log()_ istifadə edərək mətni və ya sətri çap ediriksə, mətn tək dırnaqlar, qoşa dırnaqlar və ya əks dırnaqlar (backtick) içərisində olmalıdır.
+
+**Nümunə:**
+
+```js
+console.log('Hello, World!')
+console.log("Hello, World!")
+console.log(`Hello, World!`)
+```
+
+#### Riyazi əməliyyatlar
+
+İndi gəlin ədəd tipli dəyişənlər üzərində Google Chrome konsolunda _console.log()_ istifadə edərək JavaScript kodlarının yazılmasına aid nümunələri məşq edək.
+
+Mətnə əlavə olaraq JavaScript-dən istifadə edərək riyazi hesablamalar da edə bilərik. Aşağıdakı sadə hesablamaları aparaq.
+Konsol **_console.log()_** funksiyası olmadan birbaşa arqumentlər qəbul edə bilər. Bununla belə, o, dərslikdə daha əvvəldə daxil edilmişdir, çünki bu nümunələrin əksəriyyəti funksiyadan istifadənin məcburi olduğu mətn redaktorunda baş verəcəkdir. Konsoldakı təlimatlarlı birbaşa nəzərdən keçirə bilərsiniz.
+
+
+
+```js
+console.log(2 + 3) // Toplama
+console.log(3 - 2) // Çıxma
+console.log(2 * 3) // Vurma
+console.log(3 / 2) // Bölmə
+console.log(3 % 2) // Qalığın tapılması
+console.log(3 ** 2) // Qüvvət üstü. Yəni, 3 ** 2 == 3 * 3
+```
+
+### Mətn redaktoru
+
+Kodlarımızı brauzer konsoluna yaza bilərik, lakin bu, daha böyük layihələr üçün əlverişli deyil və ya bəzi hallarda mümkünsüzdür. Real iş mühitində proqramçılar kodlarını yazmaq üçün müxtəlif kod/mətn redaktorlarından istifadə edirlər. Bu 30 günlük JavaScript dərsliyində biz Visual Studio Code-dan istifadə edəcəyik.
+
+#### Visual Studio Code-un yüklənməsi
+
+Visual Studio Code çox məşhur açıq mənbəli mətn redaktorudur. [Visual Studio Code-u yükləmə](https://code.visualstudio.com/) tövsiyə edərdim, lakin başqa redaktorların tərəfdarısınızsa, əlinizdə olanları istifadə etməkdən çəkinməyin.
+
+
+
+Yüklədikdən sonra mətn redaktoru artıq istifadəyə hazırdır.
+
+#### Visual Studio Code-u necə istifadə etməli
+
+Yüklənmə uğurla başa çatdıqdan sonra Visual Studio Code ikonuna 2 ardıcıl klik edərək onu başlada bilərsiniz
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Veb səhifəyə JavaScript əlavə olunması
+
+JavaScript kodu veb səhifəyə 3 üsulla əlavə edilə bilər:
+
+- **_Sətirdaxili skript_**
+- **_Daxili skript_**
+- **_Xarici fayl ilə skript_**
+- **_Birneçə xarici faylla skript_**
+
+Aşağıdakı bölmələr veb səhifənizə JavaScript kodu əlavə etməyin müxtəlif yollarını göstərir.
+
+### Sətirdaxili skript
+
+İş masanızda və ya istənilən yerdə layihə qovluğu yaradın, onu 30DaysOfJS adlandırın və layihə qovluğunda **_index.html_** faylı yaradın. Sonra aşağıdakı kodu fayla əlavə edib onu brauzerdə açın, məsələn [Chrome](https://www.google.com/chrome/) ilə.
+
+```html
+
+
+
+ 30DaysOfScript: Sətirdaxili skript
+
+
+
+
+
+```
+
+İndi siz ilk daxili skriptinizi yazdınız. Biz _alert()_ daxili funksiyasından istifadə edərək pop-up xəbərdarlıq mesajı yarada bilərik.
+
+### Daxili skript
+
+Daxili skript _head_ və ya _body_ ilə yazıla bilər, lakin onu HTML sənədinin gövdəsinə yerləşdirməyə üstünlük verilir.
+Əvvəlcə səhifənin baş hissəsinə yazaq.
+
+```html
+
+
+
+ 30DaysOfScript: Daxili skript
+
+
+
+
+```
+
+Çox vaxt daxili skripti belə yazırıq. JavaScript kodunun faylın gövdəsinə (body) bölməsinə yazılması ən çox üstünlük verilən seçimdir. console.log() saytından çıxışı görmək üçün brauzer konsolunu açın
+
+```html
+
+
+
+ 30DaysOfScript: Daxili skript
+
+
+
+
+
+
+```
+
+console.log() saytından çıxışı görmək üçün brauzer konsolunu açın
+
+
+
+### Xarici kod skripti
+
+Daxili skriptə bənzər şəkildə, xarici skript bağlantısı başlıqda (head) və ya gövdədə (body) ola bilər, lakin onun gövdəyə yerləşdirilməsinə üstünlük verilir.
+Əvvəlcə .js uzantılı xarici JavaScript faylı yaratmalıyıq. .js uzantısı ilə bitən bütün fayllar JavaScript fayllarıdır. Layihə qovluğunda introduction.js adlı fayl yaradın və aşağıdakı kodu yazın və bu .js faylını gövdənin aşağı hissəsində əlaqələndirin.
+
+```js
+console.log('30 Günlük JS dərsləri')
+```
+
+_head_ hissəsində JavaScript faylına istinad:
+
+```html
+
+
+
+ 30DaysOfJavaScript: Xarici skript faylı
+
+
+
+
+```
+
+_body_ hissəsində JavaScript faylına istinad:
+
+```html
+
+
+
+ 30DaysOfJavaScript: Xarici skript faylı
+
+
+
+
+
+
+
+```
+
+console.log() nəticəsini görmək üçün brauzer konsolunu açın.
+
+### Birneçə xarici skript faylına istinad
+
+Biz həmçinin bir neçə xarici JavaScript faylına veb səhifədə istinad edə bilərik.
+30DaysOfJS qovluğunda helloworld.js faylı yaradın və aşağıdakı kodu yazın.
+
+```js
+console.log('Salam, dünya!')
+```
+
+```html
+
+
+
+ Birneçə xarici skript faylına istinad
+
+
+
+
+
+
+```
+
+_Main.js_ faylınız bütün digər skriptlərdən sonra daxil edilməlidir. Bunu xatırlamaq çox vacibdir.
+
+
+
+## Verilənlər tiplərinə giriş
+
+JavaScript-də və digər proqramlaşdırma dillərində müxtəlif növ məlumat növləri mövcuddur. Aşağıdakılar JavaScript primitiv verilən tipləridir:_String, Number, Boolean, undefined, Null_ və _Symbol_.
+
+### Ədədlər (Numbers)
+
+- İnteger: Integer (mənfi, sıfır və müsbət) ədədlər
+ Nümunə:
+ ... -3, -2, -1, 0, 1, 2, 3 ...
+- Tam hissəli ədədlər: Onluq (Decimal) ədədlər
+ Nümunə:
+ ... -3.5, -2.25, -1.0, 0.0, 1.1, 2.2, 3.5 ...
+
+### Sətir (String) tipli verilənlər
+
+İki tək dırnaq, qoşa dırnaq və ya əks istiqamətli dırnaqlar arasında bir və ya daha çox simvol çoxluğudur.
+
+**Nümunə:**
+
+```js
+'Asabeneh'
+'Finland'
+'JavaScript is a beautiful programming language'
+'I love teaching'
+'I hope you are enjoying the first day'
+`We can also create a string using a backtick`
+'A string could be just as small as one character as big as many pages'
+```
+
+### Məntiqi ifadələr
+
+Məntiqi tiplər yalnız iki mümkün qiymətdən birini ala bilən ifadələrdir. İstənilən müqayisə əməliyyatı _true_ və ya _false_ qiymətlərinin birindən ibarət nəticə qaytarır.
+
+**Nümunə:**
+
+```js
+true
+false
+```
+
+### Undefined
+
+JavaScript-də dəyişənə ilkin qiymət təyin etməsək, _undefined_ tipi verilir. Bundan əlavə, funksiya heç nə qaytarmırsa, susmaya görə _undefined_ qaytarır.
+
+```js
+let firstName
+console.log(firstName) // undefined, çünki dəyişənə ilkin qiymət təyin edilməyib
+```
+
+### Null
+
+JavaScript-də null boş dəyər deməkdir.
+
+```js
+let emptyValue = null
+```
+
+## Verilənlər tiplərinin yoxlanılması
+
+Hər hansi müəyyən olunmuş dəyişənin tipini tapmaq üçün **typeof** operatoru istifadə oluna bilər. Nümunəyə nəzər yetirin.
+
+```js
+console.log(typeof 'Asabeneh') // string
+console.log(typeof 5) // number
+console.log(typeof true) // boolean
+console.log(typeof null) // object type
+console.log(typeof undefined) // undefined
+```
+
+## Şərhlər (daha artıq)
+
+Bildiyimiz kimi JavaScript-də şərh yazmaq digər proqramlaşdırma dillərinə olduğu kimidir. Kodunuzu daha oxunaqlı etmək üçün şərhlər vacibdir.
+Şərh əlavə etməyin iki yolu var:
+
+- _Təksətirli şərhlər_
+- _Çoxsətirli şərhlər_
+
+```js
+// let firstName = 'Asabeneh'; tək sətirli şərh
+// let lastName = 'Yetayeh'; tək sətirli şərh
+```
+
+Çoxsətirli şərhlər:
+
+```js
+/*
+ let location = 'Helsinki';
+ let age = 100;
+ let isMarried = true;
+ This is a Multiple line comment
+
+*/
+```
+
+## Dəyişıənlər
+
+Dəyişənlər məlumatların yaddaşda saxlanması üçün istifadə olunur. Dəyişən elan edildikdə, yaddaş yeri rezerv olunur. Dəyişən təyin edildikdə, yaddaş sahəsində həmin verilənlər saxlanılır. Dəyişən elan etmək üçün biz _var_, _let_ və ya _const_ açar sözlərindən istifadə edirik.
+
+Qİyməti proqram daxilində dəyişən dəyişənlər üçün biz _let_ istifadə edirik. Məlumatlar ümumiyyətlə dəyişməzsə, yəni sabitlər üçün biz _const_ istifadə edirik. Məsələn, PI sabiti üçün biz _const_ istifadə edə bilərik. Bu dərslikdə _var_ istifadə etməyəcəyik və mən sizə ondan istifadə etməyi tövsiyə etmirəm. Bu, tövsiyə edilən yol deyil və təhlükəli məqamlara yol aça bilər. Var, let və const haqqında digər bölmələrdə ətraflı danışacağıq. Hələlik yuxarıdakı izahat kifayətdir.
+
+Düzgün JavaScript dəyişən adı aşağıdakı qaydalara əməl etməlidir:
+
+- Rəqəmlə başlaya bilməz.
+- $ və _ istisna olmaqla xüsusi simvolların istifadəsinə icazə verilmir.
+- Adətən camelCase konvensiyasına əsaslanaraq adlandırılır.
+- Sözlər və ya dəyişən adının hissələri arasında boşluq olmaz.
+
+Düzgün dəyişən adları nümunələri:
+
+```js
+firstName
+lastName
+country
+city
+capitalCity
+age
+isMarried
+
+first_name
+last_name
+is_married
+capital_city
+
+num1
+num_1
+_num_1
+$num1
+year2020
+year_2020
+```
+
+Siyahıdakı birinci və ikinci dəyişənlər JavaScript-də elan etmək üçün camelCase konvensiyasına uyğundur. Bu dərslikdə biz camelCase dəyişənlərindən istifadə edəcəyik.
+
+Yalnış elan olunmuş dəyişənlər:
+
+```sh
+ first-name
+ 1_num
+ num_#_1
+```
+
+Müxtəlif verilən tipləri ilə dəyişənləri elan edək. Dəyişən elan etmək üçün dəyişən adından əvvəl _let_ və ya _const_ açar sözündən istifadə etməliyik. Dəyişən adından sonra bərabər işarəsi (təyinat operatoru) və dəyəri (təyin edilmiş verilənlər) yazırıq.
+
+```js
+// Sintaksis
+let nameOfVariable = value
+```
+
+**Nümunələr**
+
+```js
+// Müxtəlif verilənlər tipindən istifadə edərək dəyişənlərin yaradılmasə
+let firstName = 'Asabeneh' // ad
+let lastName = 'Yetayeh' // soyad
+let country = 'Finland' // ölkə
+let city = 'Helsinki' // paytaxt
+let age = 100 // yaş
+let isMarried = true
+
+console.log(firstName, lastName, country, city, age, isMarried)
+```
+
+```sh
+Asabeneh Yetayeh Finland Helsinki 100 true
+```
+
+```js
+// ədəd tipli dəyişənlərin sabit açar sözü ilə yaradılması
+let age = 100 // yaş
+const gravity = 9.81 // Fizikada istifadə olunan qravitasiya sabiti
+const boilingPoint = 100 // Normal atmosfer təzyiqində suyun qaynama tempraturu
+const PI = 3.14 // Geometrik sabit
+console.log(gravity, boilingPoint, PI)
+```
+
+```sh
+9.81 100 3.14
+```
+
+```js
+// Yalnız bir açar sözü istifadə etməklə müxtəlif dəyişənlər vergüllə ayrılmış şəkildə yaradıla bilər
+let name = 'Asabeneh', //ad
+ job = 'teacher', // vəzifə
+ live = 'Finland' // ölkə
+console.log(name, job, live)
+```
+
+```sh
+Asabeneh teacher Finland
+```
+
+01_Giriş qovluqda _index.html_ faylını işə saldığınız zaman bunu əldə etməlisiniz:
+
+
+
+🌕 Təbrik edirik! Siz 1-ci günü yenicə tamamladınız. İndi beyniniz və əzələniz üçün bəzi fiziki hərəkətlər edin.
+
+# 💻 Gün 1: Tapşırıqlar
+
+1. _şərhlər kodu oxunaqlı edə bilər_ mətnini özündə ehtiva edən tək sətirli şərh yazın.
+2. _30DaysOfJavaScript-ə xoş gəlmisiniz_ deyən başqa bir şərh yazın.
+3. Şərhlərin kodu oxunaqlı, təkrar istifadəsi asan və məlumatlandırıcı edə biləcəyini deyən çoxsətirli şərh yazın
+
+4. Variables.js faylı yaradın və dəyişənləri elan edin və sətir, boolean, undefined və null dəyişən tiplərini təyin edin
+5. datatypes.js faylı yaradın və müxtəlif dəyişən tiplərini yoxlamaq üçün JavaScript **_typeof_** operatorundan istifadə edin.
+6. İlkin qiymət təyin etmədən dörd dəyişəni elan edin
+7. Təyin edilmiş ilkin qiymət olan dörd dəyişəni elan edin
+8. Adınızı, soyadınızı, ailə vəziyyətinizi, ölkənizi və yaşınızı bir neçə sətirdə saxlamaq üçün dəyişənləri elan edin
+9. Adınızı, soyadınızı, ailə vəziyyətinizi, ölkənizi və yaşınızı bir sətirdə saxlamaq üçün dəyişənləri elan edin
+10. İki _myAge_ və _yourAge_ dəyişənini elan edin və onlara ilkin qiymətlər təyin edin və brauzer konsoluna daxil olun.
+
+```sh
+I am 25 years old.
+You are 30 years old.
+```
+
+🎉 TƏBRİK EDİRİK ! 🎉
+
+[Gün 2 >>](./02_Day_Data_types/02_day_data_types.md)
diff --git a/French/images/30DaysOfJavaScript.png b/French/images/30DaysOfJavaScript.png
new file mode 100644
index 000000000..41422866d
Binary files /dev/null and b/French/images/30DaysOfJavaScript.png differ
diff --git a/French/images/adding_project_to_vscode.png b/French/images/adding_project_to_vscode.png
new file mode 100644
index 000000000..193586079
Binary files /dev/null and b/French/images/adding_project_to_vscode.png differ
diff --git a/French/images/arithmetic.png b/French/images/arithmetic.png
new file mode 100644
index 000000000..9830916b6
Binary files /dev/null and b/French/images/arithmetic.png differ
diff --git a/French/images/array_index.png b/French/images/array_index.png
new file mode 100644
index 000000000..355324e18
Binary files /dev/null and b/French/images/array_index.png differ
diff --git a/French/images/assignment_operators.png b/French/images/assignment_operators.png
new file mode 100644
index 000000000..99d51d29c
Binary files /dev/null and b/French/images/assignment_operators.png differ
diff --git "a/French/images/banners/Day -1 \342\200\223 31.png" "b/French/images/banners/Day -1 \342\200\223 31.png"
new file mode 100644
index 000000000..d9a9639d8
Binary files /dev/null and "b/French/images/banners/Day -1 \342\200\223 31.png" differ
diff --git a/French/images/banners/day_1_1.png b/French/images/banners/day_1_1.png
new file mode 100644
index 000000000..dd583c719
Binary files /dev/null and b/French/images/banners/day_1_1.png differ
diff --git a/French/images/banners/day_1_10.png b/French/images/banners/day_1_10.png
new file mode 100644
index 000000000..e063dec4a
Binary files /dev/null and b/French/images/banners/day_1_10.png differ
diff --git a/French/images/banners/day_1_11.png b/French/images/banners/day_1_11.png
new file mode 100644
index 000000000..0c2d60b8b
Binary files /dev/null and b/French/images/banners/day_1_11.png differ
diff --git a/French/images/banners/day_1_12.png b/French/images/banners/day_1_12.png
new file mode 100644
index 000000000..232ac853e
Binary files /dev/null and b/French/images/banners/day_1_12.png differ
diff --git a/French/images/banners/day_1_13.png b/French/images/banners/day_1_13.png
new file mode 100644
index 000000000..488f522e4
Binary files /dev/null and b/French/images/banners/day_1_13.png differ
diff --git a/French/images/banners/day_1_14.png b/French/images/banners/day_1_14.png
new file mode 100644
index 000000000..4c5a568af
Binary files /dev/null and b/French/images/banners/day_1_14.png differ
diff --git a/French/images/banners/day_1_15.png b/French/images/banners/day_1_15.png
new file mode 100644
index 000000000..e3013f62e
Binary files /dev/null and b/French/images/banners/day_1_15.png differ
diff --git a/French/images/banners/day_1_16.png b/French/images/banners/day_1_16.png
new file mode 100644
index 000000000..d11606015
Binary files /dev/null and b/French/images/banners/day_1_16.png differ
diff --git a/French/images/banners/day_1_17.png b/French/images/banners/day_1_17.png
new file mode 100644
index 000000000..69cf7ae65
Binary files /dev/null and b/French/images/banners/day_1_17.png differ
diff --git a/French/images/banners/day_1_18.png b/French/images/banners/day_1_18.png
new file mode 100644
index 000000000..8b693409c
Binary files /dev/null and b/French/images/banners/day_1_18.png differ
diff --git a/French/images/banners/day_1_19.png b/French/images/banners/day_1_19.png
new file mode 100644
index 000000000..2a785c9eb
Binary files /dev/null and b/French/images/banners/day_1_19.png differ
diff --git a/French/images/banners/day_1_2.png b/French/images/banners/day_1_2.png
new file mode 100644
index 000000000..0f6eefb1d
Binary files /dev/null and b/French/images/banners/day_1_2.png differ
diff --git a/French/images/banners/day_1_20.png b/French/images/banners/day_1_20.png
new file mode 100644
index 000000000..befe1fcdf
Binary files /dev/null and b/French/images/banners/day_1_20.png differ
diff --git a/French/images/banners/day_1_21.png b/French/images/banners/day_1_21.png
new file mode 100644
index 000000000..634d1ebec
Binary files /dev/null and b/French/images/banners/day_1_21.png differ
diff --git a/French/images/banners/day_1_22.png b/French/images/banners/day_1_22.png
new file mode 100644
index 000000000..81e33d937
Binary files /dev/null and b/French/images/banners/day_1_22.png differ
diff --git a/French/images/banners/day_1_23.png b/French/images/banners/day_1_23.png
new file mode 100644
index 000000000..ceb032192
Binary files /dev/null and b/French/images/banners/day_1_23.png differ
diff --git a/French/images/banners/day_1_24.png b/French/images/banners/day_1_24.png
new file mode 100644
index 000000000..9c8ec4650
Binary files /dev/null and b/French/images/banners/day_1_24.png differ
diff --git a/French/images/banners/day_1_25.png b/French/images/banners/day_1_25.png
new file mode 100644
index 000000000..60a211eec
Binary files /dev/null and b/French/images/banners/day_1_25.png differ
diff --git a/French/images/banners/day_1_26.png b/French/images/banners/day_1_26.png
new file mode 100644
index 000000000..f187f2c66
Binary files /dev/null and b/French/images/banners/day_1_26.png differ
diff --git a/French/images/banners/day_1_27.png b/French/images/banners/day_1_27.png
new file mode 100644
index 000000000..863706961
Binary files /dev/null and b/French/images/banners/day_1_27.png differ
diff --git a/French/images/banners/day_1_28.png b/French/images/banners/day_1_28.png
new file mode 100644
index 000000000..1858aca15
Binary files /dev/null and b/French/images/banners/day_1_28.png differ
diff --git a/French/images/banners/day_1_29.png b/French/images/banners/day_1_29.png
new file mode 100644
index 000000000..959ee3629
Binary files /dev/null and b/French/images/banners/day_1_29.png differ
diff --git a/French/images/banners/day_1_3.png b/French/images/banners/day_1_3.png
new file mode 100644
index 000000000..1268d2ca6
Binary files /dev/null and b/French/images/banners/day_1_3.png differ
diff --git a/French/images/banners/day_1_30.png b/French/images/banners/day_1_30.png
new file mode 100644
index 000000000..18a77c4b7
Binary files /dev/null and b/French/images/banners/day_1_30.png differ
diff --git a/French/images/banners/day_1_4.png b/French/images/banners/day_1_4.png
new file mode 100644
index 000000000..d5262c6ba
Binary files /dev/null and b/French/images/banners/day_1_4.png differ
diff --git a/French/images/banners/day_1_5.png b/French/images/banners/day_1_5.png
new file mode 100644
index 000000000..21bc08c86
Binary files /dev/null and b/French/images/banners/day_1_5.png differ
diff --git a/French/images/banners/day_1_6.png b/French/images/banners/day_1_6.png
new file mode 100644
index 000000000..dbea5fdd8
Binary files /dev/null and b/French/images/banners/day_1_6.png differ
diff --git a/French/images/banners/day_1_7.png b/French/images/banners/day_1_7.png
new file mode 100644
index 000000000..eff8dac0c
Binary files /dev/null and b/French/images/banners/day_1_7.png differ
diff --git a/French/images/banners/day_1_8.png b/French/images/banners/day_1_8.png
new file mode 100644
index 000000000..ddf900715
Binary files /dev/null and b/French/images/banners/day_1_8.png differ
diff --git a/French/images/banners/day_1_9.png b/French/images/banners/day_1_9.png
new file mode 100644
index 000000000..1cf688b2d
Binary files /dev/null and b/French/images/banners/day_1_9.png differ
diff --git a/French/images/become_patreon.png b/French/images/become_patreon.png
new file mode 100644
index 000000000..7de852e42
Binary files /dev/null and b/French/images/become_patreon.png differ
diff --git a/French/images/comparison_operators.png b/French/images/comparison_operators.png
new file mode 100644
index 000000000..26ccb9130
Binary files /dev/null and b/French/images/comparison_operators.png differ
diff --git a/French/images/console_log_multipl_arguments.png b/French/images/console_log_multipl_arguments.png
new file mode 100644
index 000000000..f324a907e
Binary files /dev/null and b/French/images/console_log_multipl_arguments.png differ
diff --git a/French/images/date_time_object.png b/French/images/date_time_object.png
new file mode 100644
index 000000000..c5297c747
Binary files /dev/null and b/French/images/date_time_object.png differ
diff --git a/French/images/day_1.png b/French/images/day_1.png
new file mode 100644
index 000000000..7daf57f71
Binary files /dev/null and b/French/images/day_1.png differ
diff --git a/French/images/day_1_1.png b/French/images/day_1_1.png
new file mode 100644
index 000000000..dd583c719
Binary files /dev/null and b/French/images/day_1_1.png differ
diff --git a/French/images/download_node.png b/French/images/download_node.png
new file mode 100644
index 000000000..f290b201f
Binary files /dev/null and b/French/images/download_node.png differ
diff --git a/French/images/google_chrome.png b/French/images/google_chrome.png
new file mode 100644
index 000000000..af06acdee
Binary files /dev/null and b/French/images/google_chrome.png differ
diff --git a/French/images/install_node.png b/French/images/install_node.png
new file mode 100644
index 000000000..e5aecf121
Binary files /dev/null and b/French/images/install_node.png differ
diff --git a/French/images/js_code_on_chrome_console.png b/French/images/js_code_on_chrome_console.png
new file mode 100644
index 000000000..7d6002c9f
Binary files /dev/null and b/French/images/js_code_on_chrome_console.png differ
diff --git a/French/images/js_code_vscode.png b/French/images/js_code_vscode.png
new file mode 100644
index 000000000..6e1a66148
Binary files /dev/null and b/French/images/js_code_vscode.png differ
diff --git a/French/images/launched_on_new_tab.png b/French/images/launched_on_new_tab.png
new file mode 100644
index 000000000..ed377dcf8
Binary files /dev/null and b/French/images/launched_on_new_tab.png differ
diff --git a/French/images/local_storage.png b/French/images/local_storage.png
new file mode 100644
index 000000000..087685299
Binary files /dev/null and b/French/images/local_storage.png differ
diff --git a/French/images/multiple_script.png b/French/images/multiple_script.png
new file mode 100644
index 000000000..caa067f34
Binary files /dev/null and b/French/images/multiple_script.png differ
diff --git a/French/images/opening_chrome_console_shortcut.png b/French/images/opening_chrome_console_shortcut.png
new file mode 100644
index 000000000..eace03f05
Binary files /dev/null and b/French/images/opening_chrome_console_shortcut.png differ
diff --git a/French/images/opening_developer_tool.png b/French/images/opening_developer_tool.png
new file mode 100644
index 000000000..6eb33ddb4
Binary files /dev/null and b/French/images/opening_developer_tool.png differ
diff --git a/French/images/opening_project_on_vscode.png b/French/images/opening_project_on_vscode.png
new file mode 100644
index 000000000..908c8fd72
Binary files /dev/null and b/French/images/opening_project_on_vscode.png differ
diff --git a/French/images/paypal_lg.png b/French/images/paypal_lg.png
new file mode 100644
index 000000000..cc2a45a1d
Binary files /dev/null and b/French/images/paypal_lg.png differ
diff --git a/French/images/projects/congratulations.gif b/French/images/projects/congratulations.gif
new file mode 100644
index 000000000..cddd6c4b5
Binary files /dev/null and b/French/images/projects/congratulations.gif differ
diff --git a/French/images/projects/dom_min_project_30DaysOfJavaScript_color_changing_day_9.1.gif b/French/images/projects/dom_min_project_30DaysOfJavaScript_color_changing_day_9.1.gif
new file mode 100644
index 000000000..c8d2f2b01
Binary files /dev/null and b/French/images/projects/dom_min_project_30DaysOfJavaScript_color_changing_day_9.1.gif differ
diff --git a/French/images/projects/dom_min_project_bar_graph_day_5.1.gif b/French/images/projects/dom_min_project_bar_graph_day_5.1.gif
new file mode 100644
index 000000000..a7d796201
Binary files /dev/null and b/French/images/projects/dom_min_project_bar_graph_day_5.1.gif differ
diff --git a/French/images/projects/dom_min_project_bar_graph_day_5.1.png b/French/images/projects/dom_min_project_bar_graph_day_5.1.png
new file mode 100644
index 000000000..0b6ccf7a5
Binary files /dev/null and b/French/images/projects/dom_min_project_bar_graph_day_5.1.png differ
diff --git a/French/images/projects/dom_min_project_challenge_info_day_1.1.gif b/French/images/projects/dom_min_project_challenge_info_day_1.1.gif
new file mode 100644
index 000000000..055177117
Binary files /dev/null and b/French/images/projects/dom_min_project_challenge_info_day_1.1.gif differ
diff --git a/French/images/projects/dom_min_project_challenge_info_day_1.1.png b/French/images/projects/dom_min_project_challenge_info_day_1.1.png
new file mode 100644
index 000000000..01a8d4f9c
Binary files /dev/null and b/French/images/projects/dom_min_project_challenge_info_day_1.1.png differ
diff --git a/French/images/projects/dom_min_project_countries_aray_day_2.2.png b/French/images/projects/dom_min_project_countries_aray_day_2.2.png
new file mode 100644
index 000000000..ca0e3448a
Binary files /dev/null and b/French/images/projects/dom_min_project_countries_aray_day_2.2.png differ
diff --git a/French/images/projects/dom_min_project_day_7.1.gif b/French/images/projects/dom_min_project_day_7.1.gif
new file mode 100644
index 000000000..51bdadb69
Binary files /dev/null and b/French/images/projects/dom_min_project_day_7.1.gif differ
diff --git a/French/images/projects/dom_min_project_day_number_generators_2.1.png b/French/images/projects/dom_min_project_day_number_generators_2.1.png
new file mode 100644
index 000000000..d69a6c208
Binary files /dev/null and b/French/images/projects/dom_min_project_day_number_generators_2.1.png differ
diff --git a/French/images/projects/dom_min_project_keycode_day_3.2.gif b/French/images/projects/dom_min_project_keycode_day_3.2.gif
new file mode 100644
index 000000000..7c75c14cf
Binary files /dev/null and b/French/images/projects/dom_min_project_keycode_day_3.2.gif differ
diff --git a/French/images/projects/dom_min_project_number_generator_day_3.1.gif b/French/images/projects/dom_min_project_number_generator_day_3.1.gif
new file mode 100644
index 000000000..59a8dd073
Binary files /dev/null and b/French/images/projects/dom_min_project_number_generator_day_3.1.gif differ
diff --git a/French/images/projects/dom_min_project_solar_system_day_4.1.gif b/French/images/projects/dom_min_project_solar_system_day_4.1.gif
new file mode 100644
index 000000000..d88b04b9b
Binary files /dev/null and b/French/images/projects/dom_min_project_solar_system_day_4.1.gif differ
diff --git a/French/images/projects/dom_min_project_solar_system_day_4.1.mkv b/French/images/projects/dom_min_project_solar_system_day_4.1.mkv
new file mode 100644
index 000000000..1ed941c53
Binary files /dev/null and b/French/images/projects/dom_min_project_solar_system_day_4.1.mkv differ
diff --git a/French/images/projects/dom_min_project_solar_system_day_4.1.mp4 b/French/images/projects/dom_min_project_solar_system_day_4.1.mp4
new file mode 100644
index 000000000..69ce9368c
Binary files /dev/null and b/French/images/projects/dom_min_project_solar_system_day_4.1.mp4 differ
diff --git a/French/images/projects/dom_mini_project_challenge_info_day_2.3.gif b/French/images/projects/dom_mini_project_challenge_info_day_2.3.gif
new file mode 100644
index 000000000..571ea6f14
Binary files /dev/null and b/French/images/projects/dom_mini_project_challenge_info_day_2.3.gif differ
diff --git a/French/images/projects/dom_mini_project_challenge_info_day_2.3.png b/French/images/projects/dom_mini_project_challenge_info_day_2.3.png
new file mode 100644
index 000000000..3387beaaa
Binary files /dev/null and b/French/images/projects/dom_mini_project_challenge_info_day_2.3.png differ
diff --git a/French/images/projects/dom_mini_project_countries_day_6.1.gif b/French/images/projects/dom_mini_project_countries_day_6.1.gif
new file mode 100644
index 000000000..8a8f09a90
Binary files /dev/null and b/French/images/projects/dom_mini_project_countries_day_6.1.gif differ
diff --git a/French/images/projects/dom_mini_project_countries_object_day_10.1.gif b/French/images/projects/dom_mini_project_countries_object_day_10.1.gif
new file mode 100644
index 000000000..03b1e359d
Binary files /dev/null and b/French/images/projects/dom_mini_project_countries_object_day_10.1.gif differ
diff --git a/French/images/projects/dom_mini_project_form_validation_day_10.2.1.png b/French/images/projects/dom_mini_project_form_validation_day_10.2.1.png
new file mode 100644
index 000000000..9d2c2b3f6
Binary files /dev/null and b/French/images/projects/dom_mini_project_form_validation_day_10.2.1.png differ
diff --git a/French/images/projects/dom_mini_project_form_validation_day_10.2.png b/French/images/projects/dom_mini_project_form_validation_day_10.2.png
new file mode 100644
index 000000000..ca7cdd512
Binary files /dev/null and b/French/images/projects/dom_mini_project_form_validation_day_10.2.png differ
diff --git a/French/images/projects/dom_mini_project_leaderboard_day_8.1.gif b/French/images/projects/dom_mini_project_leaderboard_day_8.1.gif
new file mode 100644
index 000000000..789d0cb7c
Binary files /dev/null and b/French/images/projects/dom_mini_project_leaderboard_day_8.1.gif differ
diff --git a/French/images/projects/dom_mini_project_leaderboard_day_8.1.png b/French/images/projects/dom_mini_project_leaderboard_day_8.1.png
new file mode 100644
index 000000000..2956fa095
Binary files /dev/null and b/French/images/projects/dom_mini_project_leaderboard_day_8.1.png differ
diff --git a/French/images/projects/dom_mini_project_slider_day_7.1.gif b/French/images/projects/dom_mini_project_slider_day_7.1.gif
new file mode 100644
index 000000000..51bdadb69
Binary files /dev/null and b/French/images/projects/dom_mini_project_slider_day_7.1.gif differ
diff --git a/French/images/raising_syntax_error.png b/French/images/raising_syntax_error.png
new file mode 100644
index 000000000..81f6245e4
Binary files /dev/null and b/French/images/raising_syntax_error.png differ
diff --git a/French/images/regex.png b/French/images/regex.png
new file mode 100644
index 000000000..c7116b4dd
Binary files /dev/null and b/French/images/regex.png differ
diff --git a/French/images/running_script.png b/French/images/running_script.png
new file mode 100644
index 000000000..deac13de2
Binary files /dev/null and b/French/images/running_script.png differ
diff --git a/French/images/scripts_on_vscode.png b/French/images/scripts_on_vscode.png
new file mode 100644
index 000000000..f6257be52
Binary files /dev/null and b/French/images/scripts_on_vscode.png differ
diff --git a/French/images/string_indexes.png b/French/images/string_indexes.png
new file mode 100644
index 000000000..cc2f6389c
Binary files /dev/null and b/French/images/string_indexes.png differ
diff --git a/French/images/vsc_live_server.png b/French/images/vsc_live_server.png
new file mode 100644
index 000000000..75509f290
Binary files /dev/null and b/French/images/vsc_live_server.png differ
diff --git a/French/images/vscode.png b/French/images/vscode.png
new file mode 100644
index 000000000..724fc109d
Binary files /dev/null and b/French/images/vscode.png differ
diff --git a/French/images/vscode_ui.png b/French/images/vscode_ui.png
new file mode 100644
index 000000000..7210a088e
Binary files /dev/null and b/French/images/vscode_ui.png differ
diff --git a/French/images/web_storage.png b/French/images/web_storage.png
new file mode 100644
index 000000000..46f9311d9
Binary files /dev/null and b/French/images/web_storage.png differ
diff --git a/French/readMe.md b/French/readMe.md
new file mode 100644
index 000000000..5b52e7e25
--- /dev/null
+++ b/French/readMe.md
@@ -0,0 +1,683 @@
+# 30 jours de JavaScript
+
+| # Jours | Tables des matières |
+| ----- | :-------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 01 | [Introduction](./readMe.md) |
+| 02 | [Les types de données](./02_Day_Data_types/02_day_data_types.md) |
+| 03 | [Booléens, Opérateurs, Date](./03_Day_Booleans_operators_date/03_booleans_operators_date.md) |
+| 04 | [Les conditions](./04_Day_Conditionals/04_day_conditionals.md) |
+| 05 | [Les tableaux (Arrays)](./05_Day_Arrays/05_day_arrays.md) |
+| 06 | [Les boucles](./06_Day_Loops/06_day_loops.md) |
+| 07 | [Les fonctions](./07_Day_Functions/07_day_functions.md) |
+| 08 | [Les objets](./08_Day_Objects/08_day_objects.md) |
+| 09 | [Les fonctions d'ordre supérieur](./09_Day_Higher_order_functions/09_day_higher_order_functions.md) |
+| 10 | [Set et Map](./10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md) |
+| 11 | [La déstructuration et propagation](./11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md) |
+| 12 | [Les expressions régulières](./12_Day_Regular_expressions/12_day_regular_expressions.md) |
+| 13 | [Les méthodes de objet console. ](./13_Day_Console_object_methods/13_day_console_object_methods.md) |
+| 14 | [Gestion des erreurs](./14_Day_Error_handling/14_day_error_handling.md) |
+| 15 | [Les classes](./15_Day_Classes/15_day_classes.md) |
+| 16 | [JSON](./16_Day_JSON/16_day_json.md) |
+| 17 | [Stockages Web](./17_Day_Web_storages/17_day_web_storages.md) |
+| 18 | [Les promesses](./18_Day_Promises/18_day_promises.md) |
+| 19 | [Fermeture (Closure)](./19_Day_Closures/19_day_closures.md) |
+| 20 | [Écrire un code propre](./20_Day_Writing_clean_codes/20_day_writing_clean_codes.md) |
+| 21 | [DOM](./21_Day_DOM/21_day_dom.md) |
+| 22 | [Manipulation de l'objet DOM](./22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md) |
+| 23 | [Écouteurs d'événements](./23_Day_Event_listeners/23_day_event_listeners.md) |
+| 24 | [Mini projet : Système solaire](./24_Day_Project_solar_system/24_day_project_solar_system.md) |
+| 25 | [Mini projet : Visualisation des données sur les pays du monde 1](./25_Day_World_countries_data_visualization_1/25_day_world_countries_data_visualization_1.md) |
+| 26 | [Mini projet : Visualisation des données sur les pays du monde 2](./26_Day_World_countries_data_visualization_2/26_day_world_countries_data_visualization_2.md) |
+| 27 | [Mini Projet: Portfolio](./27_Day_Mini_project_portfolio/27_day_mini_project_portfolio.md) |
+| 28 | [Mini Projet: Tableau de bord](./28_Day_Mini_project_leaderboard/28_day_mini_project_leaderboard.md) |
+| 29 | [Mini Projet: Animation des caractère ](./29_Day_Mini_project_animating_characters/29_day_mini_project_animating_characters.md) |
+| 30 | [Les projets finals](./30_Day_Mini_project_final/30_day_mini_project_final.md) |
+
+🧡🧡🧡 BON CODAGE 🧡🧡🧡
+
+
+Soutenir l'auteur pour qu'il crée davantage de supports pédagogiques
+
+
+
+
+[Jour 2 >>](./02_Day_Data_types/02_day_data_types.md)
+
+
+
+- [30 jours de JavaScript](#30-jours-de-javascript)
+- [📔 Jour 1](#-jour-1)
+ - [Introduction](#introduction)
+ - [Les éxigences](#les-éxigences)
+ - [Configuration](#configuration)
+ - [Installation de Node.js](#installation-de--nodejs)
+ - [Navigateur](#navigateur)
+ - [Installation de Google Chrome](#installation-de--google-chrome)
+ - [Ouverture de la console Google Chrome](#ouverture-de-la-console-google-chrome)
+ - [Écrire du code sur la console du navigateur](#écrire-du-code-sur-la-console-du-navigateur)
+ - [Console.log](#consolelog)
+ - [Console.log avec plusieurs arguments](#consolelog-avec-plusieurs-arguments)
+ - [Comments](#comments)
+ - [Syntaxe](#syntaxe)
+ - [AArithmétique](#aarithmétique)
+ - [Editeur de code](#editeur-de-code)
+ - [Installation de Visual Studio Code](#installation-de--visual-studio-code)
+ - [Comment utiliser Visual Studio Code](#comment-utiliser-visual-studio-code)
+ - [Ajout de JavaScript à une page Web](#ajout-de-javascript-à-une-page-web)
+ - [Script en ligne](#script-en-ligne)
+ - [Script interne](#script-interne)
+ - [Script externe](#script-externe)
+ - [Multiple External Scripts](#multiple-external-scripts)
+ - [Introduction aux types de données](#introduction-aux-types-de-données)
+ - [Les nombres](#les-nombres)
+ - [Les chaîne de caractère](#les-chaîne-de-caractère)
+ - [Booléens](#booléens)
+ - [Indéfini(Undefined)](#indéfiniundefined)
+ - [Null](#null)
+ - [Vérification des types de données](#vérification-des-types-de-données)
+ - [Encore des commentaires](#encore-des-commentaires)
+ - [Variables](#variables)
+- [💻 Day 1: Exercises](#-day-1-exercises)
+
+# 📔 Jour 1
+
+## Introduction
+
+**Félicitations** en décidant de participer au défi des 30 jours de programmation JavaScript. Dans ce défi, vous apprendrez tout ce dont vous avez besoin pour être un programmeur JavaScript, et en général, tout le concept de la programmation. À la fin du défi, vous recevrez un certificat d'achèvement du défi de programmation 30DaysOfJavaScript. Si vous avez besoin d'aide ou si vous souhaitez aider d'autres personnes, vous pouvez rejoindre le groupe de discussion dédié. [groupe telegram ](https://t.me/ThirtyDaysOfJavaScript).
+
+**30 jours de JavaScript** challenge est un guide pour les débutants et les développeurs avancés en JavaScript. Bienvenue à JavaScript. JavaScript est le langage du web. J'aime utiliser et enseigner JavaScript et j'espère que vous en ferez autant.
+
+Dans ce défi JavaScript pas à pas, vous apprendrez JavaScript, le langage de programmation le plus populaire de l'histoire de l'humanité. JavaScript est utilisé **_pour ajouter de l'interactivité aux sites web, pour développer des applications mobiles, des applications de bureau, des jeux, etc._** et aujourd'hui, JavaScript peut être utilisé pour **la programmation côté serveur**, **_l'apprentissage automatique_** and **_l'intelligence artificielle _**.
+
+**_JavaScript (JS)_** a gagné en popularité au cours des dernières années et est le langage de programmation le plus utilisé dans le monde.
+depuis dix ans et est le langage de programmation le plus utilisé sur GitHub.
+
+Ce défi est facile à lire, écrit dans un français facile, engageant, motivant et en même temps, il est très exigeant. Vous devez consacrer beaucoup de temps à la réalisation de ce défi. Si vous êtes un apprenant visuel, vous pouvez obtenir la leçon vidéo sur Washera Chaîne YouTube. Abonnez-vous à la chaîne, commentez et posez des questions sur les vidéos YouTube et soyez proactif, l'auteur finira par vous remarquer.
+
+L'auteur aimerait connaître votre opinion sur le défi, partager l'auteur en exprimant vos pensées sur le défi 30 jours de JavaScript. Vous pouvez laisser votre témoignage sur cette page [link](https://www.asabeneh.com/testimonials)
+
+## Les éxigences
+
+No prior knowledge of programming is required to follow this challenge. You need only:
+
+1. La motivation
+2. Un ordinateur
+3. La connexion internet
+4. Un navigateur
+5. Un editeur de code
+
+## Configuration
+
+I believe you have the motivation and a strong desire to be a developer, a computer and Internet. If you have those, then you have everything to get started.
+
+### Installation de Node.js
+
+Vous n'avez peut-être pas besoin de Node.js pour l'instant, mais vous pourriez en avoir besoin plus tard. Installer [node.js](https://nodejs.org/en/).
+
+
+
+Après le téléchargement, double-cliquez et installez
+
+
+
+Nous pouvons vérifier si le nœud est installé sur notre machine locale en ouvrant le terminal de notre appareil ou l'invite de commande.
+
+```sh
+asabeneh $ node -v
+v12.14.0
+```
+
+Lors de la création de ce didacticiel, j'utilisais Node version 12.14.0, mais maintenant la version recommandée de Node.js pour le téléchargement est v14.17.6, au moment où vous utilisez ce matériel, vous pouvez avoir une version Node.js supérieure.
+### Navigateur
+
+Il existe de nombreux navigateurs. Cependant, je recommande fortement Google Chrome.
+
+#### Installation de Google Chrome
+
+Installer [Google Chrome](https://www.google.com/chrome/) si vous n'en avez pas encore. Nous pouvons écrire du petit code JavaScript sur la console du navigateur, mais nous n'utilisons pas la console du navigateur pour développer des applications.
+
+
+
+#### Ouverture de la console Google Chrome
+
+Vous pouvez ouvrir la console Google Chrome en cliquant sur trois points dans le coin supérieur droit du navigateur, en sélectionnant Plus d'outils -> Outils de développement ou en utilisant un raccourci clavier. Je préfère utiliser des raccourcis.
+
+
+Pour ouvrir la console Chrome à l'aide d'un raccourci clavier.
+
+```sh
+Mac
+Command+Option+J
+
+Windows/Linux:
+Ctl+Shift+J
+```
+
+
+
+Après avoir ouvert la console Google Chrome, essayez d'explorer les boutons marqués. Nous passerons la plupart du temps sur la console. La console est l'endroit où va votre code JavaScript. Le moteur Google Console V8 transforme votre code JavaScript en code machine. Écrivons un code JavaScript sur la console Google Chrome :
+
+
+
+#### Écrire du code sur la console du navigateur
+
+Nous pouvons écrire n'importe quel code JavaScript sur la console Google ou sur n'importe quelle console de navigateur. Cependant, pour ce défi, nous nous concentrons uniquement sur la console Google Chrome. Ouvrez la console en utilisant :
+
+```sh
+Mac
+Command+Option+I
+
+Windows:
+Ctl+Shift+I
+```
+
+##### Console.log
+
+Pour écrire notre premier code JavaScript, nous avons utilisé une fonction intégrée **console.log()**. Nous avons passé un argument en tant que données d'entrée et la fonction affiche la sortie. Nous avons passé `'Hello, World'` acomme données d'entrée ou argument dans la fonction console.log().
+
+```js
+console.log('Hello, World!')
+```
+
+##### Console.log avec plusieurs arguments
+
+La fonction **`console.log()`** peut prendre plusieurs paramètres séparés par des virgules. La syntaxe ressemble à ceci:**`console.log(param1, param2, param3)`**
+
+
+
+```js
+console.log('Hello', 'World', '!')
+console.log('HAPPY', 'NEW', 'YEAR', 2020)
+console.log('Welcome', 'to', 30, 'Days', 'Of', 'JavaScript')
+```
+
+Comme vous pouvez le voir dans l'extrait de code ci-dessus, _`console.log()`_ peut prendre plusieurs arguments..
+
+Toutes nos félicitations! Vous avez écrit votre premier code JavaScript en utilisant _`console.log()`_.
+
+##### Comments
+
+Nous pouvons ajouter des commentaires à notre code. Les commentaires sont très importants pour rendre le code plus lisible et pour laisser des remarques dans notre code. JavaScript n'exécute pas la partie commentaire de notre code. En JavaScript, toute ligne de texte commençant par // en JavaScript est un commentaire, et tout ce qui est inclus comme cec `//` est également un commentaire.
+
+
+**Example: Commentaire sur une seule lignet**
+
+```js
+// Ceci est le premier commentaire
+// Voici le deuxième commentaire
+// Je suis un commentaire d'une seule ligne
+```
+
+**Example: Commentaire multiligne**
+
+```js
+/*
+Il s'agit d'un commentaire multiligne
+ Les commentaires multilignes peuvent prendre plusieurs lignes
+ JavaScript est le langage du web
+ */
+```
+
+##### Syntaxe
+
+Les langages de programmation sont similaires aux langages humains. L'anglais ou d'autres langues utilisent des mots, des expressions, des phrases, des phrases composées et bien d'autres choses encore pour transmettre un message significatif. En anglais, le terme syntaxe signifie _la disposition des mots et des phrases pour créer des phrases bien formées dans une langue_. La définition technique de la syntaxe est la structure des énoncés dans un langage informatique. Les langages de programmation ont une syntaxe. JavaScript est un langage de programmation et, comme les autres langages de programmation, il possède sa propre syntaxe. Si nous n'écrivons pas une syntaxe que JavaScript comprend, il produira différents types d'erreurs. Nous étudierons les différents types d'erreurs JavaScript plus tard. Pour l'instant, voyons les erreurs de syntaxe.
+
+
+
+J'ai fait une erreur délibérée. En conséquence, la console signale des erreurs de syntaxe. En fait, la syntaxe est très informative. Elle indique le type d'erreur commise. En lisant le guide de retour d'erreur, nous pouvons corriger la syntaxe et résoudre le problème. Le processus d'identification et de suppression des erreurs d'un programme s'appelle le débogage. Corrigeons les erreurs :
+
+```js
+console.log('Hello, World!')
+console.log('Hello, World!')
+```
+
+Jusqu'à présent, nous avons vu comment afficher du texte à l'aide de l'extension _`console.log()`_. Si nous imprimons du texte ou une chaîne en utilisant _`console.log()`_, texte doit être à l'intérieur des guillemets simples, des guillemets doubles ou d'un backtick.
+**Example:**
+
+```js
+console.log('Hello, World!')
+console.log("Hello, World!")
+console.log(`Hello, World!`)
+```
+
+#### AArithmétique
+
+Maintenant, pratiquons davantage l'écriture de codes JavaScript à l'aide _`console.log()`_ ode la console Google Chrome pour les types de données numériques. En plus du texte, nous pouvons également effectuer des calculs mathématiques en utilisant JavaScript. Faisons les calculs simples suivants. Il est possible d'écrire du code JavaScript sur la console Google Chrome directement sans la fonction. **_`console.log()`_** Cependant, il est inclus dans cette introduction car la majeure partie de ce défi se déroulerait dans un éditeur de texte où l'utilisation de la fonction serait obligatoire. Vous pouvez jouer directement avec les instructions sur la console.
+
+
+```js
+console.log(2 + 3) // Addition
+console.log(3 - 2) // Soustraction
+console.log(2 * 3) // Multiplication
+console.log(3 / 2) // Division
+console.log(3 % 2) // Modulo - trouver le reste
+console.log(3 ** 2) // Exponentiation 3 ** 2 == 3 * 3
+```
+
+### Editeur de code
+
+Nous pouvons écrire nos codes sur la console du navigateur, mais ce ne sera pas pour des projets plus importants. Dans un environnement de travail réel, les développeurs utilisent différents éditeurs de code pour écrire leurs codes. Dans ce défi des 30 jours de JavaScript, nous utiliserons Visual Studio Code.
+
+#### Installation de Visual Studio Code
+
+Visual Studio Code est un éditeur de texte open-source très populaire. Je recommande [download Visual Studio Code](https://code.visualstudio.com/), mais si vous êtes en faveur d'autres éditeurs, n'hésitez pas à suivre avec ce que vous avez.
+
+
+
+Si vous avez installé Visual Studio Code, commençons à l'utiliser.
+
+#### Comment utiliser Visual Studio Code
+
+Ouvrez Visual Studio Code en double-cliquant sur son icône. Lorsque vous l'ouvrez, vous obtenez ce type d'interface. Essayez d'interagir avec les icônes étiquetées.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Ajout de JavaScript à une page Web
+
+JavaScript can be added to a web page in three different ways:
+
+- **_Script en ligne_**
+- **_Script interne_**
+- **_Script externe_**
+- **_Multiples scripts externes_**
+
+Les sections suivantes présentent différentes manières d'ajouter du code JavaScript à votre page web.
+
+### Script en ligne
+
+Créez un dossier de projet sur votre bureau ou à n'importe quel endroit, nommez-le 30DaysOfJS et créez un fichier **_`index.html`_** dans le dossier du projet. Collez ensuite le code suivant et ouvrez-le dans un navigateur, par exemple[Chrome](https://www.google.com/chrome/).
+
+```html
+
+
+
+ 30 Jour de javascript:Script en ligne
+
+
+
+
+
+```
+
+Vous venez d'écrire votre premier script en ligne. Nous pouvons créer un message d'alerte contextuel à l'aide de la fonction _`alert()`_ fonction intégrée.
+
+### Script interne
+
+Le script interne peut être écrit dans le fichier_`head`_ ou dans le _`body`_, mais il est préférable de le placer dans le corps du document HTML.
+Commençons par écrire dans l'en-tête de la page.
+
+```html
+
+
+
+ 30 Jour de javascript:Script en ligne
+
+
+
+
+```
+
+C'est ainsi que nous écrivons un script interne la plupart du temps. L'écriture du code JavaScript dans le corps du texte est la meilleure option. Ouvrez la console du navigateur pour voir la sortie du code JavaScript. `console.log()`.
+
+```html
+
+
+
+ 30 Jour de javascript:Script en ligne
+
+
+
+
+
+
+```
+
+Ouvrez la console du navigateur pour voir le résultat de l'opération. `console.log()`.
+
+
+
+### Script externe
+
+Comme pour le script interne, le lien vers le script externe peut être placé dans l'en-tête ou dans le corps du texte, mais il est préférable de le placer dans le corps du texte.
+Tout d'abord, nous devons créer un fichier JavaScript externe avec l'extension .js. Tous les fichiers se terminant par l'extension .js sont des fichiers JavaScript. Créez un fichier nommé introduction.js dans le répertoire de votre projet, écrivez le code suivant et liez ce fichier .js au bas du corps du texte.
+
+```js
+console.log('Bienvenue dans 30 jours de JavaScript!')
+```
+
+Les scripts externes dans le _head_:
+
+```html
+
+
+
+ 30 Jour de javascript:Script externe
+
+
+
+
+```
+
+Les scripts externes dans le _body_:
+
+```html
+
+
+
+ 30 Jour de javascript:Script externe/title>
+
+
+
+
+
+
+
+```
+
+
+
+Ouvrez la console du navigateur pour voir le résultat de la commande`console.log()`.
+
+### Multiple External Scripts
+
+Nous pouvons également lier plusieurs fichiers JavaScript externes à une page web.
+Créer un fichier `helloworld.js` dans le dossier 30DaysOfJS et écrivez le code suivant.
+
+```js
+console.log('Hello, World!')
+```
+
+```html
+
+
+
+ Multiple External Scripts
+
+
+
+
+
+
+```
+
+_Votre fichier main.js doit être placé en dessous de tous les autres fichiers scripts_. Il est très important de s'en souvenir.
+
+
+
+## Introduction aux types de données
+
+En JavaScript et dans d'autres langages de programmation, il existe différents types de données. Voici les types de données primitives en JavaScript: _Chaine de caractère, Nombre, Booleen, undefined, Null_, et _Symbol_.
+
+### Les nombres
+
+- Nombres entiers : Nombres entiers (négatifs, nuls et positifs)
+ Exemple
+ ... -3, -2, -1, 0, 1, 2, 3 ...
+- Nombres à virgule flottante : Nombre décimal
+ Exemple
+ ... -3.5, -2.25, -1.0, 0.0, 1.1, 2.2, 3.5 ...
+
+### Les chaîne de caractère
+
+Ensemble d'un ou plusieurs caractères compris entre deux guillemets simples, deux guillemets doubles ou deux barres obliques.
+
+**Exemple:**
+
+```js
+'a'
+'Asabeneh'
+"Asabeneh"
+'Finland'
+'JavaScript est un beau langage de programmation'
+'J\'aime enseigner'
+'J\'espère que vous appréciez ce premier jour'
+`Nous pouvons également créer une chaîne de caractères à l'aide d'un backtick`
+'Une chaîne de caractères peut être aussi petite qu\'un seul caractère ou aussi grande que plusieurs pages.'
+'Tout type de données placé sous un guillemet simple, un guillemet double ou une coche est une chaîne de caractères.'
+```
+
+### Booléens
+
+Une valeur booléenne est soit vraie, soit fausse. Toute comparaison renvoie une valeur booléenne, qui est soit vraie, soit fausse.
+Un type de données booléen est soit une valeur vraie, soit une valeur fausse.
+
+**Exemple:**
+
+```js
+true // si la lumière est allumée, la valeur est vraie
+false // si la lumière est éteinte, la valeur est fausse
+```
+
+### Indéfini(Undefined)
+
+En JavaScript, si nous n'attribuons pas de valeur à une variable, cette valeur est indéfinie. En outre, si une fonction ne renvoie rien, elle renvoie une valeur indéfinie.
+
+```js
+let firstName
+console.log(firstName) // indéfini, car il n'est pas encore affecté à une valeur
+```
+
+### Null
+
+Null en JavaScript signifie une valeur vide.
+
+```js
+let emptyValue = null
+```
+
+## Vérification des types de données
+
+Pour vérifier le type de données d'une certaine variable, nous utilisons la fonction **typeof** de l'opérateur. Voir l'exemple suivant.
+
+```js
+console.log(typeof 'Asabeneh') // chaîne de caractère
+console.log(typeof 5) // nombre
+console.log(typeof true) // booléen
+console.log(typeof null) // type object
+console.log(typeof undefined) // undefini
+```
+
+## Encore des commentaires
+
+Rappelez-vous que les commentaires en JavaScript sont similaires à ceux des autres langages de programmation. Les commentaires sont importants pour rendre votre code plus lisible.
+Il existe deux façons de commenter :
+
+- _Commentaire sur une seule ligne_
+- _Commentaires multilignes_
+
+```js
+// commenter le code lui-même avec un seul commentaire
+// let firstName = 'Asabeneh'; commentaire sur une seule ligne
+// let lastName = 'Yetayeh'; commentaire sur une seule ligne
+```
+
+Commentaires en plusieurs lignes :
+
+```js
+/*
+ let location = 'Helsinki';
+ let age = 100;
+ let isMarried = true;
+ Il s'agit d'un commentaire de plusieurs lignes
+*/
+```
+
+## Variables
+
+Les variables sont des _conteneurs_ of data. Les variables sont utilisées pour _stocker_ des données dans un emplacement de mémoire. Lorsqu'une variable est déclarée, un emplacement mémoire est réservé. Lorsqu'une variable est affectée à une valeur (données), l'espace mémoire sera rempli avec ces données. Pour déclarer une variable, on utilise_var_, _let_, or _const_ keywords.
+
+Pour une variable qui change à un autre moment, nous utilisons_let_. _const_. Si les données ne changent pas du tout, nous utilisons l'exemple suivant, PI, nom de pays, ne changent pas, et nous pouvons utiliser _const_.
+
+Nous n'utiliserons pas _var_ dans ce défi et je ne vous recommande pas de l'utiliser. C'est une façon de déclarer une variable qui peut être source d'erreurs et qui comporte de nombreuses fuites. Nous parlerons plus en détail de var, let et const dans d'autres sections (scope). Pour l'instant, l'explication ci-dessus est suffisante.
+
+Un nom de variable JavaScript valide doit respecter les règles suivantes :
+
+- Le nom d'une variable JavaScript ne doit pas commencer par un chiffre.
+- Le nom d'une variable JavaScript n'autorise pas les caractères spéciaux, à l'exception du signe du dollar et du trait de soulignement.
+- Le nom d'une variable JavaScript suit la convention camelCase.
+- Le nom d'une variable JavaScript ne doit pas comporter d'espace entre les mots.
+
+Voici des exemples de variables JavaScript valides.
+
+```js
+firstName
+lastName
+country
+city
+capitalCity
+age
+isMarried
+
+first_name
+last_name
+is_married
+capital_city
+
+num1
+num_1
+_num_1
+$num1
+year2020
+year_2020
+```
+
+La première et la deuxième variables de la liste suivent la convention camelCase de déclaration en JavaScript. Dans ce document, nous utiliserons des variables en camelCase (camelWithOneHump). Nous utilisons la camelCase (camelWithTwoHump) pour déclarer les classes, nous discuterons des classes et des objets dans d'autres sections.
+
+Exemple de variables non valides :
+
+```js
+ first-name
+ 1_num
+ num_#_1
+```
+
+Déclarons des variables avec différents types de données. Pour déclarer une variable, nous devons utiliser _let_ or _const_ avant le nom de la variable. Après le nom de la variable, on écrit un signe égal (opérateur d'affectation), et une valeur (donnée affectée).
+
+```js
+// Syntax
+let nameOfVariable = value
+```
+
+Le nom de l'objet est le nom qui stocke les différentes données de la valeur. Voir ci-dessous pour des exemples détaillés.
+
+**Exemples de variables déclarées**
+
+```js
+// Déclarer différentes variables de différents types de données
+let firstName = 'Asabeneh' // prénom d'une personne
+let lastName = 'Yetayeh' // nom de famille d'une personne
+let country = 'Finland' // pays
+let city = 'Helsinki' // capitale
+let age = 100 // age
+let isMarried = true
+
+console.log(firstName, lastName, country, city, age, isMarried)
+```
+
+```sh
+Asabeneh Yetayeh Finland Helsinki 100 true
+```
+
+```js
+// Declaring variables with number values
+let age = 100 // age in years
+const gravity = 9.81 // earth gravity in m/s2
+const boilingPoint = 100 // water boiling point, temperature in °C
+const PI = 3.14 // geometrical constant
+console.log(gravity, boilingPoint, PI)
+```
+
+```sh
+9.81 100 3.14
+```
+
+```js
+// Les variables peuvent également être déclarées sur une seule ligne séparée par une virgule, mais je recommande d'utiliser une ligne séparée pour rendre le code plus lisible.
+let name = 'Asabeneh', job = 'teacher', live = 'Finland'
+console.log(name, job, live)
+```
+
+```sh
+Asabeneh teacher Finland
+```
+
+Lorsque vous exécutez _index.html_ dans le fichier 01-Jour vous devriez obtenir ceci:
+
+
+
+🌕 Vous êtes extraordinaire ! Vous venez de relever le défi du premier jour et vous êtes sur la voie de la grandeur. Maintenant, fais quelques exercices pour ton cerveau et tes muscles.
+
+# 💻 Day 1: Exercises
+
+1. Rédigez un commentaire d'une seule ligne qui dit, _les commentaires rendent le code plus lisible_
+2. Rédigez un autre commentaire unique qui dit, _Bienvenue dans 30 jours de JavaScript_
+3. Rédigez un commentaire de plusieurs lignes qui dit, _les commentaires peuvent rendre le code lisible et facile à réutiliser_
+ _et informatif_
+
+4. Créez un fichier variable.js, déclarez des variables et attribuez des types de données string, boolean, undefined et null.
+5.Créer le fichier datatypes.js et utiliser le JavaScript **_typeof_** pour vérifier les différents types de données. Vérifier le type de données de chaque variable
+6. Déclarer quatre variables sans leur attribuer de valeur
+7. Déclarer quatre variables avec des valeurs assignées
+8. Déclarez des variables pour stocker votre prénom, votre nom de famille, votre état civil, votre pays et votre âge sur plusieurs lignes.
+9. Déclarez des variables pour stocker votre prénom, votre nom, votre état civil, votre pays et votre âge sur une seule ligne.
+10. Déclarer deux variables _myAge_ and _yourAge_ et leur assigner des valeurs initiales et se connecter à la console du navigateur.
+
+```sh
+I am 25 years old.
+You are 30 years old.
+```
+
+🎉 FÉLICITATIONS ! 🎉
+
+[Jour 2 >>](./02_Jour_les_types_des_donnee/02_Jour_les_types_des_donnee.md)
diff --git a/Italian/02_Day_Data_types/02_day_data_types.md b/Italian/02_Day_Data_types/02_day_data_types.md
new file mode 100644
index 000000000..867af20d6
--- /dev/null
+++ b/Italian/02_Day_Data_types/02_day_data_types.md
@@ -0,0 +1,980 @@
+
+
+
+[<< Giorno 1](../readMe.md) | [Giorno 3 >>](../03_Day_Booleans_operators_date/03_booleans_operators_date.md)
+
+
+
+- [📔 Giorno 2](#-day-2)
+ - [Tipi di Dati](#data-types)
+ - [Tipi di Dati Primitivi](#primitive-data-types)
+ - [Tipi di Dati Non Primitivi](#non-primitive-data-types)
+ - [Numbers](#numbers)
+ - [Dichiarare un Tipo Number](#declaring-number-data-types)
+ - [L'Oggetto Math](#math-object)
+ - [Random Number Generator](#random-number-generator)
+ - [Strings](#strings)
+ - [Concatenare Stringhe](#string-concatenation)
+ - [Concatenare Usando l'Operatore Addizione](#concatenating-using-addition-operator)
+ - [Stringe Letterali Lunghe](#long-literal-strings)
+ - [Sequenze di Escape nelle Stringhe](#escape-sequences-in-strings)
+ - [Stringhe Parametriche (Template Strings)](#template-literals-template-strings)
+ - [Metodi del Tipo String](#string-methods)
+ - [Verificare il Ripo di Dato ed Eseguire Casting](#checking-data-types-and-casting)
+ - [Verificare il Tipo di Dato](#checking-data-types)
+ - [Cambiare il Tipo di Dato (Casting)](#changing-data-type-casting)
+ - [Da String a Int](#string-to-int)
+ - [Da String a Float](#string-to-float)
+ - [Da Float a Int](#float-to-int)
+ - [💻 Giorno 2: Esercizi](#-day-2-exercises)
+ - [Esercizi: Livello 1](#exercise-level-1)
+ - [Esercizi: Livello 2](#exercise-level-2)
+ - [Esercizi: Livello 3](#exercises-level-3)
+
+# 📔 Giorno 2
+
+## Tipi di Dati
+
+Nella sezione precedente abbiamo parlato un po' dei tipi di dati. I dati o i valori hanno tipi di dati. I tipi di dati descrivono le caratteristiche dei dati. I tipi di dati possono essere suddivisi in due categorie:
+
+1. Tipi di Dati Primitivi
+2. Tipi di Dati Non Primitivi (Object References)
+
+### Tipi di Dati Primitivi
+
+I tipi di dati primitivi in JavaScript includono:
+
+ 1. Numbers - Interi, float
+ 2. Strings - Qualsiasi dato tra virgolette singole, virgolette doppie o virgolette rovesciate.
+ 3. Boolean - valore vero o falso
+ 4. Null - valore vuoto o nessun valore
+ 5. Undefined - una variabile dichiarata senza valore
+ 6. Symbol - Un valore unico che può essere generato dal costruttore Symbol.
+
+I tipi di dati non primitivi in JavaScript includono:
+
+1. Objects
+2. Arrays
+
+Vediamo ora cosa significano esattamente i tipi di dati primitivi e non primitivi.
+I tipi di dati *primitivi* sono tipi di dati immutabili (non modificabili). Una volta creato un tipo di dati primitivo, non è possibile modificarlo.
+
+**Esempio:**
+
+```js
+let word = 'JavaScript'
+```
+
+Se si tenta di modificare la stringa memorizzata nella variabile *word*, JavaScript dovrebbe sollevare un errore. Qualsiasi tipo di dato sotto una virgoletta singola, una doppia virgoletta o una virgola rovesciata è un tipo di dato stringa.
+
+```js
+word[0] = 'Y'
+```
+
+Questa espressione non modifica la stringa memorizzata nella variabile *word*. Quindi, possiamo dire che le stringhe non sono modificabili o, in altre parole, immutabili.
+I tipi di dati primitivi vengono confrontati in base ai loro valori. Confrontiamo diversi valori di dati. Si veda l'esempio seguente:
+
+```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
+```
+
+### Tipi di dati non primitivi
+
+I tipi di dati *non primitivi* sono modificabili o mutabili. È possibile modificare il valore dei tipi di dati non primitivi dopo la loro creazione.
+Vediamo come creare un array. Una matrice è un elenco di valori di dati in una parentesi quadra. Gli array possono contenere lo stesso tipo di dati o tipi diversi. I valori degli array sono referenziati dal loro indice. In JavaScript l'indice dell'array inizia da zero. Cioè, il primo elemento di un array si trova all'indice zero, il secondo elemento all'indice uno, il terzo elemento all'indice due e così via.
+
+```js
+let nums = [1, 2, 3]
+nums[0] = 10
+
+console.log(nums) // [10, 2, 3]
+```
+
+Come si può notare, un array, che è un tipo di dati non primitivo, è mutabile. I tipi di dati non primitivi non possono essere confrontati per valore. Anche se due tipi di dati non primitivi hanno le stesse proprietà e gli stessi valori, non sono strettamente uguali.
+
+```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
+```
+
+Regola generale: non si confrontano tipi di dati non primitivi. Non si confrontano array, funzioni o oggetti.
+I valori non primitivi vengono definiti tipi di riferimento, perché vengono confrontati in base al riferimento anziché al valore. Due oggetti sono strettamente uguali solo se fanno riferimento allo stesso oggetto sottostante.
+
+```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
+```
+
+Se avete difficoltà a capire la differenza tra tipi di dati primitivi e non primitivi, non siete gli unici. Calmatevi, passate alla sezione successiva e provate a tornare dopo qualche tempo. Ora iniziamo i tipi di dati con il tipo di numero.
+
+## Numbers
+
+I numeri sono valori interi e decimali che possono eseguire tutte le operazioni aritmetiche.
+Vediamo alcuni esempi di numeri.
+
+### Dichiarare i tipi di dati numerici
+
+```js
+let age = 35
+const gravity = 9.81 // we use const for non-changing values, gravitational constant in m/s2
+let mass = 72 // mass in Kilogram
+const PI = 3.14 // pi a geometrical constant
+
+// More Esempios
+const boilingPoint = 100 // temperature in oC, boiling point of water which is a constant
+const bodyTemp = 37 // oC average human body temperature, which is a constant
+
+console.log(age, gravity, mass, PI, boilingPoint, bodyTemp)
+```
+
+### L'Oggetto Math
+
+In JavaScript l'oggetto Math fornisce molti metodi per lavorare con i numeri.
+
+```js
+const PI = Math.PI
+
+console.log(PI) // 3.141592653589793
+
+// Rounding to the closest number
+// if above .5 up if less 0.5 down rounding
+
+console.log(Math.round(PI)) // 3 to round values to the nearest number
+
+console.log(Math.round(9.81)) // 10
+
+console.log(Math.floor(PI)) // 3 rounding down
+
+console.log(Math.ceil(PI)) // 4 rounding up
+
+console.log(Math.min(-5, 3, 20, 4, 5, 10)) // -5, returns the minimum value
+
+console.log(Math.max(-5, 3, 20, 4, 5, 10)) // 20, returns the maximum value
+
+const randNum = Math.random() // creates random number between 0 to 0.999999
+console.log(randNum)
+
+// Let us create random number between 0 to 10
+
+const num = Math.floor(Math.random () * 11) // creates random number between 0 and 10
+console.log(num)
+
+//Absolute value
+console.log(Math.abs(-10)) // 10
+
+//Square root
+console.log(Math.sqrt(100)) // 10
+
+console.log(Math.sqrt(2)) // 1.4142135623730951
+
+// Power
+console.log(Math.pow(3, 2)) // 9
+
+console.log(Math.E) // 2.718
+
+// Logarithm
+// Returns the natural logarithm with base E of x, Math.log(x)
+console.log(Math.log(2)) // 0.6931471805599453
+console.log(Math.log(10)) // 2.302585092994046
+
+// Returns the natural logarithm of 2 and 10 respectively
+console.log(Math.LN2) // 0.6931471805599453
+console.log(Math.LN10) // 2.302585092994046
+
+// Trigonometry
+Math.sin(0)
+Math.sin(60)
+
+Math.cos(0)
+Math.cos(60)
+```
+
+#### Random Number Generator
+
+L'oggetto JavaScript Math ha un generatore di numeri con il metodo random() che genera numeri da 0 a 0,9999999...
+
+```js
+let randomNum = Math.random() // generates 0 to 0.999...
+```
+
+Vediamo ora come utilizzare il metodo random() per generare un numero casuale compreso tra 0 e 10:
+
+```js
+let randomNum = Math.random() // generates 0 to 0.999
+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
+```
+
+## Strings
+
+Le stringhe sono testi, che si trovano sotto le virgolette **_singole_**, **_doppie_**, **_back-tick_**. Per dichiarare una stringa, abbiamo bisogno di un nome di variabile, di un operatore di assegnazione, di un valore tra virgolette singole, virgolette doppie o virgolette back-tick.
+
+```js
+let space = ' ' // an empty space string
+let firstName = 'Asabeneh'
+let lastName = 'Yetayeh'
+let country = 'Finland'
+let city = 'Helsinki'
+let language = 'JavaScript'
+let job = 'teacher'
+let quote = "The saying,'Seeing is Believing' is not correct in 2020."
+let quotWithBackTick = `The saying,'Seeing is Believing' is not correct in 2020.`
+```
+
+### Concatenazione di Stringhe
+
+Il collegamento di due o più stringhe tra loro si chiama concatenazione.
+Utilizzando le stringhe dichiarate nella precedente sezione:
+
+```js
+let fullName = firstName + space + lastName; // concatenation, merging two string together.
+console.log(fullName);
+```
+
+```sh
+Asabeneh Yetayeh
+```
+
+Possiamo concatenare le stringhe in diversi modi.
+
+#### Concatenare Usando l'Operatore Addizione
+
+La concatenazione con l'operatore di addizione è un vecchio metodo. Questo modo di concatenare è noioso e soggetto ad errori. È bene sapere come concatenare in questo modo, ma suggerisco vivamente di usare le stringhe modello ES6 (spiegate più avanti).
+
+```js
+// Declaring different variables of different data types
+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
+```
+
+#### Stringhe Letterali Lunghe
+
+Una stringa può essere un singolo carattere, un paragrafo o una pagina. Se la lunghezza della stringa è eccessiva, non può essere contenuta in una riga. Possiamo usare il carattere backslash (\) alla fine di ogni riga per indicare che la stringa continuerà sulla riga successiva.
+
+**Esempio:**
+
+```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 nelle Stringhe
+
+In JavaScript e in altri linguaggi di programmazione il carattere \ seguito da alcuni caratteri è una sequenza di escape. Vediamo i caratteri di escape più comuni:
+
+- \n: new line
+- \t: Tab, means 8 spaces
+- \\\\: Back slash
+- \\': Single quote (')
+- \\": Double quote (")
+
+```js
+console.log('I hope everyone is enjoying the 30 Days Of JavaScript challenge.\nDo you ?') // line break
+console.log('Days\tTopics\tEsercizios')
+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('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:
+
+```sh
+I hope everyone is enjoying the 30 Days Of JavaScript challenge.
+Do you ?
+Days Topics Esercizios
+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
+```
+
+#### Stringhe Parametriche (Template Strings)
+
+Per creare una stringa modello, utilizziamo due back-tick. Possiamo iniettare dati come espressioni all'interno di una stringa modello. Per iniettare dati, si racchiude l'espressione con una parentesi graffa ({}) preceduta dal segno $. Si veda la sintassi qui sotto.
+
+```js
+//Syntax
+`String literal text`
+`String literal text ${expression}`
+```
+
+**Esempio: 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
+```
+
+**Esempio: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.
+```
+
+Utilizzando un modello di stringa o un metodo di interpolazione delle stringhe, si possono aggiungere espressioni, che possono essere un valore o alcune operazioni (confronto, operazioni aritmetiche, operazioni ternarie).
+
+```js
+let a = 2
+let b = 3
+console.log(`${a} is greater than ${b}: ${a > b}`)
+```
+
+```sh
+2 is greater than 3: false
+```
+
+### Medoti del Tipo String
+
+Tutto in JavaScript è un oggetto. Una stringa è un tipo di dati primitivo, il che significa che non è possibile modificarla una volta creata. L'oggetto stringa ha molti metodi per le stringhe. Esistono diversi metodi per le stringhe che possono aiutarci a lavorare con le stringhe.
+
+1. *length*: Il metodo stringa *length* restituisce il numero di caratteri di una stringa inclusi gli spazi vuoti.
+
+**Esempio:**
+
+```js
+let js = 'JavaScript'
+console.log(js.length) // 10
+let firstName = 'Asabeneh'
+console.log(firstName.length) // 8
+```
+
+2. *Accedere ai caratteri di una stringa*: È possibile accedere a ciascun carattere di una stringa utilizzando il suo indice. Nella programmazione, il conteggio inizia da 0. Il primo indice della stringa è zero e l'ultimo indice è la lunghezza della stringa meno uno.
+
+ 
+
+Accediamo ai diversi caratteri della stringa '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()*: questo metodo cambia la stringa in lettere maiuscole.
+
+```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()*: questo metodo cambia la stringa in lettere minuscole.
+
+```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()*: Richiede due argomenti, l'indice iniziale e il numero di caratteri da tagliare.
+
+```js
+let string = 'JavaScript'
+console.log(string.substr(4,6)) // Script
+
+let country = 'Finland'
+console.log(country.substr(3, 4)) // land
+```
+
+6. *substring()*: Richiede due argomenti, l'indice iniziale e l'indice finale, ma non include il carattere all'indice finale.
+
+```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()*: Il metodo split divide una stringa in un punto specificato.
+
+```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()*: Rimuove lo spazio di coda all'inizio o alla fine di una stringa.
+
+```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()*: Prende un argomento di sottostringa e controlla se l'argomento di sottostringa esiste nella stringa. *include()* restituisce un booleano. Se una sottostringa esiste in una stringa, restituisce true, altrimenti restituisce false.
+
+```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()*: prende come parametro la vecchia sottostringa e una nuova sottostringa.
+
+```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()*: Prende l'indice e restituisce il valore in corrispondenza di quell'indice
+
+```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()*: Prende l'indice e restituisce il codice char (numero ASCII) del valore in corrispondenza dell'indice.
+
+```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()*: Prende una sottostringa e se la sottostringa esiste in una stringa restituisce la prima posizione della sottostringa se non esiste restituisce -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()*: Prende una sottostringa e se la sottostringa esiste in una stringa restituisce l'ultima posizione della sottostringa se non esiste restituisce -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()*: prende molte sottostringhe e le unisce.
+
+```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*: prende una sottostringa come argomento e verifica se la stringa inizia con la sottostringa specificata. Restituisce un booleano (vero o falso).
+
+```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*: prende una sottostringa come argomento e verifica se la stringa termina con la sottostringa specificata. Restituisce un booleano (vero o falso).
+
+```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*: prende come argomento una sottostringa e restituisce l'indice della prima corrispondenza. Il valore di ricerca può essere una stringa o un modello di espressione regolare.
+
+```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
+```
+
+prende come argomento una sottostringa o un modello di espressione regolare e restituisce un array se c'è corrispondenza, altrimenti restituisce null. Vediamo come si presenta un modello di espressione regolare. Inizia con il segno / e termina con il segno /.
+
+```js
+let string = 'love'
+let patternOne = /love/ // with out any flag
+let patternTwo = /love/gi // g-means to search in the whole text, i - case insensitive
+```
+
+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"]
+```
+
+Estraiamo i numeri dal testo utilizzando un'espressione regolare. Questa non è la sezione delle espressioni regolari, niente panico! Tratteremo le espressioni regolari più avanti.
+
+```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 with escape character means d not a normal d instead acts a digit
+// + means one or more digit numbers,
+// if there is g after that it means global, search everywhere.
+
+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()*: prende come argomento un numero e restituisce la versione ripetuta della stringa.
+
+```js
+string.repeat(n)
+```
+
+```js
+let string = 'love'
+console.log(string.repeat(10)) // lovelovelovelovelovelovelovelovelovelove
+```
+
+## Verificiare i Tipi di Dati ed eseguire Casting
+
+### Verificiare i Tipi di Dati
+
+Per verificare il tipo di dati di una certa variabile si utilizza il metodo _typeof_.
+
+**Esempio:**
+
+```js
+// Different javascript data types
+// Let's declare different data types
+
+let firstName = 'Asabeneh' // string
+let lastName = 'Yetayeh' // string
+let country = 'Finland' // string
+let city = 'Helsinki' // string
+let age = 250 // number, it is not my real age, do not worry about it
+let job // undefined, because a value was not assigned
+
+console.log(typeof 'Asabeneh') // string
+console.log(typeof firstName) // string
+console.log(typeof 10) // number
+console.log(typeof 3.14) // number
+console.log(typeof true) // boolean
+console.log(typeof false) // boolean
+console.log(typeof NaN) // number
+console.log(typeof job) // undefined
+console.log(typeof undefined) // undefined
+console.log(typeof null) // object
+```
+
+### Cambiare il Tipo di Dato (Casting)
+
+- Casting: Conversione di un tipo di dati in un altro tipo di dati. Utilizziamo _parseInt()_, _parseFloat()_, _Number()_, _+ sign_, _str()_.
+ Quando si eseguono operazioni aritmetiche, i numeri di stringa devono essere prima convertiti in numeri interi o float, altrimenti viene restituito un errore.
+
+#### Da String a Int
+
+Possiamo convertire un numero di stringa in un numero. Qualsiasi numero all'interno di un apice è un numero stringa. Un esempio di numero stringa: '10', '5', ecc.
+Possiamo convertire una stringa in un numero utilizzando i seguenti metodi:
+
+- parseInt()
+- Number()
+- Plus sign(+)
+
+```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
+```
+
+#### Da String a Float
+
+Possiamo convertire un numero float stringa in un numero float. Qualsiasi numero float all'interno di una citazione è un numero float stringa. Un esempio di numero stringa float: '9,81', '3,14', '1,44', ecc.
+È possibile convertire una stringa float in un numero utilizzando i seguenti metodi:
+
+- parseFloat()
+- Number()
+- Plus sign(+)
+
+```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
+```
+
+#### Da Float a Int
+
+Possiamo convertire i numeri float in numeri interi.
+Per convertire i float in int utilizziamo il metodo seguente:
+
+- parseInt()
+
+```js
+let num = 9.81
+let numInt = parseInt(num)
+
+console.log(numInt) // 9
+```
+
+🌕 Fantastico. Hai appena completato le sfide del secondo giorno e sei due passi avanti sulla via della grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## 💻 Giorno 2: Esercizi
+
+### Esercizio: Livello 1
+
+1. Dichiarare una variabile chiamata sfida e assegnarle un valore iniziale **'30 Days Of JavaScript'**.
+2. Stampate la stringa sulla console del browser usando __console.log()__.
+3. Stampate la __lunghezza__ della stringa nella console del browser usando _console.log()_.
+4. Cambiare tutti i caratteri della stringa in lettere maiuscole utilizzando il metodo __toUpperCase()__.
+5. Cambiare tutti i caratteri della stringa in lettere minuscole usando il metodo __toLowerCase()__.
+6. Tagliare (slice) la prima parola della stringa utilizzando il metodo __substr()__ o __substring()__.
+7. Tagliare la frase *Giorni di JavaScript* da *30 Giorni di JavaScript*.
+8. Verificare se la stringa contiene la parola __Script__ utilizzando il metodo __includes()__.
+9. Dividere la __stringa__ in un __array__ usando il metodo __split()__.
+10. Dividere la stringa 30 Days Of JavaScript nello spazio usando il metodo __split()__.
+11. Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon" __split__ la stringa alla virgola e la trasforma in un array.
+12. Cambiare 30 Days Of JavaScript in 30 Days Of Python usando il metodo __replace()__.
+13. Qual è il carattere all'indice 15 nella stringa '30 giorni di JavaScript'? Usate il metodo __charAt()__.
+14. Qual è il codice del carattere J nella stringa '30 Days Of JavaScript' usando il metodo __charCodeAt()__.
+15. Usate __indexOf__ per determinare la posizione della prima occorrenza di __a__ in 30 Giorni Di JavaScript.
+16. Usate __lastIndexOf__ per determinare la posizione dell'ultima occorrenza di __a__ in 30 Days Of JavaScript.
+17. Usate __indexOf__ per trovare la posizione della prima occorrenza della parola __perché__ nella seguente frase:__"Non si può terminare una frase con perché perché perché è una congiunzione"__.
+18. Usate __lastIndexOf__ per trovare la posizione dell'ultima occorrenza della parola __because__ nella seguente frase:__'Non si può concludere una frase con perché perché perché è una congiunzione'__.
+19. Usare __search__ per trovare la posizione della prima occorrenza della parola __because__ nella seguente frase:__'Non si può terminare una frase con perché perché perché è una congiunzione'__
+20. Usate __trim()__ per rimuovere gli spazi bianchi all'inizio e alla fine di una stringa, ad esempio ' 30 Days Of JavaScript '.
+21. Usate il metodo __startsWith()__ con la stringa *30 Days Of JavaScript* e rendete il risultato vero.
+22. Usate il metodo __endsWith()__ con la stringa *30 Days Of JavaScript* e fate in modo che il risultato sia vero.
+23. Usare il metodo __match()__ per trovare tutti gli __a__ in 30 Giorni Di JavaScript
+24. Usare il metodo __concat()__ e unire '30 giorni di' e 'JavaScript' in un'unica stringa, '30 giorni di JavaScript'.
+25. Usate il metodo __repeat()__ per stampare 30 Giorni Di JavaScript 2 volte.
+
+### Esercizio: Livello 2
+
+1. Utilizzando console.log() stampate la seguente dichiarazione:
+
+ ```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. Utilizzando console.log() stampate la seguente citazione di Madre 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. Verificare se typeof '10' è esattamente uguale a 10. Se non lo è, renderlo esattamente uguale.
+4. Verificare se parseFloat('9.8') è uguale a 10. In caso contrario, renderlo esattamente uguale a 10.
+5. Controllare se 'on' si trova sia in python che in jargon.
+6. Spero che questo corso non sia pieno di jargon. Verificate se _il gergo_ è presente nella frase.
+7. Generare un numero casuale compreso tra 0 e 100.
+8. Generare un numero casuale compreso tra 50 e 100, incluso.
+9. Generare un numero casuale compreso tra 0 e 255 incluso.
+10. Accedere ai caratteri della stringa 'JavaScript' utilizzando un numero casuale.
+11. Usare console.log() e i caratteri di escape per stampare il seguente schema.
+
+ ```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. Usa __substr__ per tagliare la frase __perché perché perché perché__ dalla seguente frase:__'Non si può concludere una frase con perché perché perché è una congiunzione'__
+
+### Esercizio: Livello 3
+
+1. L'amore è la cosa migliore di questo mondo. Alcuni hanno trovato il loro amore e altri lo stanno ancora cercando". Contate il numero di parole __amore__ in questa frase.
+2. Usate __match()__ per contare il numero di tutti i __perché__ nella seguente frase:__"Non si può concludere una frase con perché perché perché è una congiunzione"__.
+3. Pulite il testo seguente e trovate la parola più frequente (suggerimento: usate replace ed espressioni regolari).
+
+ ```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. Calcolare il reddito totale annuo della persona estraendo i numeri dal testo seguente. 'Guadagna 5000 euro di stipendio al mese, 10000 euro di bonus annuale, 15000 euro di corsi online al mese'.
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Giorno 1](../readMe.md) | [Giorno 3 >>](../03_Day_Booleans_operators_date/03_booleans_operators_date.md)
diff --git a/Italian/03_Day_Booleans_operators_date/03_booleans_operators_date.md b/Italian/03_Day_Booleans_operators_date/03_booleans_operators_date.md
new file mode 100644
index 000000000..7db51a640
--- /dev/null
+++ b/Italian/03_Day_Booleans_operators_date/03_booleans_operators_date.md
@@ -0,0 +1,634 @@
+
+
+[<< Day 2](../02_Day_Data_types/02_day_data_types.md) | [Day 4 >>](../04_Day_Conditionals/04_day_conditionals.md)
+
+
+
+- [📔 Giorno 3](#-day-3)
+ - [Booleans](#booleans)
+ - [Valori Che Restituiscono True](#truthy-values)
+ - [Valori Che Restituiscono False](#falsy-values)
+ - [Undefined](#undefined)
+ - [Null](#null)
+ - [Operatori](#operators)
+ - [Operatori di Assegnamento](#assignment-operators)
+ - [Operatori Aritmetici](#arithmetic-operators)
+ - [Operatori di Confronto](#comparison-operators)
+ - [Operatori Logici](#logical-operators)
+ - [Operatore d'Incremento](#increment-operator)
+ - [Operatore di Decremento](#decrement-operator)
+ - [Operatori Ternari](#ternary-operators)
+ - [Precedenza dell'Operatore](#operator-precedence)
+ - [Metodi delle finestre (Window)](#window-methods)
+ - [Window alert()](#window-alert-method)
+ - [Window prompt()](#window-prompt-method)
+ - [Window confirm()](#window-confirm-method)
+ - [Oggetto Date](#date-object)
+ - [Creare un oggetto data (time)](#creating-a-time-object)
+ - [Ottenere Valore Anno](#getting-full-year)
+ - [Ottenere Valore mese](#getting-month)
+ - [Ottenere Valore data](#getting-date)
+ - [Ottenere Valore giorno](#getting-day)
+ - [Ottenere Valore ora](#getting-hours)
+ - [Ottenere Valore minuto](#getting-minutes)
+ - [Ottenere Valore secondo](#getting-seconds)
+ - [Ottenere Valore tempo](#getting-time)
+ - [💻 Day 3: Esercizi](#-day-3-exercises)
+ - [Esercizi: Livello 1](#exercises-level-1)
+ - [Esercizi: Livello 2](#exercises-level-2)
+ - [Esercizi: Livello 3](#exercises-level-3)
+
+# 📔 Giorno 3
+
+## Booleans
+
+Un tipo di dati booleano rappresenta uno dei due valori: _true_ o _false_. Il valore booleano è o vero o falso. L'uso di questi tipi di dati sarà chiaro quando si inizierà a utilizzare l'operatore di confronto. Qualsiasi confronto restituisce un valore booleano che può essere vero o falso.
+
+**Esempio: Valori Boolean**
+
+```js
+let isLightOn = true
+let isRaining = false
+let isHungry = false
+let isMarried = true
+let truValue = 4 > 3 // true
+let falseValue = 4 < 3 // false
+```
+
+Abbiamo concordato che i valori booleani sono veri o falsi.
+
+### Valori Che Resituiscono True
+
+- Tutti i numeri (positivi e negativi) sono veri, tranne lo zero.
+- Tutte le stringhe sono vere, tranne una stringa vuota ('')
+- Il boolean true
+
+### Valori Che Resituiscono False
+
+- 0
+- 0n
+- null
+- undefined
+- NaN
+- il boolean false
+- '', "", ``, empty string
+
+È bene ricordare questi valori veri e falsi. Nella sezione successiva, li useremo con le condizioni per prendere decisioni.
+
+## Undefined
+
+Se dichiariamo una variabile e non le assegniamo un valore, il valore sarà indefinito. Inoltre, se una funzione non restituisce il valore, sarà undefined.
+
+```js
+let firstName
+console.log(firstName) //not defined, because it is not assigned to a value yet
+```
+
+## Null
+
+```js
+let empty = null
+console.log(empty) // -> null , means no value
+```
+
+## Operatori
+
+### Operatori di Assegnamento
+
+An equal sign in JavaScript is an assignment operator. It uses to assign a variable.
+
+```js
+let firstName = 'Asabeneh'
+let country = 'Finland'
+```
+
+Operatori di Assegnamento
+
+
+
+### Operatori Aritmetici
+
+Gli operatori aritmetici sono operatori matematici.
+
+- Addizione(+): a + b
+- Sottrazione(-): a - b
+- Moltiplicazione(*): a * b
+- Divisione(/): a / b
+- Modulo(%): a % b
+- Esponenziale(**): a ** b
+
+```js
+let numOne = 4
+let numTwo = 3
+let sum = numOne + numTwo
+let diff = numOne - numTwo
+let mult = numOne * numTwo
+let div = numOne / numTwo
+let remainder = numOne % numTwo
+let powerOf = numOne ** numTwo
+
+console.log(sum, diff, mult, div, remainder, powerOf) // 7,1,12,1.33,1, 64
+
+```
+
+```js
+const PI = 3.14
+let radius = 100 // length in meter
+
+//Let us calculate area of a circle
+const areaOfCircle = PI * radius * radius
+console.log(areaOfCircle) // 314 m
+
+
+const gravity = 9.81 // in m/s2
+let mass = 72 // in Kilogram
+
+// Let us calculate weight of an object
+const weight = mass * gravity
+console.log(weight) // 706.32 N(Newton)
+
+const boilingPoint = 100 // temperature in oC, boiling point of water
+const bodyTemp = 37 // body temperature in oC
+
+
+// Concatenating string with numbers using string interpolation
+/*
+ The boiling point of water is 100 oC.
+ Human body temperature is 37 oC.
+ The gravity of earth is 9.81 m/s2.
+ */
+console.log(
+ `The boiling point of water is ${boilingPoint} oC.\nHuman body temperature is ${bodyTemp} oC.\nThe gravity of earth is ${gravity} m / s2.`
+)
+```
+
+### Operatori di Confronto
+
+Nella programmazione si confrontano i valori, utilizzando gli operatori di confronto per confrontare due valori. Controlliamo se un valore è maggiore o minore o uguale a un altro valore.
+
+
+**Esempio: Operatori di Confronto**
+
+```js
+console.log(3 > 2) // true, because 3 is greater than 2
+console.log(3 >= 2) // true, because 3 is greater than 2
+console.log(3 < 2) // false, because 3 is greater than 2
+console.log(2 < 3) // true, because 2 is less than 3
+console.log(2 <= 3) // true, because 2 is less than 3
+console.log(3 == 2) // false, because 3 is not equal to 2
+console.log(3 != 2) // true, because 3 is not equal to 2
+console.log(3 == '3') // true, compare only value
+console.log(3 === '3') // false, compare both value and data type
+console.log(3 !== '3') // true, compare both value and data type
+console.log(3 != 3) // false, compare only value
+console.log(3 !== 3) // false, compare both value and data type
+console.log(0 == false) // true, equivalent
+console.log(0 === false) // false, not exactly the same
+console.log(0 == '') // true, equivalent
+console.log(0 == ' ') // true, equivalent
+console.log(0 === '') // false, not exactly the same
+console.log(1 == true) // true, equivalent
+console.log(1 === true) // false, not exactly the same
+console.log(undefined == null) // true
+console.log(undefined === null) // false
+console.log(NaN == NaN) // false, not equal
+console.log(NaN === NaN) // false
+console.log(typeof NaN) // number
+
+console.log('mango'.length == 'avocado'.length) // false
+console.log('mango'.length != 'avocado'.length) // true
+console.log('mango'.length < 'avocado'.length) // true
+console.log('milk'.length == 'meat'.length) // true
+console.log('milk'.length != 'meat'.length) // false
+console.log('tomato'.length == 'potato'.length) // true
+console.log('python'.length > 'dragon'.length) // false
+```
+
+Cerca di capire i confronti di cui sopra con un po' di logica. Ricorda, senza alcuna logica potrebbe essere difficile.
+JavaScript è in qualche modo un linguaggio di programmazione cablato. Il codice JavaScript viene eseguito e fornisce un risultato, ma se non si è attenti, potrebbe non essere il risultato desiderato.
+
+Come regola generale, se un valore non è vero con ==, non sarà uguale con ===. L'uso di === è più sicuro di quello di ==. Il seguente [link](https://dorey.github.io/JavaScript-Equality-Table/) contiene un elenco esaustivo di confronti tra tipi di dati.
+
+
+### Operatori Logici
+
+I seguenti simboli sono gli operatori logici comuni:
+&& (ampersand), || (pipe) e ! (negazione).
+L'operatore && diventa vero solo se i due operandi sono veri.
+L'operatore || diventa vero se entrambi gli operandi sono veri.
+L'operatore ! nega il vero al falso e il falso al vero.
+
+```js
+// && ampersand operator example
+
+const check = 4 > 3 && 10 > 5 // true && true -> true
+const check = 4 > 3 && 10 < 5 // true && false -> false
+const check = 4 < 3 && 10 < 5 // false && false -> false
+
+// || pipe or operator, example
+
+const check = 4 > 3 || 10 > 5 // true || true -> true
+const check = 4 > 3 || 10 < 5 // true || false -> true
+const check = 4 < 3 || 10 < 5 // false || false -> false
+
+//! Negation examples
+
+let check = 4 > 3 // true
+let check = !(4 > 3) // false
+let isLightOn = true
+let isLightOff = !isLightOn // false
+let isMarried = !false // true
+```
+
+### Operatore d'Incremento
+
+In JavaScript si usa l'operatore di incremento per aumentare un valore memorizzato in una variabile. L'incremento può essere pre o post incremento. Vediamo i due tipi di incremento:
+
+1. Pre-increment
+
+```js
+let count = 0
+console.log(++count) // 1
+console.log(count) // 1
+```
+
+1. Post-increment
+
+```js
+let count = 0
+console.log(count++) // 0
+console.log(count) // 1
+```
+
+Nella maggior parte dei casi utilizziamo l'operatore post-incremento. Dovreste almeno ricordare come si usa l'operatore post-incremento.
+
+### Operatore di Decremento
+
+In JavaScript si usa l'operatore decremento per diminuire un valore memorizzato in una variabile. Il decremento può essere pre o post decremento. Vediamo ciascuno di essi:
+
+1. Pre-decremento
+
+```js
+let count = 0
+console.log(--count) // -1
+console.log(count) // -1
+```
+
+2. Post-decremento
+
+```js
+let count = 0
+console.log(count--) // 0
+console.log(count) // -1
+```
+
+### Operatori Ternari
+
+L'operatore ternario permette di scrivere una condizione.
+Un altro modo per scrivere le condizioni è utilizzare gli operatori ternari. Guardate i seguenti esempi:
+
+```js
+let isRaining = true
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+isRaining = false
+
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+```
+
+```sh
+You need a rain coat.
+No need for a rain coat.
+```
+
+```js
+let number = 5
+number > 0
+ ? console.log(`${number} is a positive number`)
+ : console.log(`${number} is a negative number`)
+number = -5
+
+number > 0
+ ? console.log(`${number} is a positive number`)
+ : console.log(`${number} is a negative number`)
+```
+
+```sh
+5 is a positive number
+-5 is a negative number
+```
+
+### Precedenza dell'Operatore
+
+Vorrei raccomandare di leggere le informazioni sulla precedenza degli operatori da questo documento [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)
+
+## Metodi delle finestre (Window)
+
+### Window alert()
+
+Come si è visto all'inizio, il metodo alert() visualizza una casella di avviso con un messaggio specificato e un pulsante OK. Si tratta di un metodo integrato che richiede un solo argomento.
+
+```js
+alert(message)
+```
+
+```js
+alert('Welcome to 30DaysOfJavaScript')
+```
+
+Non utilizzare un'allerta eccessiva perché è distruttiva e fastidiosa, usarla solo per fare delle prove.
+
+### Window prompt()
+
+I metodi di prompt della finestra visualizzano una casella di prompt con un input sul browser per accettare valori di input e i dati di input possono essere memorizzati in una variabile. Il metodo prompt() accetta due argomenti. Il secondo argomento è opzionale.
+
+```js
+prompt('required text', 'optional text')
+```
+
+```js
+let number = prompt('Enter number', 'number goes here')
+console.log(number)
+```
+
+### Window confirm()
+
+Il metodo confirm() visualizza una finestra di dialogo con un messaggio specificato, insieme a un pulsante OK e uno Cancel.
+Una finestra di conferma viene spesso utilizzata per chiedere all'utente il permesso di eseguire qualcosa. La finestra confirm() accetta come argomento una stringa.
+Facendo clic sul pulsante OK si ottiene il valore vero, mentre facendo clic sul pulsante Annulla si ottiene il valore falso.
+
+```js
+const agree = confirm('Are you sure you like to delete? ')
+console.log(agree) // result will be true or false based on what you click on the dialog box
+```
+
+Questi non sono tutti i metodi delle finestre, ma avremo una sezione separata per approfondire i metodi delle finestre.
+
+## Oggetto Date
+
+Il tempo è una cosa importante. Vogliamo conoscere l'ora di una certa attività o evento. In JavaScript l'ora e la data corrente vengono create utilizzando l'oggetto Date di JavaScript. L'oggetto Date fornisce molti metodi per lavorare con la data e l'ora. I metodi che utilizziamo per ottenere informazioni sulla data e sull'ora dai valori di un oggetto Date iniziano con la parola _get_ perché forniscono le informazioni.
+getFullYear(), getMonth(), getDate(), getDay(), getHours(), getMinutes, getSeconds(), getMilliseconds(), getTime(), getDay()_
+
+
+
+### Creare un oggetto data (time)
+
+Una volta creato l'oggetto time. L'oggetto time fornirà informazioni sul tempo. Creiamo un oggetto time
+
+```js
+const now = new Date()
+console.log(now) // Sat Jan 04 2020 00:56:41 GMT+0200 (Eastern European Standard Time)
+```
+
+Abbiamo creato un oggetto tempo e possiamo accedere a qualsiasi informazione data e ora dall'oggetto, utilizzando i metodi get che abbiamo menzionato nella tabella.
+
+### Ottenere Valore Anno
+
+Estraiamo o otteniamo l'intero anno da un oggetto temporale.
+
+```js
+const now = new Date()
+console.log(now.getFullYear()) // 2020
+```
+
+### Ottenere Valore mese
+
+Estraiamo o otteniamo il mese da un oggetto temporale.
+
+```js
+const now = new Date()
+console.log(now.getMonth()) // 0, because the month is January, month(0-11)
+```
+
+### Ottenere Valore data
+
+Estraiamo o otteniamo la data del mese da un oggetto temporale.
+
+```js
+const now = new Date()
+console.log(now.getDate()) // 4, because the day of the month is 4th, day(1-31)
+```
+
+### Ottenere Valore giorno
+
+Estraiamo o otteniamo il giorno della settimana da un oggetto orario.
+
+```js
+const now = new Date()
+console.log(now.getDay()) // 6, because the day is Saturday which is the 7th day
+// Sunday is 0, Monday is 1 and Saturday is 6
+// Getting the weekday as a number (0-6)
+```
+
+### Ottenere Valore ora
+
+Estraiamo o otteniamo le ore da un oggetto tempo.
+
+```js
+const now = new Date()
+console.log(now.getHours()) // 0, because the time is 00:56:41
+```
+
+### Ottenere Valore minuto
+
+Estraiamo o otteniamo i minuti da un oggetto temporale.
+
+```js
+const now = new Date()
+console.log(now.getMinutes()) // 56, because the time is 00:56:41
+```
+
+### Ottenere Valore secondo
+
+Estraiamo o otteniamo i secondi da un oggetto tempo.
+
+```js
+const now = new Date()
+console.log(now.getSeconds()) // 41, because the time is 00:56:41
+```
+
+### Ottenere Valore tempo
+
+Questo metodo fornisce il tempo in millisecondi a partire dal 1° gennaio 1970. È anche noto come tempo Unix. È possibile ottenere l'ora Unix in due modi:
+
+1. Usare _getTime()_
+
+```js
+const now = new Date() //
+console.log(now.getTime()) // 1578092201341, this is the number of seconds passed from January 1, 1970 to January 4, 2020 00:56:41
+```
+
+1. Usare _Date.now()_
+
+```js
+const allSeconds = Date.now() //
+console.log(allSeconds) // 1578092201341, this is the number of seconds passed from January 1, 1970 to January 4, 2020 00:56:41
+
+const timeInSeconds = new Date().getTime()
+console.log(allSeconds == timeInSeconds) // true
+```
+
+Formattiamo questi valori in un formato orario leggibile dall'uomo.
+**Esempio:**
+
+```js
+const now = new Date()
+const year = now.getFullYear() // return year
+const month = now.getMonth() + 1 // return month(0 - 11)
+const date = now.getDate() // return date (1 - 31)
+const hours = now.getHours() // return number (0 - 23)
+const minutes = now.getMinutes() // return number (0 -59)
+
+console.log(`${date}/${month}/${year} ${hours}:${minutes}`) // 4/1/2020 0:56
+```
+
+🌕 Hai un'energia sconfinata. Hai appena completato le sfide del terzo giorno e sei a tre passi dalla strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## 💻 Day 3: Esercizi
+
+### Esercizi: Livello 1
+
+1. Dichiarate le variabili firstName, lastName, country, city, age, isMarried, year e assegnategli un valore; utilizzate l'operatore typeof per verificare i diversi tipi di dati.
+2. Verificare se il tipo di '10' è uguale a 10.
+3. Verificare se parseInt('9.8') è uguale a 10
+4. Il valore booleano è vero o falso.
+ 1. Scrivete tre istruzioni JavaScript che forniscano un valore vero.
+ 2. Scrivete tre istruzioni JavaScript che forniscono un valore falso.
+
+5. Scoprite il risultato della seguente espressione di confronto senza usare console.log(). Dopo aver deciso il risultato, confermatelo usando console.log().
+ 1. 4 > 3
+ 2. 4 >= 3
+ 3. 4 < 3
+ 4. 4 <= 3
+ 5. 4 == 4
+ 6. 4 === 4
+ 7. 4 != 4
+ 8. 4 !== 4
+ 9. 4 != '4'
+ 10. 4 == '4'
+ 11. 4 === '4'
+ 12. Trovate la lunghezza di pitone e gergo e fate una dichiarazione di confronto falsificata.
+
+6. Scoprite il risultato delle seguenti espressioni senza usare console.log(). Dopo aver deciso il risultato, confermatelo utilizzando console.log().
+ 1. 4 > 3 && 10 < 12
+ 2. 4 > 3 && 10 > 12
+ 3. 4 > 3 || 10 < 12
+ 4. 4 > 3 || 10 > 12
+ 5. !(4 > 3)
+ 6. !(4 < 3)
+ 7. !(falso)
+ 8. !(4 > 3 && 10 < 12)
+ 9. !(4 > 3 && 10 > 12)
+ 10. !(4 === '4')
+ 11. Non c'è nessun 'on' sia in dragon che in python.
+
+7. Utilizzate l'oggetto Date per svolgere le seguenti attività
+ 1. Qual è l'anno oggi?
+ 2. Qual è il mese di oggi come numero?
+ 3. Qual è la data di oggi?
+ 4. Qual è il giorno di oggi come numero?
+ 5. Qual è l'ora attuale?
+ 6. A quanto ammontano i minuti?
+ 7. Trovare il numero di secondi trascorsi dal 1° gennaio 1970 a oggi.
+
+### Esercizi: Livello 2
+
+1. Scrivere uno script che richieda all'utente di inserire base e altezza del triangolo e di calcolare l'area di un triangolo (area = 0,5 x b x h).
+
+ ```sh
+ Inserire base: 20
+ Inserire l'altezza: 10
+ L'area del triangolo è 100
+ ```
+
+1. Scrivete uno script che richieda all'utente di inserire il lato a, il lato b e il lato c del triangolo e che calcoli il perimetro del triangolo (perimetro = a + b + c)
+
+ ```sh
+ Inserire il lato a: 5
+ Inserire il lato b: 4
+ Inserire il lato c: 3
+ Il perimetro del triangolo è 12
+ ```
+
+1. Ottenete la lunghezza e la larghezza utilizzando il prompt e calcolate l'area del rettangolo (area = lunghezza x larghezza e il perimetro del rettangolo (perimetro = 2 x (lunghezza + larghezza)).
+1. Ottenere il raggio utilizzando il prompt e calcolare l'area di un cerchio (area = pi x r x r) e la circonferenza di un cerchio (c = 2 x pi x r) dove pi = 3,14.
+1. Calculate the slope, x-intercept and y-intercept of y = 2x -2
+1. Slope is m = (y2-y1)/(x2-x1). Find the slope between point (2, 2) and point(6,10)
+1. Compare the slope of above two questions.
+1. Calculate the value of y (y = x2 + 6x + 9). Try to use different x values and figure out at what x value y is 0.
+1. Writ a script that prompt a user to enter hours and rate per hour. Calculate pay of the person?
+
+ ```sh
+ Enter hours: 40
+ Enter rate per hour: 28
+ Your weekly earning is 1120
+ ```
+
+1. If the length of your name is greater than 7 say, your name is long else say your name is short.
+1. Compare your first name length and your family name length and you should get this output.
+
+ ```js
+ let firstName = 'Asabeneh'
+ let lastName = 'Yetayeh'
+ ```
+
+ ```sh
+ Il tuo nome, Asabeneh, è più lungo del tuo cognome, Yetayeh
+ ```
+
+1. Dichiarare due variabili _myAge_ e _yourAge_ e assegnare loro i valori iniziali myAge e yourAge.
+
+ ```js
+ let myAge = 250
+ let yourAge = 25
+ ```
+
+ ```sh
+ Ho 225 anni più di te.
+ ```
+
+1. Utilizzando il prompt, ottenete l'anno di nascita dell'utente e se l'utente ha 18 anni o più consentitegli di guidare, altrimenti ditegli di aspettare un certo numero di anni.
+
+ ```sh
+
+ Inserire l'anno di nascita: 1995
+ Hai 25 anni. Sei abbastanza grande per guidare
+
+ Inserisci l'anno di nascita: 2005
+ Hai 15 anni. Potrai guidare dopo 3 anni.
+ ```
+
+1. Scrivere uno script che richieda all'utente di inserire il numero di anni. Calcolare il numero di secondi che una persona può vivere. Supponiamo che una persona viva solo cento anni
+
+ ```sh
+ Inserisci il numero di anni che vivi: 100
+ Hai vissuto 3153600000 secondi.
+ ```
+
+1. Creare un formato di tempo leggibile dall'uomo utilizzando l'oggetto Date time
+ 1. AAAA-MM-GG HH:mm
+ 2. GG-MM-AAAA HH:mm
+ 3. GG/MM/AAAA HH:mm
+
+### Esercizi: Livello 3
+
+1. Creare un formato orario leggibile dall'uomo utilizzando l'oggetto Date time. L'ora e i minuti devono essere sempre a due cifre (7 ore devono essere 07 e 5 minuti devono essere 05).
+ 1. YYY-MM-DD HH:mm es. 20120-01-02 07:05
+
+[<< Day 2](../02_Day_Data_types/02_day_data_types.md) | [Day 4 >>](../04_Day_Conditionals/04_day_conditionals.md)
diff --git a/Italian/04_Day_Conditionals/04_day_conditionals.md b/Italian/04_Day_Conditionals/04_day_conditionals.md
new file mode 100644
index 000000000..c8440399c
--- /dev/null
+++ b/Italian/04_Day_Conditionals/04_day_conditionals.md
@@ -0,0 +1,377 @@
+
+
+[<< Day 3](../03_Day_Booleans_operators_date/03_booleans_operators_date.md) | [Day 5 >>](../05_Day_Arrays/05_day_arrays.md)
+
+
+
+- [📔 Giorno 4](#-day-4)
+ - [Condizionali](#conditionals)
+ - [If](#if)
+ - [If Else](#if-else)
+ - [If Else if Else](#if--else-if-else)
+ - [Switch](#switch)
+ - [Operatori Ternari](#ternary-operators)
+ - [💻 Esercizi](#-exercises)
+ - [Esercizi: Livello 1](#exercises-level-1)
+ - [Esercizi: Livello 2](#exercises-level-2)
+ - [Esercizi: Livello 3](#exercises-level-3)
+
+# 📔 Giorno 4
+
+## Condizionali
+
+Le istruzioni condizionali sono utilizzate per prendere decisioni in base a diverse condizioni.
+Per impostazione predefinita, le istruzioni negli script JavaScript vengono eseguite in sequenza dall'alto verso il basso. Se la logica di elaborazione lo richiede, il flusso sequenziale di esecuzione può essere modificato in due modi:
+
+- Esecuzione condizionale: un blocco di una o più istruzioni viene eseguito se una certa espressione è vera.
+- Esecuzione ripetitiva: un blocco di una o più istruzioni verrà eseguito ripetutamente finché una certa espressione sarà vera. In questa sezione tratteremo gli enunciati _if_, _else_, _else if_. Gli operatori di confronto e logici appresi nelle sezioni precedenti saranno utili in questa sede.
+
+Le condizioni possono essere implementate nei seguenti modi:
+
+- if
+- if else
+- if else if else
+- switch
+- ternary operator
+
+### If
+
+In JavaScript e in altri linguaggi di programmazione la parola chiave _if_ serve a verificare se una condizione è vera e a eseguire il blocco di codice. Per creare una condizione if, abbiamo bisogno della parola chiave _if_, della condizione all'interno di una parentesi e del blocco di codice all'interno di una parentesi graffa ({}).
+
+```js
+// syntax
+if (condition) {
+ //this part of code runs for truthy condition
+}
+```
+
+**Esempio:**
+
+```js
+let num = 3
+if (num > 0) {
+ console.log(`${num} is a positive number`)
+}
+// 3 is a positive number
+```
+
+Come si può vedere nell'esempio di condizione precedente, 3 è maggiore di 0, quindi è un numero positivo. La condizione era vera e il blocco di codice è stato eseguito. Tuttavia, se la condizione è falsa, non si vedrà alcun risultato.
+
+```js
+let isRaining = true
+if (isRaining) {
+ console.log('Remember to take your rain coat.')
+}
+```
+
+ Lo stesso vale per la seconda condizione: se isRaining è false, il blocco if non verrà eseguito e non vedremo alcun output. Per vedere il risultato di una condizione falsa, dovremmo avere un altro blocco, che sarà _else_.
+
+### If Else
+
+Se la condizione è vera, viene eseguito il primo blocco, altrimenti viene eseguita la condizione else.
+
+```js
+// syntax
+if (condition) {
+ // this part of code runs for truthy condition
+} else {
+ // this part of code runs for false condition
+}
+```
+
+```js
+let num = 3
+if (num > 0) {
+ console.log(`${num} is a positive number`)
+} else {
+ console.log(`${num} is a negative number`)
+}
+// 3 is a positive number
+
+num = -3
+if (num > 0) {
+ console.log(`${num} is a positive number`)
+} else {
+ console.log(`${num} is a negative number`)
+}
+// -3 is a negative number
+```
+
+```js
+let isRaining = true
+if (isRaining) {
+ console.log('You need a rain coat.')
+} else {
+ console.log('No need for a rain coat.')
+}
+// You need a rain coat.
+
+isRaining = false
+if (isRaining) {
+ console.log('You need a rain coat.')
+} else {
+ console.log('No need for a rain coat.')
+}
+// No need for a rain coat.
+```
+
+L'ultima condizione è falsa, quindi il blocco else è stato eseguito. Cosa succede se abbiamo più di due condizioni? In questo caso, utilizzeremo le condizioni *else if*.
+
+### If Else if Else
+
+Nella nostra vita quotidiana prendiamo decisioni su base giornaliera. Le decisioni non vengono prese verificando una o due condizioni, ma sulla base di più condizioni. Come la nostra vita quotidiana, anche la programmazione è piena di condizioni. Usiamo *else if* quando abbiamo più condizioni.
+
+```js
+// syntax
+if (condition) {
+ // code
+} else if (condition) {
+ // code
+} else {
+ // code
+
+}
+```
+
+**Esempio:**
+
+```js
+let a = 0
+if (a > 0) {
+ console.log(`${a} is a positive number`)
+} else if (a < 0) {
+ console.log(`${a} is a negative number`)
+} else if (a == 0) {
+ console.log(`${a} is zero`)
+} else {
+ console.log(`${a} is not a number`)
+}
+```
+
+```js
+// if else if else
+let weather = 'sunny'
+if (weather === 'rainy') {
+ console.log('You need a rain coat.')
+} else if (weather === 'cloudy') {
+ console.log('It might be cold, you need a jacket.')
+} else if (weather === 'sunny') {
+ console.log('Go out freely.')
+} else {
+ console.log('No need for rain coat.')
+}
+```
+
+### Switch
+
+Switch è un'alternativa a **if else if else**.
+L'istruzione switch inizia con la parola chiave *switch* seguita da una parentesi e da un blocco di codice. All'interno del blocco di codice avremo diversi casi. Il blocco Case viene eseguito se il valore nella parentesi dell'istruzione switch corrisponde al valore del caso. L'istruzione break serve a terminare l'esecuzione, in modo che l'esecuzione del codice non venga interrotta dopo che la condizione è stata soddisfatta. Il blocco default viene eseguito se tutti i casi non soddisfano la condizione.
+
+```js
+switch(caseValue){
+ case 1:
+ // code
+ break
+ case 2:
+ // code
+ break
+ case 3:
+ // code
+ break
+ default:
+ // code
+}
+```
+
+```js
+let weather = 'cloudy'
+switch (weather) {
+ case 'rainy':
+ console.log('You need a rain coat.')
+ break
+ case 'cloudy':
+ console.log('It might be cold, you need a jacket.')
+ break
+ case 'sunny':
+ console.log('Go out freely.')
+ break
+ default:
+ console.log(' No need for rain coat.')
+}
+
+// Switch More Examples
+let dayUserInput = prompt('What day is today ?')
+let day = dayUserInput.toLowerCase()
+
+switch (day) {
+ case 'monday':
+ console.log('Today is Monday')
+ break
+ case 'tuesday':
+ console.log('Today is Tuesday')
+ break
+ case 'wednesday':
+ console.log('Today is Wednesday')
+ break
+ case 'thursday':
+ console.log('Today is Thursday')
+ break
+ case 'friday':
+ console.log('Today is Friday')
+ break
+ case 'saturday':
+ console.log('Today is Saturday')
+ break
+ case 'sunday':
+ console.log('Today is Sunday')
+ break
+ default:
+ console.log('It is not a week day.')
+}
+
+```
+
+// Esempi di utilizzo delle condizioni nei casi
+
+```js
+let num = prompt('Enter number');
+switch (true) {
+ case num > 0:
+ console.log('Number is positive');
+ break;
+ case num == 0:
+ console.log('Numbers is zero');
+ break;
+ case num < 0:
+ console.log('Number is negative');
+ break;
+ default:
+ console.log('Entered value was not a number');
+}
+```
+
+### Operatori Ternari
+
+Un altro modo di scrivere i condizionali è quello di utilizzare gli operatori ternari. Ne abbiamo parlato in altre sezioni, ma è bene menzionarlo anche qui.
+
+```js
+let isRaining = true
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+```
+
+🌕 sei straordinario e hai un potenziale notevole. Hai appena completato le sfide del quarto giorno e sei quattro passi avanti sulla strada della grandezza. Ora fai qualche esercizio per il cervello e i muscoli.
+
+## 💻 Esercizi
+
+### Esercizi: Livello 1
+
+1. Ottenere l'input dell'utente tramite prompt("Inserisci la tua età:"). Se l'utente ha 18 anni o più, fornisce il feedback: "Sei abbastanza grande per guidare", ma se non ha 18 anni, fornisce un altro feedback che indica di aspettare il numero di anni necessari per compierli.
+
+ ```sh
+ Inserisci la tua età: 30
+ Sei abbastanza grande per guidare.
+
+ Inserisci la tua età: 15
+ Ti restano 3 anni per guidare.
+ ```
+
+1. Confrontare i valori di myAge e yourAge usando if ... else. Basarsi sul confronto e registrare il risultato nella console, indicando chi è più vecchio (io o tu). Utilizzare prompt("Inserisci la tua età:") per ottenere l'età come input.
+
+ ```sh
+ Inserisci la tua età: 30
+ Sei più vecchio di me di 5 anni.
+ ```
+
+1. Se a è maggiore di b restituisce 'a è maggiore di b' altrimenti 'a è minore di b'. Provate a implementarlo in diversi modi
+
+ - usando if else
+ - l'operatore ternario.
+
+ ```js
+ lasciare a = 4
+ lasciare che b = 3
+ ```
+
+ ``sh
+ 4 è maggiore di 3
+ ```
+
+1. I numeri pari sono divisibili per 2 e il resto è zero. Come si fa a verificare se un numero è pari o no usando JavaScript?
+
+ ```sh
+ Inserite un numero: 2
+ 2 è un numero pari
+
+ Inserite un numero: 9
+ 9 è un numero dispari.
+ ```
+
+### Esercizi: Livello 2
+
+1. Scrivere un codice in grado di dare voti agli studenti in base ai loro punteggi:
+ - 80-100, A
+ - 70-89, B
+ - 60-69, C
+ - 50-59, D
+ - 0-49, F
+1. Controllare se la stagione è autunno, inverno, primavera o estate.
+ Se l'input dell'utente è :
+ - Settembre, Ottobre o Novembre, la stagione è Autunno.
+ - Dicembre, gennaio o febbraio, la stagione è Inverno.
+ - Marzo, aprile o maggio, la stagione è la primavera.
+ - Giugno, luglio o agosto, la stagione è l'estate.
+1. Controllare se un giorno è un giorno del fine settimana o un giorno lavorativo. Il vostro script prenderà il giorno come input.
+
+```sh
+ Che giorno è oggi? Sabato
+ Sabato è un fine settimana.
+
+ Che giorno è oggi? sabato
+ Sabato è un fine settimana.
+
+ Che giorno è oggi? venerdì
+ Venerdì è un giorno lavorativo.
+
+ Che giorno è oggi? venerdì
+ Venerdì è un giorno lavorativo.
+ ```
+
+### Esercizi: Livello 3
+
+1. Scrivere un programma che indichi il numero di giorni in un mese.
+
+ ```sh
+ Inserire un mese: Gennaio
+ Gennaio ha 31 giorni.
+
+ Inserire un mese: GENNAIO
+ Gennaio ha 31 giorni
+
+ Inserire un mese: Febbraio
+ Febbraio ha 28 giorni.
+
+ Inserire un mese: FEBBRAIO
+ Febbraio ha 28 giorni.
+ ```
+
+1. Scrivere un programma che indichi il numero di giorni in un mese, considerando l'anno bisestile.
+
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 3](../03_Day_Booleans_operators_date/03_booleans_operators_date.md) | [Day 5 >>](../05_Day_Arrays/05_day_arrays.md)
diff --git a/Italian/05_Day_Arrays/05_day_arrays.md b/Italian/05_Day_Arrays/05_day_arrays.md
new file mode 100644
index 000000000..3cd84378d
--- /dev/null
+++ b/Italian/05_Day_Arrays/05_day_arrays.md
@@ -0,0 +1,774 @@
+
+
+[<< Day 4](../04_Day_Conditionals/04_day_conditionals.md) | [Day 6 >>](../06_Day_Loops/06_day_loops.md)
+
+
+
+- [📔 Giorno 5](#-day-5)
+ - [Arrays](#arrays)
+ - [Come creare un array vuoto](#how-to-create-an-empty-array)
+ - [Come creare un array contenente valori](#how-to-create-an-array-with-values)
+ - [Creare un array usando la funzione split](#creating-an-array-using-split)
+ - [Accedere agli elementi dell'array usando l'indice](#accessing-array-items-using-index)
+ - [Modificare gli elementi dell'array](#modifying-array-element)
+ - [Metodi per manipolare gli array](#methods-to-manipulate-array)
+ - [Il Costruttore dell'array](#array-constructor)
+ - [Creare valori statici con fill](#creating-static-values-with-fill)
+ - [Concatenare array usando concat](#concatenating-array-using-concat)
+ - [Ottenere la lunghezza dell'array](#getting-array-length)
+ - [Ottenere l'indice di un elemento nell'array](#getting-index-an-element-in-arr-array)
+ - [Ottenere l'ultimo indice di un elemento nell'array](#getting-last-index-of-an-element-in-array)
+ - [Verificare l'array](#checking-array)
+ - [Convertire l'array in stringa](#converting-array-to-string)
+ - [Unire elementi array](#joining-array-elements)
+ - [Dividere gli elementi dell'array](#slice-array-elements)
+ - [Il metodo Splice con gli array](#splice-method-in-array)
+ - [Aggiungere un elemento all'array usando push](#adding-item-to-an-array-using-push)
+ - [Rimuovere l'ultimo elemento usando pop](#removing-the-end-element-using-pop)
+ - [Rimuovere un elemento dall'inizio dell'array](#removing-an-element-from-the-beginning)
+ - [Aggiungere un elemento in prima posizione dell'array](#add-an-element-from-the-beginning)
+ - [Invertire l'ordine dell'array](#reversing-array-order)
+ - [Ordinare gli elementi di un array](#sorting-elements-in-array)
+ - [Array di array](#array-of-arrays)
+ - [💻 Esercizio](#-exercise)
+ - [Esercizio: Livello 1](#exercise-level-1)
+ - [Esercizio: Livello 2](#exercise-level-2)
+ - [Esercizio: Livello 3](#exercise-level-3)
+
+# 📔 Giorno 5
+
+## Arrays
+
+A differenza delle variabili, un array può memorizzare _molti valori_. Ogni valore in un array ha un _indice_ e ogni indice ha _un riferimento in un indirizzo di memoria_. È possibile accedere a ciascun valore utilizzando i loro _indici_. L'indice di un array parte da _zero_ e l'indice dell'ultimo elemento è diminuito di uno rispetto alla lunghezza dell'array.
+
+Un array è una raccolta di diversi tipi di dati ordinati e modificabili. Un array consente di memorizzare elementi duplicati e tipi di dati diversi. Una array può essere vuoto o può contenere valori di tipi di dati diversi.
+
+### Come creare un array vuoto
+
+In JavaScript, possiamo creare un array in diversi modi. Vediamo i diversi modi per creare un array.
+È molto comune usare _const_ invece di _let_ per dichiarare una variabile di un array. Se si usa const, significa che non si usa più il nome di quella variabile.
+
+- Usare il costruttore Array
+
+```js
+// syntax
+const arr = Array()
+// or
+// let arr = new Array()
+console.log(arr) // []
+```
+
+- Usare le parentesi quadre ([])
+
+```js
+// syntax
+// This the most recommended way to create an empty list
+const arr = []
+console.log(arr)
+```
+
+### Come creare un array contenente valori
+
+Array con valori iniziali. Utilizziamo la proprietà _length_ per trovare la lunghezza di un array.
+
+```js
+const numbers = [0, 3.14, 9.81, 37, 98.6, 100] // array of numbers
+const fruits = ['banana', 'orange', 'mango', 'lemon'] // array of strings, fruits
+const vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot'] // array of strings, vegetables
+const animalProducts = ['milk', 'meat', 'butter', 'yoghurt'] // array of strings, products
+const webTechs = ['HTML', 'CSS', 'JS', 'React', 'Redux', 'Node', 'MongDB'] // array of web technologies
+const countries = ['Finland', 'Denmark', 'Sweden', 'Norway', 'Iceland'] // array of strings, countries
+
+// Print the array and its length
+
+console.log('Numbers:', numbers)
+console.log('Number of numbers:', numbers.length)
+
+console.log('Fruits:', fruits)
+console.log('Number of fruits:', fruits.length)
+
+console.log('Vegetables:', vegetables)
+console.log('Number of vegetables:', vegetables.length)
+
+console.log('Animal products:', animalProducts)
+console.log('Number of animal products:', animalProducts.length)
+
+console.log('Web technologies:', webTechs)
+console.log('Number of web technologies:', webTechs.length)
+
+console.log('Countries:', countries)
+console.log('Number of countries:', countries.length)
+```
+
+```sh
+Numbers: [0, 3.14, 9.81, 37, 98.6, 100]
+Number of numbers: 6
+Fruits: ['banana', 'orange', 'mango', 'lemon']
+Number of fruits: 4
+Vegetables: ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
+Number of vegetables: 5
+Animal products: ['milk', 'meat', 'butter', 'yoghurt']
+Number of animal products: 4
+Web technologies: ['HTML', 'CSS', 'JS', 'React', 'Redux', 'Node', 'MongDB']
+Number of web technologies: 7
+Countries: ['Finland', 'Estonia', 'Denmark', 'Sweden', 'Norway']
+Number of countries: 5
+```
+
+- Un array può contenere elementi di diversi tipi di dati
+
+```js
+const arr = [
+ 'Asabeneh',
+ 250,
+ true,
+ { country: 'Finland', city: 'Helsinki' },
+ { skills: ['HTML', 'CSS', 'JS', 'React', 'Python'] }
+] // arr containing different data types
+console.log(arr)
+```
+
+### Creare un array usando la funzione split
+
+Come abbiamo visto nella sezione precedente, possiamo dividere una stringa in diverse posizioni e convertirla in un array. Vediamo gli esempi seguenti.
+
+```js
+let js = 'JavaScript'
+const charsInJavaScript = js.split('')
+
+console.log(charsInJavaScript) // ["J", "a", "v", "a", "S", "c", "r", "i", "p", "t"]
+
+let companiesString = 'Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon'
+const companies = companiesString.split(',')
+
+console.log(companies) // ["Facebook", " Google", " Microsoft", " Apple", " IBM", " Oracle", " Amazon"]
+let txt =
+ 'I love teaching and empowering people. I teach HTML, CSS, JS, React, Python.'
+const words = txt.split(' ')
+
+console.log(words)
+// the text has special characters think how you can just get only the words
+// ["I", "love", "teaching", "and", "empowering", "people.", "I", "teach", "HTML,", "CSS,", "JS,", "React,", "Python"]
+```
+
+### Accedere agli elementi dell'array usando l'indice
+
+Si accede a ciascun elemento di un array utilizzando il suo indice. L'indice di un array parte da 0. L'immagine seguente mostra chiaramente l'indice di ciascun elemento dell'array.
+
+
+
+```js
+const fruits = ['banana', 'orange', 'mango', 'lemon']
+let firstFruit = fruits[0] // we are accessing the first item using its index
+
+console.log(firstFruit) // banana
+
+secondFruit = fruits[1]
+console.log(secondFruit) // orange
+
+let lastFruit = fruits[3]
+console.log(lastFruit) // lemon
+// Last index can be calculated as follows
+
+let lastIndex = fruits.length - 1
+lastFruit = fruits[lastIndex]
+
+console.log(lastFruit) // lemon
+```
+
+```js
+const numbers = [0, 3.14, 9.81, 37, 98.6, 100] // set of numbers
+
+console.log(numbers.length) // => to know the size of the array, which is 6
+console.log(numbers) // -> [0, 3.14, 9.81, 37, 98.6, 100]
+console.log(numbers[0]) // -> 0
+console.log(numbers[5]) // -> 100
+
+let lastIndex = numbers.length - 1;
+console.log(numbers[lastIndex]) // -> 100
+```
+
+```js
+const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+] // List of web technologies
+
+console.log(webTechs) // all the array items
+console.log(webTechs.length) // => to know the size of the array, which is 7
+console.log(webTechs[0]) // -> HTML
+console.log(webTechs[6]) // -> MongoDB
+
+let lastIndex = webTechs.length - 1
+console.log(webTechs[lastIndex]) // -> MongoDB
+```
+
+```js
+const countries = [
+ 'Albania',
+ 'Bolivia',
+ 'Canada',
+ 'Denmark',
+ 'Ethiopia',
+ 'Finland',
+ 'Germany',
+ 'Hungary',
+ 'Ireland',
+ 'Japan',
+ 'Kenya'
+] // List of countries
+
+console.log(countries) // -> all countries in array
+console.log(countries[0]) // -> Albania
+console.log(countries[10]) // -> Kenya
+
+let lastIndex = countries.length - 1;
+console.log(countries[lastIndex]) // -> Kenya
+```
+
+```js
+const shoppingCart = [
+ 'Milk',
+ 'Mango',
+ 'Tomato',
+ 'Potato',
+ 'Avocado',
+ 'Meat',
+ 'Eggs',
+ 'Sugar'
+] // List of food products
+
+console.log(shoppingCart) // -> all shoppingCart in array
+console.log(shoppingCart[0]) // -> Milk
+console.log(shoppingCart[7]) // -> Sugar
+
+let lastIndex = shoppingCart.length - 1;
+console.log(shoppingCart[lastIndex]) // -> Sugar
+```
+
+### Modificare gli elementi dell'array
+
+Un array è mutabile (modificabile). Una volta creato un array, è possibile modificarne il contenuto degli elementi.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+numbers[0] = 10 // changing 1 at index 0 to 10
+numbers[1] = 20 // changing 2 at index 1 to 20
+
+console.log(numbers) // [10, 20, 3, 4, 5]
+
+const countries = [
+ 'Albania',
+ 'Bolivia',
+ 'Canada',
+ 'Denmark',
+ 'Ethiopia',
+ 'Finland',
+ 'Germany',
+ 'Hungary',
+ 'Ireland',
+ 'Japan',
+ 'Kenya'
+]
+
+countries[0] = 'Afghanistan' // Replacing Albania by Afghanistan
+let lastIndex = countries.length - 1
+countries[lastIndex] = 'Korea' // Replacing Kenya by Korea
+
+console.log(countries)
+```
+
+```sh
+["Afghanistan", "Bolivia", "Canada", "Denmark", "Ethiopia", "Finland", "Germany", "Hungary", "Ireland", "Japan", "Korea"]
+```
+
+### Methods to manipulate array
+
+Esistono diversi metodi per manipolare un array. Questi sono alcuni dei metodi disponibili per gestire gli array:_Array, length, concat, indexOf, slice, splice, join, toString, includes, lastIndexOf, isArray, fill, push, pop, shift, unshift_
+
+#### Il Costruttore dell'array
+
+Array: Crea un array.
+
+```js
+const arr = Array() // creates an an empty array
+console.log(arr)
+
+const eightEmptyValues = Array(8) // it creates eight empty values
+console.log(eightEmptyValues) // [empty x 8]
+```
+
+#### Creare valori statici con fill
+
+fill: Riempe l'array con l'elemento specificato.
+
+```js
+const arr = Array() // creates an an empty array
+console.log(arr)
+
+const eightXvalues = Array(8).fill('X') // it creates eight element values filled with 'X'
+console.log(eightXvalues) // ['X', 'X','X','X','X','X','X','X']
+
+const eight0values = Array(8).fill(0) // it creates eight element values filled with '0'
+console.log(eight0values) // [0, 0, 0, 0, 0, 0, 0, 0]
+
+const four4values = Array(4).fill(4) // it creates 4 element values filled with '4'
+console.log(four4values) // [4, 4, 4, 4]
+```
+
+#### Concatenare array usando concat
+
+concat: Concatena due array.
+
+```js
+const firstList = [1, 2, 3]
+const secondList = [4, 5, 6]
+const thirdList = firstList.concat(secondList)
+
+console.log(thirdList) // [1, 2, 3, 4, 5, 6]
+```
+
+```js
+const fruits = ['banana', 'orange', 'mango', 'lemon'] // array of fruits
+const vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot'] // array of vegetables
+const fruitsAndVegetables = fruits.concat(vegetables) // concatenate the two arrays
+
+console.log(fruitsAndVegetables)
+```
+
+```sh
+["banana", "orange", "mango", "lemon", "Tomato", "Potato", "Cabbage", "Onion", "Carrot"]
+```
+
+#### Ottenere la lunghezza dell'array
+
+Length:Per conoscere la lunghezza dell'array.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+console.log(numbers.length) // -> 5 is the size of the array
+```
+
+#### Ottenere l'indice di un elemento nell'array
+
+indexOf:Per verificare se un elemento esiste in un array. Se esiste, viene restituito l'indice, altrimenti viene restituito -1.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+
+console.log(numbers.indexOf(5)) // -> 4
+console.log(numbers.indexOf(0)) // -> -1
+console.log(numbers.indexOf(1)) // -> 0
+console.log(numbers.indexOf(6)) // -> -1
+```
+
+Controlla che l'elemento esista nell'array.
+
+- Controlla gli elementi in una lista.
+
+```js
+// let us check if a banana exist in the array
+
+const fruits = ['banana', 'orange', 'mango', 'lemon']
+let index = fruits.indexOf('banana') // 0
+
+if(index === -1){
+ console.log('This fruit does not exist in the array')
+} else {
+ console.log('This fruit does exist in the array')
+}
+// This fruit does exist in the array
+
+// we can use also ternary here
+index === -1 ? console.log('This fruit does not exist in the array'): console.log('This fruit does exist in the array')
+
+// let us check if an avocado exist in the array
+let indexOfAvocado = fruits.indexOf('avocado') // -1, if the element not found index is -1
+if(indexOfAvocado === -1){
+ console.log('This fruit does not exist in the array')
+} else {
+ console.log('This fruit does exist in the array')
+}
+// This fruit does not exist in the array
+```
+
+#### Ottenere l'ultimo indice di un elemento nell'array
+
+lastIndexOf: Fornisce la posizione dell'ultimo elemento dell'array. Se esiste, restituisce l'indice, altrimenti restituisce -1.
+
+```js
+const numbers = [1, 2, 3, 4, 5, 3, 1, 2]
+
+console.log(numbers.lastIndexOf(2)) // 7
+console.log(numbers.lastIndexOf(0)) // -1
+console.log(numbers.lastIndexOf(1)) // 6
+console.log(numbers.lastIndexOf(4)) // 3
+console.log(numbers.lastIndexOf(6)) // -1
+```
+
+includes:Per verificare se un elemento esiste in un array. Se esiste, restituisce true, altrimenti restituisce false.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+
+console.log(numbers.includes(5)) // true
+console.log(numbers.includes(0)) // false
+console.log(numbers.includes(1)) // true
+console.log(numbers.includes(6)) // false
+
+const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+] // List of web technologies
+
+console.log(webTechs.includes('Node')) // true
+console.log(webTechs.includes('C')) // false
+```
+
+#### Verificare l'array
+
+Array.isArray:Per verificare se il tipo di dato è un array.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+console.log(Array.isArray(numbers)) // true
+
+const number = 100
+console.log(Array.isArray(number)) // false
+```
+
+#### Convertire l'array in stringa
+
+toString:Converts array to string
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+console.log(numbers.toString()) // 1,2,3,4,5
+
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+console.log(names.toString()) // Asabeneh,Mathias,Elias,Brook
+```
+
+#### Unire elementi array
+
+join: Viene utilizzato per unire gli elementi dell'array; l'argomento passato nel metodo join verrà unito con l'array e restituito come stringa. Per impostazione predefinita, unisce con una virgola, ma possiamo passare diversi parametri stringa che possono unire gli elementi.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+console.log(numbers.join()) // 1,2,3,4,5
+
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+
+console.log(names.join()) // Asabeneh,Mathias,Elias,Brook
+console.log(names.join('')) //AsabenehMathiasEliasBrook
+console.log(names.join(' ')) //Asabeneh Mathias Elias Brook
+console.log(names.join(', ')) //Asabeneh, Mathias, Elias, Brook
+console.log(names.join(' # ')) //Asabeneh # Mathias # Elias # Brook
+
+const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+] // List of web technologies
+
+console.log(webTechs.join()) // "HTML,CSS,JavaScript,React,Redux,Node,MongoDB"
+console.log(webTechs.join(' # ')) // "HTML # CSS # JavaScript # React # Redux # Node # MongoDB"
+```
+
+#### Dividere gli elementi dell'array
+
+Slice: Per ritagliare più elementi in un intervallo. Richiede due parametri: posizione iniziale e posizione finale. Non include la posizione finale.
+
+```js
+ const numbers = [1,2,3,4,5]
+
+ console.log(numbers.slice()) // -> it copies all item
+ console.log(numbers.slice(0)) // -> it copies all item
+ console.log(numbers.slice(0, numbers.length)) // it copies all item
+ console.log(numbers.slice(1,4)) // -> [2,3,4] // it doesn't include the ending position
+```
+
+#### Il metodo Splice con gli array
+
+Splice: Richiede tre parametri: posizione iniziale, numero di volte da rimuovere e numero di elementi da aggiungere.
+
+```js
+ const numbers = [1, 2, 3, 4, 5]
+ numbers.splice()
+ console.log(numbers) // -> remove all items
+
+```
+
+```js
+ const numbers = [1, 2, 3, 4, 5]
+ numbers.splice(0,1)
+ console.log(numbers) // remove the first item
+```
+
+```js
+ const numbers = [1, 2, 3, 4, 5, 6]
+ numbers.splice(3, 3, 7, 8, 9)
+ console.log(numbers.splice(3, 3, 7, 8, 9)) // -> [1, 2, 3, 7, 8, 9] //it removes three item and replace three items
+```
+
+#### Aggiungere un elemento all'array usando push
+
+Push: Per aggiungere un elemento alla fine di un array esistente, si usa il metodo push.
+
+```js
+// syntax
+const arr = ['item1', 'item2','item3']
+arr.push('new item')
+console.log(arr)
+// ['item1', 'item2','item3','new item']
+```
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+numbers.push(6)
+console.log(numbers) // -> [1,2,3,4,5,6]
+
+numbers.pop() // -> remove one item from the end
+console.log(numbers) // -> [1,2,3,4,5]
+```
+
+```js
+let fruits = ['banana', 'orange', 'mango', 'lemon']
+fruits.push('apple')
+console.log(fruits) // ['banana', 'orange', 'mango', 'lemon', 'apple']
+
+fruits.push('lime')
+console.log(fruits) // ['banana', 'orange', 'mango', 'lemon', 'apple', 'lime']
+```
+
+#### Rimuovere l'ultimo elemento usando pop
+
+pop: Rimuove l' elemento in coda.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+numbers.pop() // -> remove one item from the end
+console.log(numbers) // -> [1,2,3,4]
+```
+
+#### Rimuovere un elemento dall'inizio dell'array
+
+shift: Rimuove l'elemento in testa (prima posizione).
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+numbers.shift() // -> remove one item from the beginning
+console.log(numbers) // -> [2,3,4,5]
+```
+
+#### Aggiungere un elemento in prima posizione dell'array
+
+unshift: Aggiunge un elemento in prima posizione.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+numbers.unshift(0) // -> add one item from the beginning
+console.log(numbers) // -> [0,1,2,3,4,5]
+```
+
+#### Invertire l'ordine dell'array
+
+reverse: Inverti l'ordine degli elementi.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+numbers.reverse() // -> reverse array order
+console.log(numbers) // [5, 4, 3, 2, 1]
+
+numbers.reverse()
+console.log(numbers) // [1, 2, 3, 4, 5]
+```
+
+#### Ordinare gli elementi di un array
+
+sort: dispone gli elementi dell'array in ordine crescente. L'ordinamento richiede una funzione di richiamo; vedremo come utilizzare l'ordinamento con una funzione di richiamo nelle prossime sezioni.
+
+```js
+const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+]
+
+webTechs.sort()
+console.log(webTechs) // ["CSS", "HTML", "JavaScript", "MongoDB", "Node", "React", "Redux"]
+
+webTechs.reverse() // after sorting we can reverse it
+console.log(webTechs) // ["Redux", "React", "Node", "MongoDB", "JavaScript", "HTML", "CSS"]
+```
+
+### Array di array
+
+Gli array possono memorizzare diversi tipi di dati, compreso l'array stesso. Creiamo un array di array
+
+```js
+const firstNums = [1, 2, 3]
+const secondNums = [1, 4, 9]
+
+const arrayOfArray = [[1, 2, 3], [1, 2, 3]]
+console.log(arrayOfArray[0]) // [1, 2, 3]
+
+ const frontEnd = ['HTML', 'CSS', 'JS', 'React', 'Redux']
+ const backEnd = ['Node','Express', 'MongoDB']
+ const fullStack = [frontEnd, backEnd]
+ console.log(fullStack) // [["HTML", "CSS", "JS", "React", "Redux"], ["Node", "Express", "MongoDB"]]
+ console.log(fullStack.length) // 2
+ console.log(fullStack[0]) // ["HTML", "CSS", "JS", "React", "Redux"]
+ console.log(fullStack[1]) // ["Node", "Express", "MongoDB"]
+```
+
+🌕 Sei diligenti e hai già ottenuto molti risultati. Hai appena completato le sfide del 5° giorno e sei a 5 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## 💻 Esercizio
+
+### Esercizio: Livello 1
+
+```js
+const countries = [
+ 'Albania',
+ 'Bolivia',
+ 'Canada',
+ 'Denmark',
+ 'Ethiopia',
+ 'Finland',
+ 'Germany',
+ 'Hungary',
+ 'Ireland',
+ 'Japan',
+ 'Kenya'
+]
+
+const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+]
+```
+
+1. Dichiarare un array _vuoto_;
+2. Dichiarare un array con un numero di elementi superiore a 5
+3. Trovare la lunghezza dell'array
+4. Ottenere il primo elemento, l'elemento centrale e l'ultimo elemento dell'array.
+5. Dichiarare un array chiamato _mixedDataTypes_, inserire diversi tipi di dati nell'array e trovare la lunghezza dell'array. La dimensione dell'array deve essere maggiore di 5
+6. Dichiarare una variabile array chiamata itAziende e assegnare i valori iniziali Facebook, Google, Microsoft, Apple, IBM, Oracle e Amazon.
+7. Stampare l'array utilizzando _console.log()_.
+8. Stampare il numero di aziende nell'array
+9. Stampare la prima azienda, la metà e l'ultima azienda
+10. Stampare ogni azienda
+11. Cambiare il nome di ogni azienda in maiuscolo, uno per uno, e stamparli.
+12. Stampare la matrice come una frase: Facebook, Google, Microsoft, Apple, IBM, Oracle e Amazon sono grandi aziende IT.
+13. Controllare se una certa azienda esiste nell'array itCompanies. Se esiste, restituisce l'azienda, altrimenti restituisce un'azienda _non trovata_.
+14. Filtrare le aziende che hanno più di una "o" senza il metodo del filtro.
+15. Ordinare l'array usando il metodo _sort()_.
+16. Invertire l'array utilizzando il metodo _reverse()_.
+17. Estrarre le prime 3 società dall'array.
+18. Eliminare le ultime 3 aziende dall'array.
+19. Eliminare dall'array l'azienda o le aziende IT centrali.
+20. Rimuovere la prima azienda IT dall'array
+21. Rimuovere l'azienda o le aziende IT centrali dall'array.
+22. Rimuovere l'ultima azienda IT dall'array
+23. Rimuovere tutte le aziende IT
+
+### Esercizio: Livello 2
+
+1. Creare un file separato countries.js e memorizzare l'array dei Paesi in questo file, creare un file separato web_techs.js e memorizzare l'array webTechs in questo file. Accedere a entrambi i file nel file main.js
+1. Per prima cosa rimuovete tutte le punteggiature, cambiate la stringa in array e contate il numero di parole nell'array.
+
+ ```js
+ let text =
+ 'I love teaching and empowering people. I teach HTML, CSS, JS, React, Python.'
+ console.log(words)
+ console.log(words.length)
+ ```
+
+ ```sh
+ ["I", "love", "teaching", "and", "empowering", "people", "I", "teach", "HTML", "CSS", "JS", "React", "Python"]
+
+ 13
+ ```
+
+1. Nel seguente carrello della spesa aggiungere, rimuovere, modificare gli articoli
+
+ ```js
+ const shoppingCart = ['Milk', 'Coffee', 'Tea', 'Honey']
+ ```
+
+ - aggiungere "Carne" all'inizio del carrello se non è già stato aggiunto
+ - aggiungere "Zucchero" alla fine del carrello se non è già stato aggiunto
+ - rimuovere "Miele" se si è allergici al miele
+ - modificare il tè in "Tè verde".
+1. Nell'array dei Paesi controllare se 'Etiopia' esiste nell'array, se esiste stampare 'ETIOPIA'. Se non esiste, aggiungerlo all'elenco dei paesi.
+1. Nell'array webTechs verificare se Sass esiste nell'array e se esiste stampare 'Sass è un preprocesso CSS'. Se non esiste, aggiungere Sass all'array e stampare l'array.
+1. Concatenare le due variabili seguenti e memorizzarle in una variabile fullStack.
+
+ ```js
+ const frontEnd = ['HTML', 'CSS', 'JS', 'React', 'Redux']
+ const backEnd = ['Node','Express', 'MongoDB']
+
+ console.log(fullStack)
+ ```
+
+ ```sh
+ ["HTML", "CSS", "JS", "React", "Redux", "Node", "Express", "MongoDB"]
+ ```
+
+### Esercizio: Livello 3
+
+1. Di seguito è riportata una serie di 10 studenti di età:
+
+ ```js
+ const ages = [19, 22, 19, 24, 20, 25, 26, 24, 25, 24]
+ ```
+
+ - Ordinare l'array e trovare l'età minima e massima
+ - Trovare l'età mediana (un elemento centrale o due elementi centrali divisi per due)
+ - Trovare l'età media (tutti gli elementi divisi per il numero di elementi)
+ - Trovare l'intervallo delle età (max meno min)
+ - Confrontare il valore di (min - media) e (max - media), utilizzando il metodo _abs()_.
+1.Tagliare i primi dieci Paesi dalla [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js)
+1. Trovare il/i Paese/i centrale/i nella [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js)
+2. Dividere l'array di paesi in due array uguali se è pari. Se l'array dei paesi non è pari, un altro paese per la prima metà.
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 4](../04_Day_Conditionals/04_day_Conditionals.md) | [Day 6 >>](../06_Day_Loops/06_day_loops.md)
diff --git a/Italian/06_Day_Loops/06_day_loops.md b/Italian/06_Day_Loops/06_day_loops.md
new file mode 100644
index 000000000..b7c8c6b7c
--- /dev/null
+++ b/Italian/06_Day_Loops/06_day_loops.md
@@ -0,0 +1,484 @@
+
+
+[<< Day 5](../05_Day_Arrays/05_day_arrays.md) | [Day 7 >>](../07_Day_Functions/07_day_functions.md)
+
+
+
+- [📔 Giorno 6](#-day-6)
+ - [Loops](#loops)
+ - [for Loop](#for-loop)
+ - [while loop](#while-loop)
+ - [do while loop](#do-while-loop)
+ - [for of loop](#for-of-loop)
+ - [break](#break)
+ - [continue](#continue)
+ - [💻 Esercizi:Day 6](#-exercisesday-6)
+ - [Esercizi: Livello 1](#exercises-level-1)
+ - [Esercizi: Livello 2](#exercises-level-2)
+ - [Esercizi: Livello 3](#exercises-level-3)
+
+# 📔 Giorno 6
+
+## Loops
+
+La maggior parte delle attività che svolgiamo nella vita sono piene di ripetizioni. Immaginate se vi chiedessi di stampare da 0 a 100 usando console.log(). Per eseguire questo semplice compito potreste impiegare dai 2 ai 5 minuti; questo tipo di attività noiosa e ripetitiva può essere eseguita con un ciclo. Se si preferisce guardare i video, è possibile consultare la pagina [video tutorials](https://www.youtube.com/channel/UCM4xOopkYiPwJqyKsSqL9mw)
+
+Nei linguaggi di programmazione, per svolgere attività ripetitive si utilizzano diversi tipi di loop. I seguenti esempi sono i cicli comunemente utilizzati in JavaScript e in altri linguaggi di programmazione.
+
+### for Loop
+
+```js
+// For loop structure
+for(initialization, condition, increment/decrement){
+ // code goes here
+}
+```
+
+```js
+for(let i = 0; i <= 5; i++){
+ console.log(i)
+}
+
+// 0 1 2 3 4 5
+```
+
+```js
+for(let i = 5; i >= 0; i--){
+ console.log(i)
+}
+
+// 5 4 3 2 1 0
+```
+
+```js
+for(let i = 0; i <= 5; i++){
+ console.log(`${i} * ${i} = ${i * i}`)
+}
+```
+
+```sh
+0 * 0 = 0
+1 * 1 = 1
+2 * 2 = 4
+3 * 3 = 9
+4 * 4 = 16
+5 * 5 = 25
+```
+
+```js
+const countries = ['Finland', 'Sweden', 'Denmark', 'Norway', 'Iceland']
+const newArr = []
+for(let i = 0; i < countries.length; i++){
+ newArr.push(countries[i].toUpperCase())
+}
+
+// ["FINLAND", "SWEDEN", "DENMARK", "NORWAY", "ICELAND"]
+```
+
+Aggiunta di tutti gli elementi dell'array
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+let sum = 0
+for(let i = 0; i < numbers.length; i++){
+ sum = sum + numbers[i] // can be shorten, sum += numbers[i]
+
+}
+
+console.log(sum) // 15
+```
+
+Creare un nuovo array basato sull'array esistente
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+const newArr = []
+let sum = 0
+for(let i = 0; i < numbers.length; i++){
+ newArr.push( numbers[i] ** 2)
+
+}
+
+console.log(newArr) // [1, 4, 9, 16, 25]
+```
+
+```js
+const countries = ['Finland', 'Sweden', 'Norway', 'Denmark', 'Iceland']
+const newArr = []
+for(let i = 0; i < countries.length; i++){
+ newArr.push(countries[i].toUpperCase())
+}
+
+console.log(newArr) // ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
+```
+
+### while loop
+
+```js
+let i = 0
+while (i <= 5) {
+ console.log(i)
+ i++
+}
+
+// 0 1 2 3 4 5
+```
+
+### do while loop
+
+```js
+let i = 0
+do {
+ console.log(i)
+ i++
+} while (i <= 5)
+
+// 0 1 2 3 4 5
+```
+
+### for of loop
+
+Utilizziamo il ciclo for per gli array. È un modo molto pratico per iterare un array se non siamo interessati all'indice di ogni elemento dell'array.
+
+```js
+for (const element of arr) {
+ // code goes here
+}
+```
+
+```js
+
+const numbers = [1, 2, 3, 4, 5]
+
+for (const num of numbers) {
+ console.log(num)
+}
+
+// 1 2 3 4 5
+
+for (const num of numbers) {
+ console.log(num * num)
+}
+
+// 1 4 9 16 25
+
+// adding all the numbers in the array
+let sum = 0
+for (const num of numbers) {
+ sum = sum + num
+ // can be also shorten like this, sum += num
+ // after this we will use the shorter synthax(+=, -=, *=, /= etc)
+}
+console.log(sum) // 15
+
+const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+]
+
+for (const tech of webTechs) {
+ console.log(tech.toUpperCase())
+}
+
+// HTML CSS JAVASCRIPT REACT NODE MONGODB
+
+for (const tech of webTechs) {
+ console.log(tech[0]) // get only the first letter of each element, H C J R N M
+}
+
+```
+
+```js
+const countries = ['Finland', 'Sweden', 'Norway', 'Denmark', 'Iceland']
+const newArr = []
+for(const country of countries){
+ newArr.push(country.toUpperCase())
+}
+
+console.log(newArr) // ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
+```
+
+### break
+
+Break viene utilizzato per interrompere un ciclo.
+
+```js
+for(let i = 0; i <= 5; i++){
+ if(i == 3){
+ break
+ }
+ console.log(i)
+}
+
+// 0 1 2
+```
+
+Il codice precedente si arresta se viene trovato 3 nel processo di iterazione.
+
+### continue
+
+Utilizziamo la parola chiave *continue* per saltare una determinata iterazione.
+
+```js
+for(let i = 0; i <= 5; i++){
+ if(i == 3){
+ continue
+ }
+ console.log(i)
+}
+
+// 0 1 2 4 5
+```
+
+🌕 Sei molto coraggioso, sei arrivato fino a questo punto. Ora hai acquisito il potere di automatizzare compiti ripetitivi e noiosi. Hai appena completato le sfide del sesto giorno e sei a 6 passi dalla vostra strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## 💻 Esercizi:Day 6
+
+### Esercizi: Livello 1
+
+ ```js
+ const countries = [
+ 'Albania',
+ 'Bolivia',
+ 'Canada',
+ 'Denmark',
+ 'Ethiopia',
+ 'Finland',
+ 'Germany',
+ 'Hungary',
+ 'Ireland',
+ 'Japan',
+ 'Kenya'
+ ]
+
+ const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+ ]
+
+ const mernStack = ['MongoDB', 'Express', 'React', 'Node']
+ ```
+
+1. Iterare da 0 a 10 usando il ciclo for, fare lo stesso usando il ciclo while e do while
+2. Iterare da 10 a 0 usando il ciclo for, fare lo stesso usando il ciclo while e do while
+3. Iterare da 0 a n usando il ciclo for
+4. Scrivete un ciclo che esegua il seguente schema utilizzando console.log():
+
+ ```js
+ #
+ ##
+ ###
+ ####
+ #####
+ ######
+ #######
+ ```
+
+5. Utilizzare il loop per stampare il seguente schema:
+
+ ```sh
+ 0 x 0 = 0
+ 1 x 1 = 1
+ 2 x 2 = 4
+ 3 x 3 = 9
+ 4 x 4 = 16
+ 5 x 5 = 25
+ 6 x 6 = 36
+ 7 x 7 = 49
+ 8 x 8 = 64
+ 9 x 9 = 81
+ 10 x 10 = 100
+ ```
+
+6. Utilizzando il loop stampate il seguente schema
+
+ ```sh
+ i i^2 i^3
+ 0 0 0
+ 1 1 1
+ 2 4 8
+ 3 9 27
+ 4 16 64
+ 5 25 125
+ 6 36 216
+ 7 49 343
+ 8 64 512
+ 9 81 729
+ 10 100 1000
+ ```
+
+7. Utilizzare il ciclo for per iterare da 0 a 100 e stampare solo i numeri pari.
+8. Usare il ciclo for per iterare da 0 a 100 e stampare solo i numeri dispari
+9. Usare il ciclo for per iterare da 0 a 100 e stampare solo i numeri primi
+10. Usare il ciclo for per iterare da 0 a 100 e stampare la somma di tutti i numeri.
+
+ ```sh
+ The sum of all numbers from 0 to 100 is 5050.
+ ```
+
+11. Utilizzare il ciclo for per iterare da 0 a 100 e stampare la somma di tutti i pari e la somma di tutti i dispari.
+
+ ```sh
+ The sum of all evens from 0 to 100 is 2550. And the sum of all odds from 0 to 100 is 2500.
+ ```
+
+12. Utilizzare il ciclo for per iterare da 0 a 100 e stampare la somma di tutti i pari e la somma di tutti i dispari. Stampa della somma dei pari e della somma dei dispari come array
+
+ ```sh
+ [2550, 2500]
+ ```
+
+13. Sviluppare un piccolo script che generi un array di 5 numeri casuali.
+14. Sviluppare un piccolo script che generi un array di 5 numeri casuali e i numeri devono essere unici.
+15. Sviluppare un piccolo script che generi un id casuale di sei caratteri:
+
+ ```sh
+ 5j2khz
+ ```
+
+### Esercizi: Livello 2
+
+1. Sviluppare un piccolo script che generi un numero qualsiasi di caratteri di id casuale:
+
+ ```sh
+ fe3jo1gl124g
+ ```
+
+ ```sh
+ xkqci4utda1lmbelpkm03rba
+ ```
+
+1. Scrivere uno script che generi un numero esadecimale casuale.
+
+ ```sh
+ '#ee33df'
+ ```
+
+1. Scrivere uno script che genera un numero di colore rgb casuale.
+
+ ```sh
+ rgb(240,180,80)
+ ```
+
+1. Utilizzando l'array di paesi di cui sopra, creare il seguente nuovo array.
+
+ ```sh
+ ["ALBANIA", "BOLIVIA", "CANADA", "DENMARK", "ETHIOPIA", "FINLAND", "GERMANY", "HUNGARY", "IRELAND", "JAPAN", "KENYA"]
+ ```
+
+1. Utilizzando l'array di paesi di cui sopra, creare un array per la lunghezza dei paesi"..
+
+ ```sh
+ [7, 7, 6, 7, 8, 7, 7, 7, 7, 5, 5]
+ ```
+
+1. Utilizzare l'array dei paesi per creare il seguente array di array:
+
+ ```sh
+ [
+ ['Albania', 'ALB', 7],
+ ['Bolivia', 'BOL', 7],
+ ['Canada', 'CAN', 6],
+ ['Denmark', 'DEN', 7],
+ ['Ethiopia', 'ETH', 8],
+ ['Finland', 'FIN', 7],
+ ['Germany', 'GER', 7],
+ ['Hungary', 'HUN', 7],
+ ['Ireland', 'IRE', 7],
+ ['Iceland', 'ICE', 7],
+ ['Japan', 'JAP', 5],
+ ['Kenya', 'KEN', 5]
+ ]
+ ```
+
+2. Nell'array di paesi di cui sopra, verificare se ci sono uno o più paesi contenenti la parola "terra". Se ci sono paesi contenenti "terra", stamparli come array. Se non c'è nessun paese contenente la parola "terra", stampare "Tutti questi paesi sono senza terra".
+
+ ```sh
+ ['Finland','Ireland', 'Iceland']
+ ```
+
+3. Nell'array di paesi di cui sopra, verificare se esiste un paese o se i paesi terminano con la sottostringa 'ia'. Se ci sono paesi che terminano con, stamparli come array. Se non c'è nessun paese che contiene la parola 'ai', viene stampato 'Questi sono i paesi che terminano senza ia'.
+
+ ```sh
+ ['Albania', 'Bolivia','Ethiopia']
+ ```
+
+4. Utilizzando l'array di paesi di cui sopra, trovare il paese che contiene il maggior numero di caratteri.
+
+ ```sh
+ Ethiopia
+ ```
+
+5. Utilizzando l'array di paesi di cui sopra, trovare il paese che contiene solo 5 caratteri.
+
+ ```sh
+ ['Japan', 'Kenya']
+ ```
+
+6. Trovare la parola più lunga nell'array WebTechs
+7. Utilizzate l'array WebTechs per creare il seguente array di array:
+
+ ```sh
+ [["HTML", 4], ["CSS", 3],["JavaScript", 10],["React", 5],["Redux", 5],["Node", 4],["MongoDB", 7]]
+ ```
+
+8. Un'applicazione creata utilizzando MongoDB, Express, React e Node è chiamata applicazione MERN stack. Creare l'acronimo MERN utilizzando l'array mernStack.
+9. Iterare l'array ["HTML", "CSS", "JS", "React", "Redux", "Node", "Express", "MongoDB"] utilizzando un ciclo for o for of e stampare gli elementi.
+10. Questo è un array di frutta, ['banana', 'arancia', 'mango', 'limone'] invertire l'ordine usando un ciclo senza usare un metodo inverso.
+11. Stampate tutti gli elementi dell'array come mostrato di seguito.
+
+ ```js
+ const fullStack = [
+ ['HTML', 'CSS', 'JS', 'React'],
+ ['Node', 'Express', 'MongoDB']
+ ]
+ ````
+
+ ```sh
+ HTML
+ CSS
+ JS
+ REACT
+ NODE
+ EXPRESS
+ MONGODB
+ ```
+
+### Esercizi: Livello 3
+
+1. Copiare l'array dei paesi (evitare la mutazione)
+1. Gli array sono mutabili. Creare una copia dell'array che non modifichi l'originale. Ordinare l'array copiato e memorizzarlo in una variabile ordinataPaesi
+1. Ordinare l'array WebTechs e l'array mernStack
+1. Estrarre tutti i paesi che contengono la parola "terra" dall'array [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) e stamparla come array
+1. Trovare il paese che contiene il maggior numero di caratteri nella [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js)
+1. Estrarre tutti i paesi che contengono la parola "terra" dall'[countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) e stamparli come array
+1. Estrarre tutti i paesi che contengono solo quattro caratteri dall'[countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) e stamparli come array
+1. Estraete tutti i paesi che contengono due o più parole dall'[countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) e stampateli come array
+1. Invertire la [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) e scrivere in maiuscolo ogni paese e memorizzarlo come matrice
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 5](../05_Day_Arrays/05_day_arrays.md) | [Day 7 >>](../07_Day_Functions/07_day_functions.md)
diff --git a/Italian/07_Day_Functions/07_day_functions.md b/Italian/07_Day_Functions/07_day_functions.md
new file mode 100644
index 000000000..bf2f110a8
--- /dev/null
+++ b/Italian/07_Day_Functions/07_day_functions.md
@@ -0,0 +1,708 @@
+
+
+[<< Day 6](../06_Day_Loops/06_day_loops.md) | [Day 8 >>](../08_Day_Objects/08_day_objects.md)
+
+
+
+- [📔 Giorno 7](#-day-7)
+ - [Funzioni](#functions)
+ - [Dichiarare una Funzione](#function-declaration)
+ - [Funzione senza parametro e valore di ritorno](#function-without-a-parameter-and-return)
+ - [Funzione con valore di ritorno](#function-returning-value)
+ - [Funzione con un parametro](#function-with-a-parameter)
+ - [Funzione con due parametri](#function-with-two-parameters)
+ - [Funzione con molti parametri](#function-with-many-parameters)
+ - [Funzione con numero illimitato di parametri](#function-with-unlimited-number-of-parameters)
+ - [Numero illimitato di parametri nelle funzioni regolari](#unlimited-number-of-parameters-in-regular-function)
+ - [Numero illimitato di parametri nelle arrow function](#unlimited-number-of-parameters-in-arrow-function)
+ - [Anonymous Function](#anonymous-function)
+ - [Expression Function](#expression-function)
+ - [Self Invoking Functions](#self-invoking-functions)
+ - [Arrow Function](#arrow-function)
+ - [Funzioni con parametri di default](#function-with-default-parameters)
+ - [Dichiarazione di funzione vs Arrow function](#function-declaration-versus-arrow-function)
+ - [💻 Esercizi](#-exercises)
+ - [Esercizi: Livello 1](#exercises-level-1)
+ - [Esercizi: Livello 2](#exercises-level-2)
+ - [Esercizi: Livello 3](#exercises-level-3)
+
+# 📔 Giorno 7
+
+## Funzioni
+
+Finora abbiamo visto molte funzioni JavaScript integrate. In questa sezione ci concentreremo sulle funzioni personalizzate. Che cos'è una funzione? Prima di iniziare a creare funzioni, cerchiamo di capire cos'è una funzione e perché ne abbiamo bisogno.
+
+Una funzione è un blocco riutilizzabile di codice o di istruzioni di programmazione progettato per eseguire un determinato compito.
+Una funzione è dichiarata da una parola chiave seguita da un nome, seguita da parentesi (). Una parentesi può contenere un parametro. Se una funzione accetta un parametro, verrà chiamata con un argomento. Una funzione può anche accettare un parametro predefinito. Per memorizzare un dato in una funzione, questa deve restituire determinati tipi di dati. Per ottenere il valore si chiama o si invoca una funzione.
+Le funzioni rendono il codice
+
+- pulito e facile da leggere
+- riutilizzabile
+- facile da testare
+
+Una funzione può essere dichiarata o creata in due modi:
+
+- _Declaration function_
+- _Expression function_
+- _Anonymous function_
+- _Arrow function_
+
+### Dichiarare una Funzione
+
+Vediamo come dichiarare una funzione e come chiamare una funzione.
+
+```js
+//declaring a function without a parameter
+function functionName() {
+ // code goes here
+}
+functionName() // calling function by its name and with parentheses
+```
+
+### Funzione senza parametro e valore di ritorno
+
+Le funzioni possono essere dichiarate senza parametri.
+
+**Esempio:**
+
+```js
+// function without parameter, a function which make a number square
+function square() {
+ let num = 2
+ let sq = num * num
+ console.log(sq)
+}
+
+square() // 4
+
+// function without parameter
+function addTwoNumbers() {
+ let numOne = 10
+ let numTwo = 20
+ let sum = numOne + numTwo
+
+ console.log(sum)
+}
+
+addTwoNumbers() // a function has to be called by its name to be executed
+```
+
+```js
+ function printFullName (){
+ let firstName = 'Asabeneh'
+ let lastName = 'Yetayeh'
+ let space = ' '
+ let fullName = firstName + space + lastName
+ console.log(fullName)
+}
+
+printFullName() // calling a function
+```
+
+### Funzione con valore di ritorno
+
+Le funzioni possono anche restituire valori; se una funzione non restituisce valori, il valore della funzione è indefinito. Scriviamo le funzioni di cui sopra con il ritorno. D'ora in poi, restituiremo il valore a una funzione invece di stamparlo.
+
+```js
+function printFullName (){
+ let firstName = 'Asabeneh'
+ let lastName = 'Yetayeh'
+ let space = ' '
+ let fullName = firstName + space + lastName
+ return fullName
+}
+console.log(printFullName())
+```
+
+```js
+
+ function addTwoNumbers() {
+ let numOne = 2
+ let numTwo = 3
+ let total = numOne + numTwo
+ return total
+
+ }
+
+console.log(addTwoNumbers())
+```
+
+### Funzione con un parametro
+
+In una funzione si possono passare come parametri diversi tipi di dati (numero, stringa, booleano, oggetto, funzione).
+
+```js
+// function with one parameter
+function functionName(parm1) {
+ //code goes her
+}
+functionName(parm1) // during calling or invoking one argument needed
+
+function areaOfCircle(r) {
+ let area = Math.PI * r * r
+ return area
+}
+
+console.log(areaOfCircle(10)) // should be called with one argument
+
+function square(number) {
+ return number * number
+}
+
+console.log(square(10))
+```
+
+### Funzione con due parametri
+
+```js
+// function with two parameters
+function functionName(parm1, parm2) {
+ //code goes her
+}
+functionName(parm1, parm2) // during calling or invoking two arguments needed
+// Function without parameter doesn't take input, so lets make a function with parameters
+function sumTwoNumbers(numOne, numTwo) {
+ let sum = numOne + numTwo
+ console.log(sum)
+}
+sumTwoNumbers(10, 20) // calling functions
+// If a function doesn't return it doesn't store data, so it should return
+
+function sumTwoNumbers(numOne, numTwo) {
+ let sum = numOne + numTwo
+ return sum
+}
+
+console.log(sumTwoNumbers(10, 20))
+function printFullName(firstName, lastName) {
+ return `${firstName} ${lastName}`
+}
+console.log(printFullName('Asabeneh', 'Yetayeh'))
+```
+
+### Funzione con molti parametri
+
+```js
+// function with multiple parameters
+function functionName(parm1, parm2, parm3,...){
+ //code goes here
+}
+functionName(parm1,parm2,parm3,...) // during calling or invoking three arguments needed
+
+
+// this function takes array as a parameter and sum up the numbers in the array
+function sumArrayValues(arr) {
+ let sum = 0;
+ for (let i = 0; i < arr.length; i++) {
+ sum = sum + arr[i];
+ }
+ return sum;
+}
+const numbers = [1, 2, 3, 4, 5];
+ //calling a function
+console.log(sumArrayValues(numbers));
+
+
+ const areaOfCircle = (radius) => {
+ let area = Math.PI * radius * radius;
+ return area;
+ }
+console.log(areaOfCircle(10))
+
+```
+
+### Funzione con numero illimitato di parametri
+
+A volte non sappiamo quanti argomenti l'utente ci passerà. Pertanto, dobbiamo sapere come scrivere una funzione che può accettare un numero illimitato di argomenti. Il modo in cui lo facciamo presenta una differenza significativa tra una dichiarazione di funzione (funzione regolare) e una funzione freccia (arrow function). Vediamo alcuni esempi di dichiarazione di funzione e di funzione freccia.
+
+#### Numero illimitato di parametri nelle funzioni regolari
+
+ Una dichiarazione di funzione fornisce un array di argomenti con ambito di funzione come un oggetto. Qualsiasi cosa passata come argomento nella funzione può essere accessibile dall'oggetto argomenti all'interno delle funzioni. Vediamo un esempio
+
+ ```js
+// Let us access the arguments object
+
+function sumAllNums() {
+ console.log(arguments)
+}
+
+sumAllNums(1, 2, 3, 4)
+// Arguments(4) [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]
+
+```
+
+```js
+// function declaration
+
+function sumAllNums() {
+ let sum = 0
+ for (let i = 0; i < arguments.length; i++) {
+ sum += arguments[i]
+ }
+ return sum
+}
+
+console.log(sumAllNums(1, 2, 3, 4)) // 10
+console.log(sumAllNums(10, 20, 13, 40, 10)) // 93
+console.log(sumAllNums(15, 20, 30, 25, 10, 33, 40)) // 173
+```
+
+#### Numero illimitato di parametri nelle arrow function
+
+ La funzione Arrow non ha l'oggetto argomenti con ambito di funzione. Per implementare una funzione che accetta un numero illimitato di argomenti, in una funzione freccia si utilizza l'operatore spread seguito da un qualsiasi nome di parametro. Qualsiasi cosa passata come argomento nella funzione può essere accessibile come array nella funzione freccia. Vediamo un esempio
+
+ ```js
+// Let us access the arguments object
+
+const sumAllNums = (...args) => {
+ // console.log(arguments), arguments object not found in arrow function
+ // instead we use a parameter followed by spread operator (...)
+ console.log(args)
+}
+
+sumAllNums(1, 2, 3, 4)
+// [1, 2, 3, 4]
+
+```
+
+```js
+// function declaration
+
+const sumAllNums = (...args) => {
+ let sum = 0
+ for (const element of args) {
+ sum += element
+ }
+ return sum
+}
+
+console.log(sumAllNums(1, 2, 3, 4)) // 10
+console.log(sumAllNums(10, 20, 13, 40, 10)) // 93
+console.log(sumAllNums(15, 20, 30, 25, 10, 33, 40)) // 173
+```
+
+### Anonymous Function
+
+Funzione anonima o senza nome
+
+```js
+const anonymousFun = function() {
+ console.log(
+ 'I am an anonymous function and my value is stored in anonymousFun'
+ )
+}
+```
+
+### Expression Function
+
+Le Expression Function sono funzioni anonime. Dopo aver creato una funzione senza nome, la assegniamo a una variabile. Per restituire un valore dalla funzione, dobbiamo chiamare la variabile. Guardate l'esempio seguente.
+
+```js
+
+// Function expression
+const square = function(n) {
+ return n * n
+}
+
+console.log(square(2)) // -> 4
+```
+
+### Self Invoking Functions
+
+Le funzioni Self Invoking sono funzioni anonime che non hanno bisogno di essere chiamate per restituire un valore.
+
+```js
+(function(n) {
+ console.log(n * n)
+})(2) // 4, but instead of just printing if we want to return and store the data, we do as shown below
+
+let squaredNum = (function(n) {
+ return n * n
+})(10)
+
+console.log(squaredNum)
+```
+
+### Arrow Function
+
+La Arrow function è un'alternativa per scrivere una funzione, tuttavia la dichiarazione di funzione e la Arrow function presentano alcune piccole differenze.
+
+La Arrow function utilizza la freccia invece della parola chiave *function* per dichiarare una funzione. Vediamo la dichiarazione di funzione e la funzione freccia.
+
+```js
+// This is how we write normal or declaration function
+// Let us change this declaration function to an arrow function
+function square(n) {
+ return n * n
+}
+
+console.log(square(2)) // 4
+
+const square = n => {
+ return n * n
+}
+
+console.log(square(2)) // -> 4
+
+// if we have only one line in the code block, it can be written as follows, explicit return
+const square = n => n * n // -> 4
+```
+
+```js
+const changeToUpperCase = arr => {
+ const newArr = []
+ for (const element of arr) {
+ newArr.push(element.toUpperCase())
+ }
+ return newArr
+}
+
+const countries = ['Finland', 'Sweden', 'Norway', 'Denmark', 'Iceland']
+console.log(changeToUpperCase(countries))
+
+// ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
+```
+
+```js
+const printFullName = (firstName, lastName) => {
+ return `${firstName} ${lastName}`
+}
+
+console.log(printFullName('Asabeneh', 'Yetayeh'))
+```
+
+La funzione di cui sopra ha solo l'istruzione return, quindi possiamo restituirla esplicitamente come segue.
+
+```js
+const printFullName = (firstName, lastName) => `${firstName} ${lastName}`
+
+console.log(printFullName('Asabeneh', 'Yetayeh'))
+```
+
+### Funzioni con parametri di default
+
+A volte si passano dei valori predefiniti ai parametri; quando si invoca la funzione, se non si passa un argomento, verrà utilizzato il valore predefinito. Sia la dichiarazione di funzione che la funzione freccia possono avere uno o più valori predefiniti.
+
+```js
+// syntax
+// Declaring a function
+function functionName(param = value) {
+ //codes
+}
+
+// Calling function
+functionName()
+functionName(arg)
+```
+
+**Esempio:**
+
+```js
+function greetings(name = 'Peter') {
+ let message = `${name}, welcome to 30 Days Of JavaScript!`
+ return message
+}
+
+console.log(greetings())
+console.log(greetings('Asabeneh'))
+```
+
+```js
+function generateFullName(firstName = 'Asabeneh', lastName = 'Yetayeh') {
+ let space = ' '
+ let fullName = firstName + space + lastName
+ return fullName
+}
+
+console.log(generateFullName())
+console.log(generateFullName('David', 'Smith'))
+```
+
+```js
+function calculateAge(birthYear, currentYear = 2019) {
+ let age = currentYear - birthYear
+ return age
+}
+
+console.log('Age: ', calculateAge(1819))
+```
+
+```js
+function weightOfObject(mass, gravity = 9.81) {
+ let weight = mass * gravity + ' N' // the value has to be changed to string first
+ return weight
+}
+
+console.log('Weight of an object in Newton: ', weightOfObject(100)) // 9.81 gravity at the surface of Earth
+console.log('Weight of an object in Newton: ', weightOfObject(100, 1.62)) // gravity at surface of Moon
+```
+
+Vediamo come scrivere le funzioni di cui sopra con le funzioni a freccia
+
+```js
+// syntax
+// Declaring a function
+const functionName = (param = value) => {
+ //codes
+}
+
+// Calling function
+functionName()
+functionName(arg)
+```
+
+**Esempio:**
+
+```js
+const greetings = (name = 'Peter') => {
+ let message = name + ', welcome to 30 Days Of JavaScript!'
+ return message
+}
+
+console.log(greetings())
+console.log(greetings('Asabeneh'))
+```
+
+```js
+const generateFullName = (firstName = 'Asabeneh', lastName = 'Yetayeh') => {
+ let space = ' '
+ let fullName = firstName + space + lastName
+ return fullName
+}
+
+console.log(generateFullName())
+console.log(generateFullName('David', 'Smith'))
+```
+
+```js
+
+const calculateAge = (birthYear, currentYear = 2019) => currentYear - birthYear
+console.log('Age: ', calculateAge(1819))
+```
+
+```js
+const weightOfObject = (mass, gravity = 9.81) => mass * gravity + ' N'
+
+console.log('Weight of an object in Newton: ', weightOfObject(100)) // 9.81 gravity at the surface of Earth
+console.log('Weight of an object in Newton: ', weightOfObject(100, 1.62)) // gravity at surface of Moon
+```
+
+### Dichiarazione di funzione vs Arrow function
+
+Verrà trattato in un'altra sezione.
+
+🌕 Sei una stella nascente, ora conosci le funzioni. Sei super carico del potere delle funzioni. Hai appena completato le sfide del 7° giorno e sei a 7 passi dalla strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+
+
+## 💻 Esercizi
+
+### Esercizi: Livello 1
+
+1. Dichiarare una funzione _fullName_ e stampare il proprio nome completo.
+2. Dichiarare una funzione _fullName_ che prenda come parametro firstName e lastName e restituisca il nome completo.
+3. Dichiarate una funzione _addNumbers_ che prende due parametri e restituisce la somma.
+4. L'area di un rettangolo si calcola come segue: _area = lunghezza x larghezza_. Scrivete una funzione che calcoli l'_area del rettangolo_.
+5. Il perimetro di un rettangolo si calcola come segue: _perimetro= 2x(lunghezza + larghezza)_. Scrivete una funzione che calcoli il _perimetro del rettangolo_.
+6. Il volume di un prisma rettangolare si calcola come segue: _volume = lunghezza x larghezza x altezza_. Scrivete una funzione che calcoli il _volume del prisma rettangolare_.
+7. L'area di un cerchio si calcola come segue: _area = π x r x r_. Scrivere una funzione che calcoli _areaOfCircle_.
+8. La circonferenza di un cerchio si calcola come segue: _circonferenza = 2πr_. Scrivere una funzione che calcoli _circonferenza_.
+9. La densità di una sostanza si calcola come segue:_densità= massa/volume_. Scrivete una funzione che calcoli la _densità_.
+10. La velocità si calcola dividendo la distanza totale coperta da un oggetto in movimento per il tempo totale impiegato. Scrivete una funzione che calcoli la velocità di un oggetto in movimento, _velocità_.
+11. Il peso di una sostanza si calcola come segue: _peso = massa x gravità_. Scrivete una funzione che calcoli il _peso_.
+12. La temperatura in oC può essere convertita in oF utilizzando questa formula: _oF = (oC x 9/5) + 32_. Scrivete una funzione che converta oC in oF _convertCelsiusToFahrenheit_.
+13. L'indice di massa corporea (BMI) si calcola come segue: _bmi = peso in Kg / (altezza x altezza) in m2_. Scrivete una funzione che calcoli il _bmi_. L'IMC viene utilizzato per definire in modo generale diversi gruppi di peso negli adulti di 20 anni o più.Verificate se una persona è _sottopeso, normale, sovrappeso_ o _obesa_ sulla base delle informazioni fornite di seguito.
+
+ - Gli stessi gruppi si applicano sia agli uomini che alle donne.
+ - Sottopeso: L'IMC è inferiore a 18,5
+ - Peso normale: L'IMC è compreso tra 18,5 e 24,9
+ - Sovrappeso: IMC compreso tra 25 e 29,9
+ - _Obesità_: IMC pari o superiore a 30
+
+14. Scrivete una funzione chiamata _checkSeason_, che prende un parametro mese e restituisce la stagione: autunno, inverno, primavera o estate.
+15. Math.max restituisce il suo argomento più grande. Scrivete una funzione findMax che prenda tre argomenti e restituisca il loro massimo senza usare il metodo Math.max.
+
+ ```js
+ console.log(findMax(0, 10, 5))
+ 10
+ console.log(findMax(0, -10, -2))
+ 0
+ ```
+
+### Esercizi: Livello 2
+
+1. L'equazione lineare è calcolata come segue: _ax + by + c = 0_. Scrivete una funzione che calcola il valore di un'equazione lineare, _solveLinEquation_.
+2. L'equazione quadratica si calcola come segue: _ax2 + bx + c = 0_. Scrivete una funzione che calcoli il valore o i valori di un'equazione quadratica, _solveQuadEquation_.
+
+ ```js
+ console.log(solveQuadratic()) // {0}
+ console.log(solveQuadratic(1, 4, 4)) // {-2}
+ console.log(solveQuadratic(1, -1, -2)) // {2, -1}
+ console.log(solveQuadratic(1, 7, 12)) // {-3, -4}
+ console.log(solveQuadratic(1, 0, -4)) //{2, -2}
+ console.log(solveQuadratic(1, -1, 0)) //{1, 0}
+ ```
+
+3. Dichiarare una funzione chiamata _printArray_. Prende un array come parametro e stampa ogni valore dell'array.
+4. Scrivete una funzione di nome _showDateTime_ che mostra l'ora in questo formato: 08/01/2020 04:08 utilizzando l'oggetto Date.
+
+ ```sh
+ showDateTime()
+ 08/01/2020 04:08
+ ```
+
+5. Dichiarare il nome della funzione _swapValues_. Questa funzione scambia il valore di x con quello di y.
+
+ ```js
+ swapValues(3, 4) // x => 4, y=>3
+ swapValues(4, 5) // x = 5, y = 4
+ ```
+
+6. Dichiarare una funzione chiamata _reverseArray_. Prende un array come parametro e restituisce l'inverso dell'array (non usare il metodo).
+
+ ```js
+ console.log(reverseArray([1, 2, 3, 4, 5]))
+ //[5, 4, 3, 2, 1]
+ console.log(reverseArray(['A', 'B', 'C']))
+ //['C', 'B', 'A']
+ ```
+
+7. Dichiarare il nome della funzione _capitalizeArray_. Prende l'array come parametro e restituisce l'array - maiuscolo.
+8. Dichiarare una funzione di nome _addItem_. Prende come parametro un elemento e restituisce un array dopo l'aggiunta dell'elemento.
+9. Dichiarare una funzione di nome _removeItem_. Richiede un parametro indice e restituisce un array dopo la rimozione di un elemento.
+10. Dichiarare una funzione di nome _sumOfNumbers_. Richiede un parametro numero e somma tutti i numeri in quell'intervallo.
+11. Dichiarare una funzione di nome _sumOfOdds_. Prende come parametro un numero e somma tutti i numeri dispari in quell'intervallo.
+12. Dichiarare una funzione di nome _sumOfEven_. Prende come parametro un numero e somma tutti i numeri pari in quell'intervallo.
+13. Dichiarare il nome di una funzione _EvensAndOdds_. Prende come parametro un numero intero positivo e conta il numero di pari e dispari nel numero.
+
+ ```sh
+ evensAndOdds(100);
+ The number of odds are 50.
+ The number of evens are 51.
+ ```
+
+14. Scrivere una funzione che accetta un numero qualsiasi di argomenti e restituisce la somma degli argomenti.
+
+ ```js
+ sum(1, 2, 3) // -> 6
+ sum(1, 2, 3, 4) // -> 10
+ ```
+
+15. Scrivere una funzione che generi un _randomUserIp_.
+16. Scrivere una funzione che generi un _randomMacAddress_.
+17. Dichiarare il nome di una funzione _randomHexaNumberGenerator_. Quando questa funzione viene chiamata, genera un numero esadecimale casuale. La funzione restituisce il numero esadecimale.
+
+ ```sh
+ console.log(randomHexaNumberGenerator());
+ '#ee33df'
+ ```
+
+18. Dichiarare il nome della funzione _userIdGenerator_. Quando questa funzione viene chiamata, genera un id di sette caratteri. La funzione restituisce l'id.
+
+ ```sh
+ console.log(userIdGenerator());
+ 41XTDbE
+ ```
+
+### Esercizi: Livello 3
+
+1. Modificare la funzione _userIdGenerator_. Dichiarare il nome della funzione _userIdGeneratedByUser_. Non accetta alcun parametro, ma prende due input tramite prompt(). Uno di questi è il numero di caratteri e il secondo è il numero di ID che devono essere generati.
+
+ ```sh
+ userIdGeneratedByUser()
+ 'kcsy2
+ SMFYb
+ bWmeq
+ ZXOYh
+ 2Rgxf
+ '
+ userIdGeneratedByUser()
+ '1GCSgPLMaBAVQZ26
+ YD7eFwNQKNs7qXaT
+ ycArC5yrRupyG00S
+ UbGxOFI7UXSWAyKN
+ dIV0SSUTgAdKwStr
+ '
+ ```
+
+2. Scrivete una funzione chiamata _rgbColorGenerator_ che genera i colori rgb.
+
+ ```sh
+ rgbColorGenerator()
+ rgb(125,244,255)
+ ```
+
+3. Scrivere una funzione **_arrayOfHexaColors_** che restituisca un numero qualsiasi di colori esadecimali in un array.
+4. Scrivete una funzione **_arrayOfRgbColors_** che restituisca un numero qualsiasi di colori RGB in una matrice.
+5. Scrivere una funzione **_convertHexaToRgb_** che converta il colore hexa in rgb e restituisca un colore rgb.
+6. Scrivere una funzione **_convertRgbToHexa_** che converta il colore rgb in hexa e restituisca un colore hexa.
+7. Scrivere una funzione **_generateColors_** che possa generare un numero qualsiasi di colori hexa o rgb.
+
+ ```js
+ console.log(generateColors('hexa', 3)) // ['#a3e12f', '#03ed55', '#eb3d2b']
+ console.log(generateColors('hexa', 1)) // '#b334ef'
+ console.log(generateColors('rgb', 3)) // ['rgb(5, 55, 175)', 'rgb(50, 105, 100)', 'rgb(15, 26, 80)']
+ console.log(generateColors('rgb', 1)) // 'rgb(33,79, 176)'
+ ```
+
+8. Chiamare la funzione _shuffleArray_, che prende un array come parametro e restituisce un array mescolato.
+9. Chiamate la vostra funzione _factorial_, che prende un numero intero come parametro e restituisce un fattoriale del numero
+10. Chiamate la funzione _isEmpty_, che prende un parametro e controlla se è vuoto o meno.
+11. Chiamate la funzione _sum_, che accetta un numero qualsiasi di argomenti e restituisce la somma.
+12. Scrivete una funzione chiamata _sumOfArrayItems_, che accetta un parametro dell'array e restituisce la somma di tutti gli elementi. Verificare se tutti gli elementi dell'array sono di tipo numero. In caso contrario, restituire un feedback ragionevole.
+13. Scrivete una funzione chiamata _media_, che accetta un parametro di array e restituisce la media degli elementi. Verificate se tutti gli elementi dell'array sono di tipo numero. In caso contrario, restituire un feedback ragionevole.
+14. Scrivere una funzione chiamata _modifyArray_ che prenda come parametro un array e modifichi il quinto elemento dell'array e restituisca l'array. Se la lunghezza dell'array è inferiore a cinque, restituisce "elemento non trovato".
+
+ ```js
+ console.log(modifyArray(['Avocado', 'Tomato', 'Potato','Mango', 'Lemon','Carrot']);
+ ```
+
+ ```sh
+ ['Avocado', 'Tomato', 'Potato','Mango', 'LEMON', 'Carrot']
+ ```
+
+ ```js
+ console.log(modifyArray(['Google', 'Facebook','Apple', 'Amazon','Microsoft', 'IBM']);
+ ```
+
+ ```sh
+ ['Google', 'Facebook','Apple', 'Amazon','MICROSOFT', 'IBM']
+ ```
+
+ ```js
+ console.log(modifyArray(['Google', 'Facebook','Apple', 'Amazon']);
+ ```
+
+ ```sh
+ 'Not Found'
+ ```
+
+15. Scrivere una funzione chiamata _isPrime_, che verifichi se un numero è un numero primo.
+16. Scrivete una funzione che verifichi se tutti gli elementi sono unici nell'array.
+17. Scrivete una funzione che verifichi se tutti gli elementi dell'array sono dello stesso tipo di dati.
+18. Il nome della variabile JavaScript non supporta caratteri speciali o simboli, tranne \$ o \_. Scrivete una funzione **isValidVariable** che controlli se una variabile è valida o non valida.
+19. Scrivete una funzione che restituisca un array di sette numeri casuali in un intervallo compreso tra 0 e 9. Tutti i numeri devono essere unici. Tutti i numeri devono essere unici.
+
+ ```js
+ sevenRandomNumbers()
+ [(1, 4, 5, 7, 9, 8, 0)]
+ ```
+
+20. Scrivere una funzione chiamata reverseCountries, che prenda un array di paesi e prima copi l'array e restituisca l'inverso dell'array originale.
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 6](../06_Day_Loops/06_day_loops.md) | [Day 8 >>](../08_Day_Objects/08_day_objects.md)
\ No newline at end of file
diff --git a/Italian/08_Day_Objects/08_day_objects.md b/Italian/08_Day_Objects/08_day_objects.md
new file mode 100644
index 000000000..90564a346
--- /dev/null
+++ b/Italian/08_Day_Objects/08_day_objects.md
@@ -0,0 +1,595 @@
+
+
+[<< Day 7](../07_Day_Functions/07_day_functions.md) | [Day 9 >>](../09_Day_Higher_order_functions/09_day_higher_order_functions.md)
+
+
+
+- [📔 Giorno 8](#-day-8)
+ - [Scope](#scope)
+ - [Window Global Object](#window-global-object)
+ - [Global scope](#global-scope)
+ - [Local scope](#local-scope)
+ - [📔 Object](#-object)
+ - [Creare un oggetto vuoto](#creating-an-empty-object)
+ - [Creare un oggetto con valori](#creating-an-objecting-with-values)
+ - [Ottenere i valori dall'oggetto](#getting-values-from-an-object)
+ - [Creare i metodi di un oggetto](#creating-object-methods)
+ - [Impostare nuove chiavi per un oggetto](#setting-new-key-for-an-object)
+ - [Metodi della classe Object](#object-methods)
+ - [Ottenere le chiavi con Object.keys()](#getting-object-keys-using-objectkeys)
+ - [Ottenere i valori con Object.values()](#getting-object-values-using-objectvalues)
+ - [Ottenere chiavi e valori con Object.entries()](#getting-object-keys-and-values-using-objectentries)
+ - [Controllare le proprietà usando hasOwnProperty()](#checking-properties-using-hasownproperty)
+ - [💻 Esercizi](#-exercises)
+ - [Esercizi: Livello 1](#exercises-level-1)
+ - [Esercizi: Livello 2](#exercises-level-2)
+ - [Esercizi: Livello 3](#exercises-level-3)
+
+# 📔 Giorno 8
+
+## Scope
+
+La variabile è un elemento fondamentale della programmazione. Dichiariamo una variabile per memorizzare diversi tipi di dati. Per dichiarare una variabile si usano le parole chiave _var_, _let_ e _const_. Una variabile può essere dichiarata in diversi ambiti. In questa sezione vedremo l'ambito delle variabili, l'ambito delle variabili quando usiamo var o let.
+Gli ambiti delle variabili possono essere:
+
+- Global
+- Local
+
+Le variabili possono essere dichiarate a livello globale o locale. Vedremo sia l'ambito globale che quello locale.
+Qualsiasi cosa dichiarata senza let, var o const ha uno scope globale.
+
+Immaginiamo di avere un file scope.js.
+
+### Window Global Object
+
+Senza usare console.log(), aprite il browser e verificate: vedrete il valore di a e b se scrivete a o b nel browser. Ciò significa che a e b sono già disponibili nella finestra.
+
+```js
+//scope.js
+a = 'JavaScript' // declaring a variable without let or const make it available in window object and this found anywhere
+b = 10 // this is a global scope variable and found in the window object
+function letsLearnScope() {
+ console.log(a, b)
+ if (true) {
+ console.log(a, b)
+ }
+}
+console.log(a, b) // accessible
+```
+
+### Global scope
+
+Una variabile dichiarata globalmente può essere accessibile in qualsiasi punto dello stesso file. Ma il termine globale è relativo. Può essere globale al file o globale rispetto a qualche blocco di codice.
+
+```js
+//scope.js
+let a = 'JavaScript' // is a global scope it will be found anywhere in this file
+let b = 10 // is a global scope it will be found anywhere in this file
+function letsLearnScope() {
+ console.log(a, b) // JavaScript 10, accessible
+ if (true) {
+ let a = 'Python'
+ let b = 100
+ console.log(a, b) // Python 100
+ }
+ console.log(a, b)
+}
+letsLearnScope()
+console.log(a, b) // JavaScript 10, accessible
+```
+
+### Local scope
+
+Una variabile dichiarata come locale può essere accessibile solo in determinati blocchi di codice.
+
+- Block Scope
+- Function Scope
+
+```js
+//scope.js
+let a = 'JavaScript' // is a global scope it will be found anywhere in this file
+let b = 10 // is a global scope it will be found anywhere in this file
+// Function scope
+function letsLearnScope() {
+ console.log(a, b) // JavaScript 10, accessible
+ let value = false
+// block scope
+ if (true) {
+ // we can access from the function and outside the function but
+ // variables declared inside the if will not be accessed outside the if block
+ let a = 'Python'
+ let b = 20
+ let c = 30
+ let d = 40
+ value = !value
+ console.log(a, b, c, value) // Python 20 30 true
+ }
+ // we can not access c because c's scope is only the if block
+ console.log(a, b, value) // JavaScript 10 true
+}
+letsLearnScope()
+console.log(a, b) // JavaScript 10, accessible
+```
+
+Ora avete compreso l'ambito. Una variabile dichiarata con *var* ha un ambito solo per la funzione, mentre una variabile dichiarata con *let* o *const* ha un ambito di blocco (blocco funzione, blocco if, blocco loop, ecc.). Il blocco in JavaScript è un codice compreso tra due parentesi graffe ({}).
+
+```js
+//scope.js
+function letsLearnScope() {
+ var gravity = 9.81
+ console.log(gravity)
+
+}
+// console.log(gravity), Uncaught ReferenceError: gravity is not defined
+
+if (true){
+ var gravity = 9.81
+ console.log(gravity) // 9.81
+}
+console.log(gravity) // 9.81
+
+for(var i = 0; i < 3; i++){
+ console.log(i) // 0, 1, 2
+}
+console.log(i) // 3
+
+```
+
+In ES6 e versioni successive esistono *let* e *const*, per cui non si soffrirà della subdola presenza di *var*. Quando usiamo *let*, la nostra variabile ha uno scope di blocco e non infetterà altre parti del nostro codice.
+
+```js
+//scope.js
+function letsLearnScope() {
+ // you can use let or const, but gravity is constant I prefer to use const
+ const gravity = 9.81
+ console.log(gravity)
+
+}
+// console.log(gravity), Uncaught ReferenceError: gravity is not defined
+
+if (true){
+ const gravity = 9.81
+ console.log(gravity) // 9.81
+}
+// console.log(gravity), Uncaught ReferenceError: gravity is not defined
+
+for(let i = 0; i < 3; i++){
+ console.log(i) // 0, 1, 2
+}
+// console.log(i), Uncaught ReferenceError: i is not defined
+
+```
+
+Gli ambiti *let* e *const* sono gli stessi. La differenza è solo la riassegnazione. Non possiamo cambiare o riassegnare il valore della variabile `const`. Vi consiglio vivamente di usare *let* e *const*; usando *let* e *const* scriverete codice pulito ed eviterete errori difficili da debuggare. Come regola generale, si può usare *let* per qualsiasi valore che cambia, *const* per qualsiasi valore costante e per un array, un oggetto, una funzione freccia e un'espressione di funzione.
+
+## 📔 Object
+
+Tutto può essere un oggetto e gli oggetti hanno proprietà e le proprietà hanno valori, quindi un oggetto è una coppia chiave-valore. L'ordine delle chiavi non è riservato, oppure non c'è un ordine.
+Per creare un letterale di oggetto, si usano due parentesi graffe.
+
+### Creare un oggetto vuoto
+
+An empty object
+
+```js
+const person = {}
+```
+
+### Creare un oggetto con valori
+
+Ora, l'oggetto persona ha le proprietà firstName, lastName, age, location, skills e isMarried. Il valore delle proprietà o delle chiavi può essere una stringa, un numero, un booleano, un oggetto, null, undefined o una funzione.
+
+Vediamo alcuni esempi di oggetti. Ogni chiave ha un valore nell'oggetto.
+
+```js
+const rectangle = {
+ length: 20,
+ width: 20
+}
+console.log(rectangle) // {length: 20, width: 20}
+
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Node',
+ 'MongoDB',
+ 'Python',
+ 'D3.js'
+ ],
+ isMarried: true
+}
+console.log(person)
+```
+
+### Ottenere i valori dall'oggetto
+
+Possiamo accedere ai valori degli oggetti utilizzando due metodi:
+
+- usando . seguito dal nome della chiave, se il nome della chiave è una sola parola
+- usando le parentesi quadre e le virgolette
+
+```js
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Node',
+ 'MongoDB',
+ 'Python',
+ 'D3.js'
+ ],
+ getFullName: function() {
+ return `${this.firstName}${this.lastName}`
+ },
+ 'phone number': '+3584545454545'
+}
+
+// accessing values using .
+console.log(person.firstName)
+console.log(person.lastName)
+console.log(person.age)
+console.log(person.location) // undefined
+
+// value can be accessed using square bracket and key name
+console.log(person['firstName'])
+console.log(person['lastName'])
+console.log(person['age'])
+console.log(person['age'])
+console.log(person['location']) // undefined
+
+// for instance to access the phone number we only use the square bracket method
+console.log(person['phone number'])
+```
+
+### Creare i metodi di un oggetto
+
+Ora, l'oggetto persona ha le proprietà getFullName. Il metodo getFullName è una funzione all'interno dell'oggetto persona e lo chiamiamo metodo dell'oggetto. La parola chiave _this_ si riferisce all'oggetto stesso. Possiamo usare la parola _this_ per accedere ai valori di diverse proprietà dell'oggetto. Non possiamo usare una funzione freccia come metodo oggetto, perché la parola this si riferisce alla finestra all'interno di una funzione freccia invece che all'oggetto stesso. Esempio di oggetto:
+
+```js
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Node',
+ 'MongoDB',
+ 'Python',
+ 'D3.js'
+ ],
+ getFullName: function() {
+ return `${this.firstName} ${this.lastName}`
+ }
+}
+
+console.log(person.getFullName())
+// Asabeneh Yetayeh
+```
+
+### Impostare nuove chiavi per un oggetto
+
+Un oggetto è una struttura dati mutabile e si può modificare il contenuto di un oggetto dopo la sua creazione.
+
+Impostazione di nuove chiavi in un oggetto
+
+```js
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Node',
+ 'MongoDB',
+ 'Python',
+ 'D3.js'
+ ],
+ getFullName: function() {
+ return `${this.firstName} ${this.lastName}`
+ }
+}
+person.nationality = 'Ethiopian'
+person.country = 'Finland'
+person.title = 'teacher'
+person.skills.push('Meteor')
+person.skills.push('SasS')
+person.isMarried = true
+
+person.getPersonInfo = function() {
+ let skillsWithoutLastSkill = this.skills
+ .splice(0, this.skills.length - 1)
+ .join(', ')
+ let lastSkill = this.skills.splice(this.skills.length - 1)[0]
+
+ let skills = `${skillsWithoutLastSkill}, and ${lastSkill}`
+ let fullName = this.getFullName()
+ let statement = `${fullName} is a ${this.title}.\nHe lives in ${this.country}.\nHe teaches ${skills}.`
+ return statement
+}
+console.log(person)
+console.log(person.getPersonInfo())
+```
+
+```sh
+Asabeneh Yetayeh is a teacher.
+He lives in Finland.
+He teaches HTML, CSS, JavaScript, React, Node, MongoDB, Python, D3.js, Meteor, and SasS.
+```
+
+### Metodi della classe Object
+
+Esistono diversi metodi per manipolare un oggetto. Vediamo alcuni dei metodi disponibili.
+
+_Object.assign_: Per copiare un oggetto senza modificare l'oggetto originale.
+
+```js
+const person = {
+ firstName: 'Asabeneh',
+ age: 250,
+ country: 'Finland',
+ city:'Helsinki',
+ skills: ['HTML', 'CSS', 'JS'],
+ title: 'teacher',
+ address: {
+ street: 'Heitamienkatu 16',
+ pobox: 2002,
+ city: 'Helsinki'
+ },
+ getPersonInfo: function() {
+ return `I am ${this.firstName} and I live in ${this.city}, ${this.country}. I am ${this.age}.`
+ }
+}
+
+//Object methods: Object.assign, Object.keys, Object.values, Object.entries
+//hasOwnProperty
+
+const copyPerson = Object.assign({}, person)
+console.log(copyPerson)
+```
+
+#### Ottenere le chiavi con Object.keys()
+
+_Object.keys_: Per ottenere le chiavi o le proprietà di un oggetto come array
+
+```js
+const keys = Object.keys(copyPerson)
+console.log(keys) //['firstName', 'age', 'country','city', 'skills','title', 'address', 'getPersonInfo']
+const address = Object.keys(copyPerson.address)
+console.log(address) //['street', 'pobox', 'city']
+```
+
+#### Ottenere i valori con Object.values()
+
+_Object.values_:Per ottenere i valori di un oggetto come array
+
+```js
+const values = Object.values(copyPerson)
+console.log(values)
+```
+
+#### Ottenere chiavi e valori con Object.entries()
+
+_Object.entries_: Per ottenere le chiavi e i valori di un array
+
+```js
+const entries = Object.entries(copyPerson)
+console.log(entries)
+```
+
+#### Controllare le proprietà usando hasOwnProperty()
+
+_hasOwnProperty_: Per verificare se una chiave o una proprietà specifica esiste in un oggetto
+
+```js
+console.log(copyPerson.hasOwnProperty('name'))
+console.log(copyPerson.hasOwnProperty('score'))
+```
+
+🌕 Sei sorprendente. Ora sei super caricato con il potere degli oggetti. Hai appena completato le sfide dell'ottavo giorno e sei a 8 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## 💻 Esercizi
+
+### Esercizi: Livello 1
+
+1. Creare un oggetto vuoto chiamato cane
+1. Stampare l'oggetto cane sulla console
+1. Aggiungere all'oggetto cane le proprietà nome, zampe, colore, età e abbaio. La proprietà abbaia è un metodo che restituisce _woof woof_.
+1. Ottenere il valore di nome, zampe, colore, età e abbaio dall'oggetto cane
+1. Impostare nuove proprietà per l'oggetto cane: breed, getDogInfo
+
+### Esercizi: Livello 2
+
+1. Individuare la persona che ha molte competenze nell'oggetto utente.
+1. Contare gli utenti connessi, contare gli utenti che hanno più di 50 punti dal seguente oggetto.
+
+ ````js
+ const users = {
+ Alex: {
+ email: 'alex@alex.com',
+ skills: ['HTML', 'CSS', 'JavaScript'],
+ age: 20,
+ isLoggedIn: false,
+ points: 30
+ },
+ Asab: {
+ email: 'asab@asab.com',
+ skills: ['HTML', 'CSS', 'JavaScript', 'Redux', 'MongoDB', 'Express', 'React', 'Node'],
+ age: 25,
+ isLoggedIn: false,
+ points: 50
+ },
+ Brook: {
+ email: 'daniel@daniel.com',
+ skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux'],
+ age: 30,
+ isLoggedIn: true,
+ points: 50
+ },
+ Daniel: {
+ email: 'daniel@alex.com',
+ skills: ['HTML', 'CSS', 'JavaScript', 'Python'],
+ age: 20,
+ isLoggedIn: false,
+ points: 40
+ },
+ John: {
+ email: 'john@john.com',
+ skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux', 'Node.js'],
+ age: 20,
+ isLoggedIn: true,
+ points: 50
+ },
+ Thomas: {
+ email: 'thomas@thomas.com',
+ skills: ['HTML', 'CSS', 'JavaScript', 'React'],
+ age: 20,
+ isLoggedIn: false,
+ points: 40
+ },
+ Paul: {
+ email: 'paul@paul.com',
+ skills: ['HTML', 'CSS', 'JavaScript', 'MongoDB', 'Express', 'React', 'Node'],
+ age: 20,
+ isLoggedIn: false,
+ points: 40
+ }
+ }```
+
+1. Trovare persone che sono sviluppatori di stack MERN dall'oggetto degli utenti
+1. Impostare il proprio nome nell'oggetto utenti senza modificare l'oggetto utenti originale.
+1. Ottenere tutte le chiavi o le proprietà dell'oggetto users
+1. Ottenere tutti i valori dell'oggetto users
+1. Utilizzare l'oggetto countries per stampare il nome di un paese, la capitale, la popolazione e le lingue.
+
+### Esercizi: Livello 3
+
+1. Creare un oggetto letterale chiamato _contopersona_. Ha le proprietà _nome, cognome, entrate, spese_ e i metodi _entrate totali, uscite totali, informazioni sul conto, aggiungi entrate, aggiungi spese_ e _bilancio del conto_. Entrate è un insieme di entrate e relativa descrizione e spese è un insieme di entrate e relativa descrizione.
+2. **** Le domande:2, 3 e 4 si basano sui seguenti due array: utenti e prodotti ()
+
+ ```js
+ const users = [
+ {
+ _id: 'ab12ex',
+ username: 'Alex',
+ email: 'alex@alex.com',
+ password: '123123',
+ createdAt:'08/01/2020 9:00 AM',
+ isLoggedIn: false
+ },
+ {
+ _id: 'fg12cy',
+ username: 'Asab',
+ email: 'asab@asab.com',
+ password: '123456',
+ createdAt:'08/01/2020 9:30 AM',
+ isLoggedIn: true
+ },
+ {
+ _id: 'zwf8md',
+ username: 'Brook',
+ email: 'brook@brook.com',
+ password: '123111',
+ createdAt:'08/01/2020 9:45 AM',
+ isLoggedIn: true
+ },
+ {
+ _id: 'eefamr',
+ username: 'Martha',
+ email: 'martha@martha.com',
+ password: '123222',
+ createdAt:'08/01/2020 9:50 AM',
+ isLoggedIn: false
+ },
+ {
+ _id: 'ghderc',
+ username: 'Thomas',
+ email: 'thomas@thomas.com',
+ password: '123333',
+ createdAt:'08/01/2020 10:00 AM',
+ isLoggedIn: false
+ }
+ ];
+
+ const products = [
+ {
+ _id: 'eedfcf',
+ name: 'mobile phone',
+ description: 'Huawei Honor',
+ price: 200,
+ ratings: [
+ { userId: 'fg12cy', rate: 5 },
+ { userId: 'zwf8md', rate: 4.5 }
+ ],
+ likes: []
+ },
+ {
+ _id: 'aegfal',
+ name: 'Laptop',
+ description: 'MacPro: System Darwin',
+ price: 2500,
+ ratings: [],
+ likes: ['fg12cy']
+ },
+ {
+ _id: 'hedfcg',
+ name: 'TV',
+ description: 'Smart TV:Procaster',
+ price: 400,
+ ratings: [{ userId: 'fg12cy', rate: 5 }],
+ likes: ['fg12cy']
+ }
+ ]
+ ```
+
+ Si immagini di ottenere la raccolta di utenti di cui sopra da un database MongoDB.
+ a. Creare una funzione chiamata signUp che consenta all'utente di aggiungersi all'insieme. Se l'utente esiste, informarlo che ha già un account.
+ b. Creare una funzione chiamata signIn che consenta all'utente di accedere all'applicazione.
+
+3. L'array prodotti ha tre elementi e ognuno di essi ha sei proprietà.
+ a. Creare una funzione chiamata rateProduct che valuta il prodotto.
+ b. Creare una funzione chiamata mediaValutazione che calcola la media delle valutazioni di un prodotto.
+
+4. Creare una funzione chiamata likeProduct. Questa funzione aiuta a dare un like al prodotto se non è piaciuto e a rimuovere il like se è piaciuto.
+
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 7](../07_Day_Functions/07_day_functions.md) | [Day 9 >>](../09_Day_Higher_order_functions/09_day_higher_order_functions.md)
diff --git a/Italian/09_Day_Higher_order_functions/09_day_higher_order_functions.md b/Italian/09_Day_Higher_order_functions/09_day_higher_order_functions.md
new file mode 100644
index 000000000..32567cdb3
--- /dev/null
+++ b/Italian/09_Day_Higher_order_functions/09_day_higher_order_functions.md
@@ -0,0 +1,705 @@
+
+
+[<< Day 8](../08_Day_Objects/08_day_objects.md) | [Day 10 >>](../10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md)
+
+
+
+- [Day 9](#day-9)
+ - [Higher Order Function](#higher-order-function)
+ - [Callback](#callback)
+ - [restituire una funzione](#returning-function)
+ - [Impostare il tempo](#setting-time)
+ - [Impostare un intervallo con la funzione setInterval](#setting-interval-using-a-setinterval-function)
+ - [Impostare il tempo di esecuzione di una callback con setTimeout](#setting-a-time-using-a-settimeout)
+ - [Functional Programming](#functional-programming)
+ - [forEach](#foreach)
+ - [map](#map)
+ - [filter](#filter)
+ - [reduce](#reduce)
+ - [every](#every)
+ - [find](#find)
+ - [findIndex](#findindex)
+ - [some](#some)
+ - [sort](#sort)
+ - [Ordinare i valori string](#sorting-string-values)
+ - [Ordinare i valori numbers](#sorting-numeric-values)
+ - [Ordinare i valori Object](#sorting-object-arrays)
+ - [💻 Esercizi](#-exercises)
+ - [Esercizi: Livello 1](#exercises-level-1)
+ - [Esercizi: Livello 2](#exercises-level-2)
+ - [Esercizi: Livello 3](#exercises-level-3)
+
+# Day 9
+
+## Higher Order Function
+
+Le funzioni di ordine superiore sono funzioni che accettano un'altra funzione come parametro o restituiscono una funzione come valore. La funzione passata come parametro è chiamata callback.
+
+### Callback
+
+Un callback è una funzione che può essere passata come parametro ad altre funzioni. Si veda l'esempio seguente.
+
+```js
+// a callback function, the name of the function could be any name
+const callback = (n) => {
+ return n ** 2
+}
+
+// function that takes other function as a callback
+function cube(callback, n) {
+ return callback(n) * n
+}
+
+console.log(cube(callback, 3))
+```
+
+### restituire una funzione
+
+Le funzioni di ordine superiore restituiscono la funzione come valore
+
+```js
+// Higher order function returning an other function
+const higherOrder = n => {
+ const doSomething = m => {
+ const doWhatEver = t => {
+ return 2 * n + 3 * m + t
+ }
+ return doWhatEver
+ }
+ return doSomething
+}
+console.log(higherOrder(2)(3)(10))
+```
+
+Vediamo come utilizzare le funzioni di richiamo. Ad esempio, il metodo _forEach_ utilizza il richiamo.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+const sumArray = arr => {
+ let sum = 0
+ const callback = function(element) {
+ sum += element
+ }
+ arr.forEach(callback)
+ return sum
+
+}
+console.log(sumArray(numbers))
+```
+
+```sh
+15
+```
+
+L'esempio precedente può essere semplificato come segue:
+
+```js
+const numbers = [1, 2, 3, 4]
+
+const sumArray = arr => {
+ let sum = 0
+ arr.forEach(function(element) {
+ sum += element
+ })
+ return sum
+
+}
+console.log(sumArray(numbers))
+```
+
+```sh
+15
+```
+
+### Impostare il tempo
+
+In JavaScript possiamo eseguire alcune attività in un certo intervallo di tempo oppure possiamo programmare (attendere) l'esecuzione di alcune attività.
+
+- setInterval
+- setTimeout
+
+#### Impostare un intervallo con la funzione setInterval
+
+In JavaScript, si usa la funzione di ordine superiore setInterval per eseguire un'attività in modo continuo in un certo intervallo di tempo. Il metodo globale setInterval accetta una funzione di callback e una durata come parametro. La durata è espressa in millisecondi e il callback sarà sempre richiamato in quell'intervallo di tempo.
+
+```js
+// syntax
+function callback() {
+ // code goes here
+}
+setInterval(callback, duration)
+```
+
+```js
+function sayHello() {
+ console.log('Hello')
+}
+setInterval(sayHello, 1000) // it prints hello in every second, 1000ms is 1s
+```
+
+#### Impostare il tempo di esecuzione di una callback con setTimeout
+
+In JavaScript, si usa la funzione di ordine superiore setTimeout per eseguire un'azione in un momento futuro. Il metodo globale setTimeout accetta una funzione di callback e una durata come parametro. La durata è espressa in millisecondi e il callback attende per questo lasso di tempo.
+
+```js
+// syntax
+function callback() {
+ // code goes here
+}
+setTimeout(callback, duration) // duration in milliseconds
+```
+
+```js
+function sayHello() {
+ console.log('Hello')
+}
+setTimeout(sayHello, 2000) // it prints hello after it waits for 2 seconds.
+```
+
+## Functional Programming
+
+Invece di scrivere cicli regolari, l'ultima versione di JavaScript ha introdotto molti metodi integrati che possono aiutarci a risolvere problemi complicati. Tutti i metodi incorporati richiedono una funzione di callback. In questa sezione vedremo _forEach_, _map_, _filter_, _reduce_, _find_, _every_, _some_ e _sort_.
+
+### forEach
+
+_forEach_: Itera gli elementi di un array. Si usa _forEach_ solo con gli array. Richiede una funzione di callback con elementi, un parametro indice e l'array stesso. L'indice e l'array sono facoltativi.
+
+```js
+arr.forEach(function (element, index, arr) {
+ console.log(index, element, arr)
+})
+// The above code can be written using arrow function
+arr.forEach((element, index, arr) => {
+ console.log(index, element, arr)
+})
+// The above code can be written using arrow function and explicit return
+arr.forEach((element, index, arr) => console.log(index, element, arr))
+```
+
+```js
+let sum = 0;
+const numbers = [1, 2, 3, 4, 5];
+numbers.forEach(num => console.log(num))
+console.log(sum)
+```
+
+```sh
+1
+2
+3
+4
+5
+```
+
+```js
+let sum = 0;
+const numbers = [1, 2, 3, 4, 5];
+numbers.forEach(num => sum += num)
+
+console.log(sum)
+```
+
+```sh
+15
+```
+
+```js
+const countries = ['Finland', 'Denmark', 'Sweden', 'Norway', 'Iceland']
+countries.forEach((element) => console.log(element.toUpperCase()))
+```
+
+```sh
+FINLAND
+DENMARK
+SWEDEN
+NORWAY
+ICELAND
+```
+
+### map
+
+_map_: Itera gli elementi di un array e modifica gli elementi dell'array. Prende una funzione di callback con elementi, indice, parametro dell'array e restituisce un nuovo array.
+
+```js
+const modifiedArray = arr.map(function (element, index, arr) {
+ return element
+})
+```
+
+```js
+/*Arrow function and explicit return
+const modifiedArray = arr.map((element,index) => element);
+*/
+//Example
+const numbers = [1, 2, 3, 4, 5]
+const numbersSquare = numbers.map((num) => num * num)
+
+console.log(numbersSquare)
+```
+
+```sh
+[1, 4, 9, 16, 25]
+```
+
+```js
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+const namesToUpperCase = names.map((name) => name.toUpperCase())
+console.log(namesToUpperCase)
+```
+
+```sh
+['ASABENEH', 'MATHIAS', 'ELIAS', 'BROOK']
+```
+
+```js
+const countries = [
+ 'Albania',
+ 'Bolivia',
+ 'Canada',
+ 'Denmark',
+ 'Ethiopia',
+ 'Finland',
+ 'Germany',
+ 'Hungary',
+ 'Ireland',
+ 'Japan',
+ 'Kenya',
+]
+const countriesToUpperCase = countries.map((country) => country.toUpperCase())
+console.log(countriesToUpperCase)
+
+/*
+// Arrow function
+const countriesToUpperCase = countries.map((country) => {
+ return country.toUpperCase();
+})
+//Explicit return arrow function
+const countriesToUpperCase = countries.map(country => country.toUpperCase());
+*/
+```
+
+```sh
+['ALBANIA', 'BOLIVIA', 'CANADA', 'DENMARK', 'ETHIOPIA', 'FINLAND', 'GERMANY', 'HUNGARY', 'IRELAND', 'JAPAN', 'KENYA']
+```
+
+```js
+const countriesFirstThreeLetters = countries.map((country) =>
+ country.toUpperCase().slice(0, 3)
+)
+```
+
+```sh
+ ["ALB", "BOL", "CAN", "DEN", "ETH", "FIN", "GER", "HUN", "IRE", "JAP", "KEN"]
+```
+
+### filter
+
+_Filter_: Filtra gli elementi che soddisfano le condizioni di filtraggio e restituisce un nuovo array.
+
+```js
+//Filter countries containing land
+const countriesContainingLand = countries.filter((country) =>
+ country.includes('land')
+)
+console.log(countriesContainingLand)
+```
+
+```sh
+['Finland', 'Ireland']
+```
+
+```js
+const countriesEndsByia = countries.filter((country) => country.endsWith('ia'))
+console.log(countriesEndsByia)
+```
+
+```sh
+['Albania', 'Bolivia','Ethiopia']
+```
+
+```js
+const countriesHaveFiveLetters = countries.filter(
+ (country) => country.length === 5
+)
+console.log(countriesHaveFiveLetters)
+```
+
+```sh
+['Japan', 'Kenya']
+```
+
+```js
+const scores = [
+ { name: 'Asabeneh', score: 95 },
+ { name: 'Lidiya', score: 98 },
+ { name: 'Mathias', score: 80 },
+ { name: 'Elias', score: 50 },
+ { name: 'Martha', score: 85 },
+ { name: 'John', score: 100 },
+]
+
+const scoresGreaterEighty = scores.filter((score) => score.score > 80)
+console.log(scoresGreaterEighty)
+```
+
+```sh
+[{name: 'Asabeneh', score: 95}, { name: 'Lidiya', score: 98 },{name: 'Martha', score: 85},{name: 'John', score: 100}]
+```
+
+### reduce
+
+_reduce_: Reduce accetta una funzione di richiamo. La funzione di richiamo prende come parametro l'accumulatore, il valore corrente e il valore iniziale opzionale e restituisce un singolo valore. È buona norma definire un valore iniziale per il valore dell'accumulatore. Se non si specifica questo parametro, per impostazione predefinita l'accumulatore otterrà il "primo valore" dell'array. Se la nostra matrice è una matrice _vuota_, allora `Javascript` lancerà un errore.
+
+```js
+arr.reduce((acc, cur) => {
+ // some operations goes here before returning a value
+ return
+}, initialValue)
+```
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+const sum = numbers.reduce((acc, cur) => acc + cur, 0)
+
+console.log(sum)
+```
+
+```js
+15
+```
+
+### every
+
+_every_: Controlla se tutti gli elementi sono simili in un aspetto. Restituisce un booleano
+
+```js
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+const areAllStr = names.every((name) => typeof name === 'string') // Are all strings?
+
+console.log(areAllStr)
+```
+
+```sh
+true
+```
+
+```js
+const bools = [true, true, true, true]
+const areAllTrue = bools.every((b) => b === true) // Are all true?
+
+console.log(areAllTrue) // true
+```
+
+```sh
+true
+
+```
+
+### find
+
+_find_: Restituisce il primo elemento che soddisfa la condizione
+
+```js
+const ages = [24, 22, 25, 32, 35, 18]
+const age = ages.find((age) => age < 20)
+
+console.log(age)
+```
+
+```js
+18
+```
+
+```js
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+const result = names.find((name) => name.length > 7)
+console.log(result)
+```
+
+```sh
+Asabeneh
+```
+
+```js
+const scores = [
+ { name: 'Asabeneh', score: 95 },
+ { name: 'Mathias', score: 80 },
+ { name: 'Elias', score: 50 },
+ { name: 'Martha', score: 85 },
+ { name: 'John', score: 100 },
+]
+
+const score = scores.find((user) => user.score > 80)
+console.log(score)
+```
+
+```sh
+{ name: "Asabeneh", score: 95 }
+```
+
+### findIndex
+
+_findIndex_: Restituisce la posizione del primo elemento che soddisfa la condizione
+
+```js
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+const ages = [24, 22, 25, 32, 35, 18]
+
+const result = names.findIndex((name) => name.length > 7)
+console.log(result) // 0
+
+const age = ages.findIndex((age) => age < 20)
+console.log(age) // 5
+```
+
+### some
+
+_some_: Controlla se alcuni elementi sono simili in un aspetto. Restituisce un booleano
+
+```js
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+const bools = [true, true, true, true]
+
+const areSomeTrue = bools.some((b) => b === true)
+
+console.log(areSomeTrue) //true
+```
+
+```js
+const areAllStr = names.some((name) => typeof name === 'number') // Are all strings ?
+console.log(areAllStr) // false
+```
+
+### sort
+
+_sort_: I metodi di ordinamento dispongono gli elementi dell'array in ordine crescente o decrescente. Per impostazione predefinita, il metodo **_sort()_** ordina i valori come stringhe, il che funziona bene per gli elementi dell'array di stringhe, ma non per i numeri. Se i valori numerici vengono ordinati come stringhe, il risultato è sbagliato. Il metodo Sort modifica l'array originale. Si consiglia di copiare i dati originali prima di iniziare a usare il metodo _sort_.
+
+#### Ordinare i valori string
+
+```js
+const products = ['Milk', 'Coffee', 'Sugar', 'Honey', 'Apple', 'Carrot']
+console.log(products.sort()) // ['Apple', 'Carrot', 'Coffee', 'Honey', 'Milk', 'Sugar']
+//Now the original products array is also sorted
+```
+
+#### Ordinare i valori numbers
+
+Come si può vedere nell'esempio seguente, 100 è arrivato per primo dopo l'ordinamento in ordine crescente. L'ordinamento converte gli elementi in stringhe, poiché '100' e altri numeri sono stati confrontati, 1 che all'inizio della stringa '100' è diventato il più piccolo. Per evitare ciò, utilizziamo una funzione di richiamo di confronto all'interno del metodo sort, che restituisce un valore negativo, zero o positivo.
+
+```js
+const numbers = [9.81, 3.14, 100, 37]
+// Using sort method to sort number items provide a wrong result. see below
+console.log(numbers.sort()) //[100, 3.14, 37, 9.81]
+numbers.sort(function (a, b) {
+ return a - b
+})
+
+console.log(numbers) // [3.14, 9.81, 37, 100]
+
+numbers.sort(function (a, b) {
+ return b - a
+})
+console.log(numbers) //[100, 37, 9.81, 3.14]
+```
+
+#### Ordinare i valori Object
+
+Quando si ordinano gli oggetti in una matrice, si utilizza la chiave dell'oggetto da confrontare. Vediamo l'esempio seguente.
+
+```js
+objArr.sort(function (a, b) {
+ if (a.key < b.key) return -1
+ if (a.key > b.key) return 1
+ return 0
+})
+
+// or
+
+objArr.sort(function (a, b) {
+ if (a['key'] < b['key']) return -1
+ if (a['key'] > b['key']) return 1
+ return 0
+})
+
+const users = [
+ { name: 'Asabeneh', age: 150 },
+ { name: 'Brook', age: 50 },
+ { name: 'Eyob', age: 100 },
+ { name: 'Elias', age: 22 },
+]
+users.sort((a, b) => {
+ if (a.age < b.age) return -1
+ if (a.age > b.age) return 1
+ return 0
+})
+console.log(users) // sorted ascending
+// [{…}, {…}, {…}, {…}]
+```
+
+🌕Stai andando alla grande. Non arrenderti mai perché le grandi cose richiedono tempo. Hai appena completato le sfide del nono giorno e sei a 9 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## 💻 Esercizi
+
+### Esercizi: Livello 1
+
+```js
+const countries = ['Finland', 'Sweden', 'Denmark', 'Norway', 'IceLand']
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+const products = [
+ { product: 'banana', price: 3 },
+ { product: 'mango', price: 6 },
+ { product: 'potato', price: ' ' },
+ { product: 'avocado', price: 8 },
+ { product: 'coffee', price: 10 },
+ { product: 'tea', price: '' },
+]
+```
+
+1. Spiegare la differenza tra **_forEach, map, filter e reduce_**.
+2. Definire una funzione di callback prima di utilizzarla in forEach, map, filter o reduce.
+3. Usate **_forEach_** per registrare in console.log ogni paese nell'array dei paesi.
+4. Usare **_forEach_** per registrare in console.log ogni nome nell'array dei nomi.
+5. Usare **_forEach_** per registrare in console.log ogni numero nell'array numbers.
+6. Usare **_map_** per creare un nuovo array cambiando ogni paese in maiuscolo nell'array paesi.
+7. Usare **_map_** per creare un array di paesi di lunghezza pari a quella dell'array paesi.
+8. Usare **_map_** per creare un nuovo array cambiando ogni numero in quadrato nell'array dei numeri.
+9. Usare **_map_** per cambiare ogni nome in maiuscolo nell'array dei nomi.
+10. Usare **_map_** per mappare l'array dei prodotti ai prezzi corrispondenti.
+11. Utilizzare **_filtro_** per filtrare i paesi contenenti **_terra_**.
+12. Usare **_filtro_** per filtrare i paesi con sei caratteri.
+13. Usare **_filtro_** per filtrare i paesi contenenti sei lettere o più nell'array dei paesi.
+14. Usare **_filter_** per filtrare i paesi che iniziano con 'E';
+15. Usare **_filter_** per filtrare solo i prezzi con valori.
+16. Dichiarare una funzione chiamata getStringLists che accetta un array come parametro e restituisce un array contenente solo elementi stringa.
+17. Usare **_reduce_** per sommare tutti i numeri nell'array numbers.
+18. Usare **_reduce_** per concatenare tutti i paesi e produrre questa frase: **_Estonia, Finlandia, Svezia, Danimarca, Norvegia e IceLand sono paesi del Nord Europa_**.
+19. Spiegate la differenza tra **alcuni_** e **tutti_**.
+20. Usate **_qualche_** per verificare se la lunghezza di alcuni nomi è maggiore di sette nell'array dei nomi.
+21. Usare **_every_** per verificare se tutti i paesi contengono la parola land (terra).
+22. Spiegate la differenza tra **_find_** e **_findIndex_**.
+23. Usate **_find_** per trovare il primo paese che contiene solo sei lettere nell'array dei paesi.
+24. Usare **_findIndex_** per trovare la posizione del primo paese contenente solo sei lettere nell'array dei paesi.
+25. Usare **_findIndex_** per trovare la posizione di **_Norvegia_** se non esiste nell'array si otterrà -1.
+26. Usare **_findIndex_** per trovare la posizione di **_Russia_** se non esiste nell'array si otterrà -1.
+
+### Esercizi: Livello 2
+
+1. Trovare il prezzo totale dei prodotti concatenando due o più iteratori di array (es. arr.map(callback).filter(callback).reduce(callback))
+1. Trovare la somma dei prezzi dei prodotti usando solo reduce(callback))
+1. Dichiarare una funzione chiamata **_categorizeCountries_** che restituisce un array di Paesi che hanno un modello comune (l'array dei Paesi si trova in questo repository come countries.js (ad esempio 'land', 'ia', 'island', 'stan')).
+1. Creare una funzione che restituisca un array di oggetti, ovvero la lettera e il numero di volte in cui la lettera inizia con il nome di un paese.
+1. Dichiarare una funzione **_getFirstTenCountries_** e restituire un array di dieci paesi. Utilizzare una programmazione funzionale diversa per lavorare sull'array countries.js
+1. Dichiarare una funzione **_getLastTenCountries_** che restituisca gli ultimi dieci paesi dell'array countries.
+1. Scoprite quale _lettera_ viene usata molte _volte_ come iniziale del nome di un paese dall'array dei paesi (es. Finlandia, Figi, Francia ecc.).
+
+### Esercizi: Livello 3
+
+1. Utilizzate le informazioni sui Paesi, contenute nella cartella dei dati. Ordinare i Paesi per nome, per capitale, per popolazione
+1. \*\*\* Trovare le 10 lingue più parlate:
+
+ ````js
+ // Your output should look like this
+ console.log(mostSpokenLanguages(countries, 10))
+ [
+ {country: 'English',count:91},
+ {country: 'French',count:45},
+ {country: 'Arabic',count:25},
+ {country: 'Spanish',count:24},
+ {country:'Russian',count:9},
+ {country:'Portuguese', count:9},
+ {country:'Dutch',count:8},
+ {country:'German',count:7},
+ {country:'Chinese',count:5},
+ {country:'Swahili',count:4}
+ ]
+
+ // Your output should look like this
+ console.log(mostSpokenLanguages(countries, 3))
+ [
+ {country: 'English',count: 91},
+ {country: 'French',count: 45},
+ {country: 'Arabic',count: 25},
+ ]```
+
+ ````
+
+2. \*\*\* Usare il file countries_data.js per creare una funzione che crei i dieci paesi più popolosi.
+
+ ````js
+ console.log(mostPopulatedCountries(countries, 10))
+
+ [
+ {country: 'China', population: 1377422166},
+ {country: 'India', population: 1295210000},
+ {country: 'United States of America', population: 323947000},
+ {country: 'Indonesia', population: 258705000},
+ {country: 'Brazil', population: 206135893},
+ {country: 'Pakistan', population: 194125062},
+ {country: 'Nigeria', population: 186988000},
+ {country: 'Bangladesh', population: 161006790},
+ {country: 'Russian Federation', population: 146599183},
+ {country: 'Japan', population: 126960000}
+ ]
+
+ console.log(mostPopulatedCountries(countries, 3))
+ [
+ {country: 'China', population: 1377422166},
+ {country: 'India', population: 1295210000},
+ {country: 'United States of America', population: 323947000}
+ ]
+ ```
+
+ ````
+
+3. \*\*\* Cercate di sviluppare un programma che calcoli la misura della tendenza centrale di un campione (media, mediana, modalità) e la misura della variabilità (intervallo, varianza, deviazione standard). Oltre a queste misure, trovate il minimo, il massimo, il numero, il percentile e la distribuzione di frequenza del campione. È possibile creare un oggetto chiamato statistiche e creare tutte le funzioni che eseguono calcoli statistici come metodi per l'oggetto statistiche. Verificate l'output qui sotto.
+
+ ```js
+ const ages = [31, 26, 34, 37, 27, 26, 32, 32, 26, 27, 27, 24, 32, 33, 27, 25, 26, 38, 37, 31, 34, 24, 33, 29, 26]
+
+ console.log('Count:', statistics.count()) // 25
+ console.log('Sum: ', statistics.sum()) // 744
+ console.log('Min: ', statistics.min()) // 24
+ console.log('Max: ', statistics.max()) // 38
+ console.log('Range: ', statistics.range() // 14
+ console.log('Mean: ', statistics.mean()) // 30
+ console.log('Median: ',statistics.median()) // 29
+ console.log('Mode: ', statistics.mode()) // {'mode': 26, 'count': 5}
+ console.log('Variance: ',statistics.var()) // 17.5
+ console.log('Standard Deviation: ', statistics.std()) // 4.2
+ console.log('Variance: ',statistics.var()) // 17.5
+ console.log('Frequency Distribution: ',statistics.freqDist()) # [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)]
+ ```
+
+ ```sh
+ console.log(statistics.describe())
+ Count: 25
+ Sum: 744
+ Min: 24
+ Max: 38
+ Range: 14
+ Mean: 30
+ Median: 29
+ Mode: (26, 5)
+ Variance: 17.5
+ Standard Deviation: 4.2
+ Frequency Distribution: [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)]
+ ```
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 8](../08_Day_Objects/08_day_objects.md) | [Day 10 >>](../10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md)
diff --git a/Italian/10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md b/Italian/10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md
new file mode 100644
index 000000000..42dd04dbe
--- /dev/null
+++ b/Italian/10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md
@@ -0,0 +1,440 @@
+
+
+[<< Day 9](../09_Day_Higher_order_functions/09_day_higher_order_functions.md) | [Day 11>>](../11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md)
+
+
+
+- [Day 10](#day-10)
+ - [Set](#set)
+ - [Creare un set vuoto](#creating-an-empty-set)
+ - [Creare un set da un array](#creating-set-from-array)
+ - [Aggiungere un elemento ad un set](#adding-an-element-to-a-set)
+ - [Eliminare un elemento dal set](#deleting-an-element-a-set)
+ - [Verificare la presenza di un elemento nel set](#checking-an-element-in-the-set)
+ - [Svuotare il set](#clearing-the-set)
+ - [Unione di set](#union-of-sets)
+ - [Intersezione di set](#intersection-of-sets)
+ - [Differenza tra set](#difference-of-sets)
+ - [Map](#map)
+ - [Creare un map vuoto](#creating-an-empty-map)
+ - [Creare un map da un array](#creating-an-map-from-array)
+ - [Aggiungere valori ad un map](#adding-values-to-the-map)
+ - [Ottenere un valore dal map](#getting-a-value-from-map)
+ - [Controllare le key del map](#checking-key-in-map)
+ - [Esercizi](#exercises)
+ - [Esercizi: Livello 1](#exerciseslevel-1)
+ - [Esercizi: Livello 2](#exerciseslevel-2)
+ - [Esercizi: Livello 3](#exerciseslevel-3)
+
+# Day 10
+
+## Set
+
+L'insieme è una collezione di elementi. L'insieme può contenere solo elementi unici.
+Vediamo come creare un insieme nella sezione seguente.
+
+### Creare un set vuoto
+
+```js
+const companies = new Set()
+console.log(companies)
+```
+
+```sh
+Set(0) {}
+```
+
+### Creare un set da un array
+
+```js
+const languages = [
+ 'English',
+ 'Finnish',
+ 'English',
+ 'French',
+ 'Spanish',
+ 'English',
+ 'French',
+]
+
+const setOfLanguages = new Set(languages)
+console.log(setOfLanguages)
+```
+
+```sh
+Set(4) {"English", "Finnish", "French", "Spanish"}
+```
+
+Set è un oggetto iterabile e possiamo iterare attraverso ogni elemento.
+
+```js
+const languages = [
+ 'English',
+ 'Finnish',
+ 'English',
+ 'French',
+ 'Spanish',
+ 'English',
+ 'French',
+]
+
+const setOfLanguages = new Set(languages)
+
+for (const language of setOfLanguages) {
+ console.log(language)
+}
+```
+
+```sh
+ English
+ Finnish
+ French
+ Spanish
+```
+
+### Aggiungere un elemento ad un set
+
+```js
+const companies = new Set() // creating an empty set
+console.log(companies.size) // 0
+
+companies.add('Google') // add element to the set
+companies.add('Facebook')
+companies.add('Amazon')
+companies.add('Oracle')
+companies.add('Microsoft')
+console.log(companies.size) // 5 elements in the set
+console.log(companies)
+```
+
+```sh
+Set(5) {"Google", "Facebook", "Amazon", "Oracle", "Microsoft"}
+```
+
+Possiamo anche usare il ciclo per aggiungere elementi a un insieme.
+
+```js
+const companies = ['Google', 'Facebook', 'Amazon', 'Oracle', 'Microsoft']
+setOfCompanies = new Set()
+for (const company of companies) {
+ setOfCompanies.add(company)
+}
+```
+
+```sh
+Set(5) {"Google", "Facebook", "Amazon", "Oracle", "Microsoft"}
+
+```
+
+### Eliminare un elemento dal set
+
+Possiamo eliminare un elemento da un insieme utilizzando un metodo di cancellazione.
+
+```js
+console.log(companies.delete('Google'))
+console.log(companies.size) // 4 elements left in the set
+```
+
+### Verificare la presenza di un elemento nel set
+
+Il metodo has può aiutare a sapere se un certo elemento esiste in un insieme.
+
+```js
+console.log(companies.has('Apple')) // false
+console.log(companies.has('Facebook')) // true
+```
+
+### Svuotare il set
+
+Rimuove tutti gli elementi da un insieme.
+
+```js
+companies.clear()
+console.log(companies)
+```
+
+```sh
+Set(0) {}
+```
+
+Vedere l'esempio seguente per imparare a usare set.
+
+```js
+const languages = [
+ 'English',
+ 'Finnish',
+ 'English',
+ 'French',
+ 'Spanish',
+ 'English',
+ 'French',
+]
+const langSet = new Set(languages)
+console.log(langSet) // Set(4) {"English", "Finnish", "French", "Spanish"}
+console.log(langSet.size) // 4
+
+const counts = []
+const count = {}
+
+for (const l of langSet) {
+ const filteredLang = languages.filter((lng) => lng === l)
+ console.log(filteredLang) // ["English", "English", "English"]
+ counts.push({ lang: l, count: filteredLang.length })
+}
+console.log(counts)
+```
+
+```js
+[
+ { lang: 'English', count: 3 },
+ { lang: 'Finnish', count: 1 },
+ { lang: 'French', count: 2 },
+ { lang: 'Spanish', count: 1 },
+]
+```
+
+Altri casi d'uso di set. Ad esempio, per contare gli elementi unici di un array.
+
+```js
+const numbers = [5, 3, 2, 5, 5, 9, 4, 5]
+const setOfNumbers = new Set(numbers)
+
+console.log(setOfNumbers)
+```
+
+```sh
+Set(5) {5, 3, 2, 9, 4}
+```
+
+### Unione di set
+
+Per trovare l'unione di due insiemi si può utilizzare l'operatore di divisione. Troviamo l'unione dell'insieme A e dell'insieme B (A U B)
+
+```js
+let a = [1, 2, 3, 4, 5]
+let b = [3, 4, 5, 6]
+let c = [...a, ...b]
+
+let A = new Set(a)
+let B = new Set(b)
+let C = new Set(c)
+
+console.log(C)
+```
+
+```sh
+Set(6) {1, 2, 3, 4, 5,6}
+```
+
+### Intersezione di set
+
+Per trovare l'intersezione di due insiemi si può utilizzare un filtro. Troviamo l'intersezione dell'insieme A e dell'insieme B (A ∩ B)
+
+```js
+let a = [1, 2, 3, 4, 5]
+let b = [3, 4, 5, 6]
+
+let A = new Set(a)
+let B = new Set(b)
+
+let c = a.filter((num) => B.has(num))
+let C = new Set(c)
+
+console.log(C)
+```
+
+```sh
+Set(3) {3, 4, 5}
+```
+
+### Differenza tra set
+
+Per trovare la differenza tra due insiemi si può utilizzare un filtro. Troviamo la differenza tra l'insieme A e l'insieme B (A \ B)
+
+```js
+let a = [1, 2, 3, 4, 5]
+let b = [3, 4, 5, 6]
+
+let A = new Set(a)
+let B = new Set(b)
+
+let c = a.filter((num) => !B.has(num))
+let C = new Set(c)
+
+console.log(C)
+```
+
+```sh
+Set(2) {1, 2}
+```
+
+## Map
+
+### Creare un map vuoto
+
+```js
+const map = new Map()
+console.log(map)
+```
+
+```sh
+Map(0) {}
+```
+
+### Creare un map da un array
+
+```js
+countries = [
+ ['Finland', 'Helsinki'],
+ ['Sweden', 'Stockholm'],
+ ['Norway', 'Oslo'],
+]
+const map = new Map(countries)
+console.log(map)
+console.log(map.size)
+```
+
+```sh
+Map(3) {"Finland" => "Helsinki", "Sweden" => "Stockholm", "Norway" => "Oslo"}
+3
+```
+
+### Aggiungere valori ad un map
+
+```js
+const countriesMap = new Map()
+console.log(countriesMap.size) // 0
+countriesMap.set('Finland', 'Helsinki')
+countriesMap.set('Sweden', 'Stockholm')
+countriesMap.set('Norway', 'Oslo')
+console.log(countriesMap)
+console.log(countriesMap.size)
+```
+
+```sh
+Map(3) {"Finland" => "Helsinki", "Sweden" => "Stockholm", "Norway" => "Oslo"}
+3
+```
+
+### Ottenere un valore dal map
+
+```js
+console.log(countriesMap.get('Finland'))
+```
+
+```sh
+Helsinki
+```
+
+### Controllare le key del map
+
+Controlla se una chiave esiste in una mappa usando il metodo _has_. Restituisce _true_ o _false_.
+
+```js
+console.log(countriesMap.has('Finland'))
+```
+
+```sh
+true
+```
+
+Ottenere tutti i valori dalla mappa utilizzando il ciclo
+
+```js
+for (const country of countriesMap) {
+ console.log(country)
+}
+```
+
+```sh
+(2) ["Finland", "Helsinki"]
+(2) ["Sweden", "Stockholm"]
+(2) ["Norway", "Oslo"]
+```
+
+```js
+for (const [country, city] of countriesMap){
+ console.log(country, city)
+}
+```
+
+```sh
+Finland Helsinki
+Sweden Stockholm
+Norway Oslo
+```
+
+🌕 Hai raggiunto un grande traguardo, sei inarrestabile. Continua così! Hai appena completato le sfide del 10° giorno e sei a 10 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## Esercizi
+
+### Esercizi: Livello 1
+
+```js
+const a = [4, 5, 8, 9]
+const b = [3, 4, 5, 7]
+const countries = ['Finland', 'Sweden', 'Norway']
+```
+
+1. creare un insieme vuoto
+2. Creare un insieme contenente da 0 a 10 utilizzando il ciclo
+3. Rimuovere un elemento da un insieme
+4. Cancellare un insieme
+5. Creare un insieme di 5 elementi stringa da un array
+6. Creare una mappa di paesi e il numero di caratteri di un paese
+
+### Esercizi: Livello 2
+
+1. Trovare un'unione b
+2. Trovare un'intersezione b
+3. Trovare a con b
+
+### Esercizi: Livello 3
+
+1. Quante lingue sono presenti nel file oggetto Paesi.
+
+1. \*\*\* Utilizzate i dati dei Paesi per trovare le 10 lingue più parlate:
+
+```js
+ // Your output should look like this
+ console.log(mostSpokenLanguages(countries, 10))
+ [
+ { English: 91 },
+ { French: 45 },
+ { Arabic: 25 },
+ { Spanish: 24 },
+ { Russian: 9 },
+ { Portuguese: 9 },
+ { Dutch: 8 },
+ { German: 7 },
+ { Chinese: 5 },
+ { Swahili: 4 },
+ { Serbian: 4 }
+ ]
+
+ // Your output should look like this
+ console.log(mostSpokenLanguages(countries, 3))
+ [
+ {English:91},
+ {French:45},
+ {Arabic:25}
+ ]
+```
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 9](../09_Day_Higher_order_functions/09_day_higher_order_functions.md) | [Day 11 >>](../11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md)
diff --git a/Italian/11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md b/Italian/11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md
new file mode 100644
index 000000000..cb008224f
--- /dev/null
+++ b/Italian/11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md
@@ -0,0 +1,699 @@
+
+
30 Days Of JavaScript: Destructuring and Spreading
+
+[<< Day 11](../11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md) | [Day 13>>](../13_Day_Console_object_methods/13_day_console_object_methods.md)
+
+
+
+- [📘 Day 12](#-day-12)
+ - [Espressioni Regolari](#regular-expressions)
+ - [Parameteri RegExp](#regexp-parameters)
+ - [Pattern](#pattern)
+ - [Flags](#flags)
+ - [Creare un pattern con il costruttore RegExp](#creating-a-pattern-with-regexp-constructor)
+ - [Creare un pattern senza il costruttore RegExp](#creating-a-pattern-without-regexp-constructor)
+ - [Metodi dell'oggetto RegExp](#regexpp-object-methods)
+ - [Testing per un match](#testing-for--a-match)
+ - [Array contenente tutto il match](#array-containing-all-of-the-match)
+ - [Sostituire una substring](#replacing-a-substring)
+ - [Square Bracket (parentesi quadra)](#square-bracket)
+ - [Escape character(\\) in RegExp](#escape-character-in-regexp)
+ - [Uno o più volte(+)](#one-or-more-times)
+ - [Period(.)](#period)
+ - [Zero o più volte(*)](#zero-or-more-times)
+ - [Zero oppure una volta(?)](#zero-or-one-times)
+ - [Quantifier in RegExp](#quantifier-in-regexp)
+ - [Cart ^](#cart-)
+ - [Match esatto](#exact-match)
+ - [💻 Esercizi](#-exercises)
+ - [Esercizi: Livello 1](#exercises-level-1)
+ - [Esercizi: Livello 2](#exercises-level-2)
+ - [Esercizi: Livello 3](#exercises-level-3)
+
+# 📘 Day 12
+
+## Espressioni Regolari
+
+Un'espressione regolare o RegExp è un piccolo linguaggio di programmazione che aiuta a trovare modelli nei dati. Una RegExp può essere usata per verificare se un certo modello esiste in diversi tipi di dati. Per usare le RegExp in JavaScript si può usare il costruttore RegExp oppure si può dichiarare un modello RegExp usando due barre in avanti seguite da un flag. Possiamo creare un modello in due modi.
+
+Per dichiarare una stringa si usano una virgoletta singola, una doppia virgoletta e un backtick, mentre per dichiarare un'espressione regolare si usano due barre in avanti e un flag opzionale. Il flag può essere g, i, m, s, u o y.
+
+### Parameteri RegExp
+
+Un'espressione regolare richiede due parametri. Un modello di ricerca richiesto e un parametron optional flag.
+
+#### Pattern
+
+Un modello può essere un testo o una qualsiasi forma di modello che presenta una qualche somiglianza. Per esempio, la parola spam in un'e-mail potrebbe essere un modello che ci interessa cercare in un'e-mail o un numero di telefono in formato numero potrebbe essere il nostro interesse da cercare.
+
+#### Flags
+
+I flag sono parametri opzionali di un'espressione regolare che determinano il tipo di ricerca. Vediamo alcuni dei flag:
+
+- g: un flag globale che significa cercare un modello in tutto il testo
+- i: flag di insensibilità alle maiuscole (cerca sia le minuscole che le maiuscole)
+- m: multilinea
+
+### Creare un pattern con il costruttore RegExp
+
+Dichiarare un'espressione regolare senza flag globale e senza flag case insensitive.
+
+```js
+// without flag
+let pattern = 'love'
+let regEx = new RegExp(pattern)
+```
+
+Dichiarazione di un'espressione regolare con flag globale e flag case insensitive.
+
+```js
+let pattern = 'love'
+let flag = 'gi'
+let regEx = new RegExp(pattern, flag)
+```
+
+Dichiarare un modello regex usando l'oggetto RegExp. Scrittura del pattern e del flag all'interno del costruttore RegExp
+
+```js
+let regEx = new RegExp('love','gi')
+```
+
+### Creare un pattern senza il costruttore RegExp
+
+Dichiarazione di un'espressione regolare con flag globale e flag case insensitive.
+
+```js
+let regEx= /love/gi
+```
+
+L'espressione regolare di cui sopra è uguale a quella creata con il costruttore RegExp
+
+```js
+let regEx= new RegExp('love','gi')
+```
+
+### Metodi dell'oggetto RegExp
+
+Vediamo alcuni metodi di RegExp
+
+#### Testing per un match
+
+*test()*: Verifica la presenza di una corrispondenza in una stringa. Restituisce vero o falso.
+
+```js
+const str = 'I love JavaScript'
+const pattern = /love/
+const result = pattern.test(str)
+console.log(result)
+```
+
+```sh
+true
+```
+
+#### Array contenente tutto il match
+
+*match()*: Restituisce un array contenente tutte le corrispondenze, compresi i gruppi di cattura, oppure null se non viene trovata alcuna corrispondenza.
+Se non si utilizza un flag globale, match() restituisce un array contenente il pattern, l'indice, l'input e il gruppo.
+
+```js
+const str = 'I love JavaScript'
+const pattern = /love/
+const result = str.match(pattern)
+console.log(result)
+```
+
+```sh
+["love", index: 2, input: "I love JavaScript", groups: undefined]
+```
+
+```js
+const str = 'I love JavaScript'
+const pattern = /love/g
+const result = str.match(pattern)
+console.log(result)
+```
+
+```sh
+["love"]
+```
+
+*search()*: Cerca una corrispondenza in una stringa. Restituisce l'indice della corrispondenza o -1 se la ricerca fallisce.
+
+```js
+const str = 'I love JavaScript'
+const pattern = /love/g
+const result = str.search(pattern)
+console.log(result)
+```
+
+```sh
+2
+```
+
+#### Sostituire una substring
+
+*replace()*: Esegue la ricerca di una corrispondenza in una stringa e sostituisce la sottostringa corrispondente con una sostitutiva.
+
+```js
+const txt = 'Python is the most beautiful language that a human begin has ever created.\
+I recommend python for a first programming language'
+
+matchReplaced = txt.replace(/Python|python/, 'JavaScript')
+console.log(matchReplaced)
+```
+
+```sh
+JavaScript is the most beautiful language that a human begin has ever created.I recommend python for a first programming language
+```
+
+```js
+const txt = 'Python is the most beautiful language that a human begin has ever created.\
+I recommend python for a first programming language'
+
+matchReplaced = txt.replace(/Python|python/g, 'JavaScript')
+console.log(matchReplaced)
+```
+
+```sh
+JavaScript is the most beautiful language that a human begin has ever created.I recommend JavaScript for a first programming language
+```
+
+```js
+const txt = 'Python is the most beautiful language that a human begin has ever created.\
+I recommend python for a first programming language'
+
+matchReplaced = txt.replace(/Python/gi, 'JavaScript')
+console.log(matchReplaced)
+```
+
+```sh
+JavaScript is the most beautiful language that a human begin has ever created.I recommend JavaScript for a first programming language
+```
+
+```js
+
+const txt = '%I a%m te%%a%%che%r% a%n%d %% I l%o%ve te%ach%ing.\
+T%he%re i%s n%o%th%ing as m%ore r%ewarding a%s e%duc%at%i%ng a%n%d e%m%p%ow%er%ing \
+p%e%o%ple.\
+I fo%und te%a%ching m%ore i%n%t%er%%es%ting t%h%an any other %jobs.\
+D%o%es thi%s m%ot%iv%a%te %y%o%u to b%e a t%e%a%cher.'
+
+matches = txt.replace(/%/g, '')
+console.log(matches)
+```
+
+```sh
+I am teacher and I love teaching.There is nothing as more rewarding as educating and empowering people.I found teaching more interesting than any other jobs.Does this motivate you to be a teacher.
+```
+
+* []: Un insieme di caratteri
+ * [a-c] significa, a o b o c
+ * [a-z] significa, qualsiasi lettera da a a z
+ * [A-Z] significa qualsiasi carattere dalla A alla Z
+ * [0-3] significa, 0 o 1 o 2 o 3
+ * [0-9] significa qualsiasi numero da 0 a 9
+ * [A-Za-z0-9] qualsiasi carattere dalla a alla z, dalla A alla Z, da 0 a 9
+* \\: utilizza per sfuggire a caratteri speciali
+ * \d significa: corrisponde se la stringa contiene cifre (numeri da 0-9)
+ * \D significa: corrispondere a una stringa che non contiene cifre
+* . : qualsiasi carattere tranne il carattere di nuova riga (\n)
+* ^: inizia con
+ * r'^substring' eg r'^love', una frase che inizia con la parola amore
+ * r'[^abc] significa non a, non b, non c.
+* $: finisce con
+ * r'substring$' eg r'love$', la frase termina con una parola amore
+* *: zero o più volte
+ * r'[a]*' significa un optional o può verificarsi più volte.
+* +: una o più volte
+ * r'[a]+' significa almeno una o più volte
+* ?: zero o più volte
+ * r'[a]?' significa zero o una volta
+* \b: delimitatore di parole, corrisponde all'inizio o alla fine di una parola
+* {3}: Esattamente 3 caratteri
+* {3,}: Almeno 3 caratteri
+* {3,8}: Da 3 a 8 caratteri
+* |: operatore or
+ * r'apple|banana' significa sia di una mela che di una banana
+* (): Cattura e raggruppa
+
+
+
+Utilizziamo un esempio per chiarire i meta-caratteri di cui sopra
+
+### Square Bracket (parentesi quadra)
+
+Utilizziamo la parentesi quadra per includere le lettere minuscole e maiuscole
+
+```js
+const pattern = '[Aa]pple' // this square bracket means either A or a
+const txt = 'Apple and banana are fruits. An old cliche says an apple a day keeps the doctor way has been replaced by a banana a day keeps the doctor far far away. '
+const matches = txt.match(pattern)
+
+console.log(matches)
+```
+
+```sh
+["Apple", index: 0, input: "Apple and banana are fruits. An old cliche says an apple a day keeps the doctor way has been replaced by a banana a day keeps the doctor far far away.", groups: undefined]
+
+```
+
+```js
+const pattern = /[Aa]pple/g // this square bracket means either A or a
+const txt = 'Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away. '
+const matches = txt.match(pattern)
+
+console.log(matches)
+```
+
+```sh
+["Apple", "apple"]
+```
+
+Se vogliamo cercare la banana, scriviamo lo schema come segue:
+
+```js
+const pattern = /[Aa]pple|[Bb]anana/g // this square bracket mean either A or a
+const txt = 'Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away. Banana is easy to eat too.'
+const matches = txt.match(pattern)
+
+console.log(matches)
+```
+
+```sh
+["Apple", "banana", "apple", "banana", "Banana"]
+```
+
+Utilizzando la parentesi quadra e l'operatore o , riusciamo a estrarre Apple, apple, Banana e banana.
+
+### Escape character(\\) in RegExp
+
+```js
+const pattern = /\d/g // d is a special character which means digits
+const txt = 'This regular expression example was made in January 12, 2020.'
+const matches = txt. match(pattern)
+
+console.log(matches) // ["1", "2", "2", "0", "2", "0"], this is not what we want
+```
+
+```js
+const pattern = /\d+/g // d is a special character which means digits
+const txt = 'This regular expression example was made in January 12, 2020.'
+const matches = txt. match(pattern)
+
+console.log(matches) // ["12", "2020"], this is not what we want
+```
+
+### Uno o più volte(+)
+
+```js
+const pattern = /\d+/g // d is a special character which means digits
+const txt = 'This regular expression example was made in January 12, 2020.'
+const matches = txt. match(pattern)
+console.log(matches) // ["12", "2020"], this is not what we want
+```
+
+### Period(.)
+
+```js
+const pattern = /[a]./g // this square bracket means a and . means any character except new line
+const txt = 'Apple and banana are fruits'
+const matches = txt.match(pattern)
+
+console.log(matches) // ["an", "an", "an", "a ", "ar"]
+```
+
+```js
+const pattern = /[a].+/g // . any character, + any character one or more times
+const txt = 'Apple and banana are fruits'
+const matches = txt.match(pattern)
+
+console.log(matches) // ['and banana are fruits']
+```
+
+### Zero o più volte(*)
+
+Zero o molte volte. Il modello può non verificarsi o verificarsi più volte.
+
+```js
+
+const pattern = /[a].*/g //. any character, + any character one or more times
+const txt = 'Apple and banana are fruits'
+const matches = txt.match(pattern)
+
+console.log(matches) // ['and banana are fruits']
+
+```
+
+### Zero oppure una volta(?)
+
+Zero o una volta. Il modello può non verificarsi o verificarsi una volta.
+
+```js
+const txt = 'I am not sure if there is a convention how to write the word e-mail.\
+Some people write it email others may write it as Email or E-mail.'
+const pattern = /[Ee]-?mail/g // ? means optional
+matches = txt.match(pattern)
+
+console.log(matches) // ["e-mail", "email", "Email", "E-mail"]
+
+```
+
+### Quantifier in RegExp
+
+Possiamo specificare la lunghezza della sottostringa che cerchiamo in un testo, utilizzando una parentesi graffa. Vediamo come utilizzare i quantificatori RegExp. Immaginiamo di essere interessati a una sottostringa la cui lunghezza sia di 4 caratteri
+
+```js
+const txt = 'This regular expression example was made in December 6, 2019.'
+const pattern = /\\b\w{4}\b/g // exactly four character words
+const matches = txt.match(pattern)
+console.log(matches) //['This', 'made', '2019']
+```
+
+```js
+const txt = 'This regular expression example was made in December 6, 2019.'
+const pattern = /\b[a-zA-Z]{4}\b/g // exactly four character words without numbers
+const matches = txt.match(pattern)
+console.log(matches) //['This', 'made']
+```
+
+```js
+const txt = 'This regular expression example was made in December 6, 2019.'
+const pattern = /\d{4}/g // a number and exactly four digits
+const matches = txt.match(pattern)
+console.log(matches) // ['2019']
+```
+
+```js
+const txt = 'This regular expression example was made in December 6, 2019.'
+const pattern = /\d{1,4}/g // 1 to 4
+const matches = txt.match(pattern)
+console.log(matches) // ['6', '2019']
+```
+
+### Cart ^
+
+- Starts with
+
+```js
+const txt = 'This regular expression example was made in December 6, 2019.'
+const pattern = /^This/ // ^ means starts with
+const matches = txt.match(pattern)
+console.log(matches) // ['This']
+```
+
+- Negation
+
+```js
+const txt = 'This regular expression example was made in December 6, 2019.'
+const pattern = /[^A-Za-z,. ]+/g // ^ in set character means negation, not A to Z, not a to z, no space, no comma no period
+const matches = txt.match(pattern)
+console.log(matches) // ["6", "2019"]
+```
+
+### Match esatto
+
+It should have ^ starting and $ which is an end.
+
+```js
+let pattern = /^[A-Z][a-z]{3,12}$/;
+let name = 'Asabeneh';
+let result = pattern.test(name)
+
+console.log(result) // true
+```
+
+🌕 Stai andando lontano. Continuate così! Ora sei super caricato con il potere delle espressioni regolari. Hai il potere di estrarre e pulire qualsiasi tipo di testo e puoi ricavare un significato dai dati non strutturati. Hai appena completato le sfide del 12° giorno e sei a 12 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## 💻 Esercizi
+
+### Esercizi: Livello 1
+
+1. Calcolate il reddito totale annuo della persona che si trova nel testo seguente. 'Guadagna 4000 euro di stipendio al mese, 10000 euro di bonus annuale, 5500 euro di corsi online al mese.'
+1. La posizione di alcune particelle sull'asse orizzontale x -12, -4, -3 e -1 in direzione negativa, 0 nell'origine, 4 e 8 in direzione positiva. Estraete questi numeri e trovate la distanza tra le due particelle più lontane.
+
+```js
+points = ['-1', '2', '-4', '-3', '-1', '0', '4', '8']
+sortedPoints = [-4, -3, -1, -1, 0, 2, 4, 8]
+distance = 12
+```
+
+1. Scrivere un modello che identifichi se una stringa è una variabile JavaScript valida.
+
+ ```sh
+ is_valid_variable('first_name') # True
+ is_valid_variable('first-name') # False
+ is_valid_variable('1first_name') # False
+ is_valid_variable('firstname') # True
+ ```
+
+### Esercizi: Livello 2
+
+1. Scrivere una funzione chiamata *tenMostFrequentWords* che ottenga le dieci parole più frequenti da una stringa?
+
+ ```js
+ paragraph = `I love teaching. If you do not love teaching what else can you love. I love Python if you do not love something which can give you all the capabilities to develop an application what else can you love.`
+ console.log(tenMostFrequentWords(paragraph))
+ ```
+
+ ```sh
+ [
+ {word:'love', count:6},
+ {word:'you', count:5},
+ {word:'can', count:3},
+ {word:'what', count:2},
+ {word:'teaching', count:2},
+ {word:'not', count:2},
+ {word:'else', count:2},
+ {word:'do', count:2},
+ {word:'I', count:2},
+ {word:'which', count:1},
+ {word:'to', count:1},
+ {word:'the', count:1},
+ {word:'something', count:1},
+ {word:'if', count:1},
+ {word:'give', count:1},
+ {word:'develop',count:1},
+ {word:'capabilities',count:1},
+ {word:'application', count:1},
+ {word:'an',count:1},
+ {word:'all',count:1},
+ {word:'Python',count:1},
+ {word:'If',count:1}]
+ ```
+
+ ```js
+ console.log(tenMostFrequentWords(paragraph, 10))
+ ```
+
+ ```sh
+ [{word:'love', count:6},
+ {word:'you', count:5},
+ {word:'can', count:3},
+ {word:'what', count:2},
+ {word:'teaching', count:2},
+ {word:'not', count:2},
+ {word:'else', count:2},
+ {word:'do', count:2},
+ {word:'I', count:2},
+ {word:'which', count:1}
+ ]
+ ```
+
+### Esercizi: Livello 3
+
+1. Scrivere una funzione che pulisca il testo. Pulire il testo seguente. Dopo la pulizia, contare le tre parole più frequenti nella stringa.
+
+ ```js
+ sentence = `%I $am@% a %tea@cher%, &and& I lo%#ve %tea@ching%;. There $is nothing; &as& mo@re rewarding as educa@ting &and& @emp%o@wering peo@ple. ;I found tea@ching m%o@re interesting tha@n any other %jo@bs. %Do@es thi%s mo@tivate yo@u to be a tea@cher!?`
+ console.log(cleanText(sentence))
+ ```
+
+ ```sh
+ I am a teacher and I love teaching There is nothing as more rewarding as educating and empowering people I found teaching more interesting than any other jobs Does this motivate you to be a teacher
+ ```
+2. Scrivere una funzione che trovi le parole più frequenti. Dopo la pulizia, contare le tre parole più frequenti nella stringa.
+
+ ```js
+ console.log(mostFrequentWords(cleanedText))
+ [{word:'I', count:3}, {word:'teaching', count:2}, {word:'teacher', count:2}]
+ ```
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 11](../11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md) | [Day 13 >>](../13_Day_Console_object_methods/13_day_console_object_methods.md)
diff --git a/Italian/13_Day_Console_object_methods/13_day_console_object_methods.md b/Italian/13_Day_Console_object_methods/13_day_console_object_methods.md
new file mode 100644
index 000000000..009f3e12a
--- /dev/null
+++ b/Italian/13_Day_Console_object_methods/13_day_console_object_methods.md
@@ -0,0 +1,358 @@
+
+
+[<< Day 12](../12_Day_Regular_expressions/12_day_regular_expressions.md) | [Day 14>>](../14_Day_Error_handling/14_day_error_handling.md)
+
+
+
+- [Day 13](#day-13)
+ - [Metodi Oggetto Console](#console-object-methods)
+ - [console.log()](#consolelog)
+ - [console.warn()](#consolewarn)
+ - [console.error()](#consoleerror)
+ - [console.table()](#consoletable)
+ - [console.time()](#consoletime)
+ - [console.info()](#consoleinfo)
+ - [console.assert()](#consoleassert)
+ - [console.group()](#consolegroup)
+ - [console.count()](#consolecount)
+ - [console.clear()](#consoleclear)
+ - [Esercizi](#exercises)
+ - [Esercizi:Level 1](#exerciseslevel-1)
+ - [Esercizi:Level 2](#exerciseslevel-2)
+ - [Esercizi:Level 3](#exerciseslevel-3)
+
+# Day 13
+
+## Metodi Oggetto Console
+
+In questa sezione tratteremo i metodi della console e dell'oggetto console. I principianti assoluti di solito non sanno quale usare: console.log(), document.write() o document.getElementById.
+
+Utilizziamo i metodi degli oggetti console per mostrare l'output sulla console del browser e document.write per mostrare l'output sul documento del browser (porta di visualizzazione). Entrambi i metodi sono utilizzati solo per scopi di test e debug. Il metodo console è lo strumento di test e debug più diffuso nel browser. Utilizziamo document.getElementById() quando vogliamo interagire con il DOM utilizzando JavaScript. Tratteremo il DOM in un'altra sezione.
+
+Oltre al famoso metodo console.log(), la console fornisce altri metodi.
+
+### console.log()
+
+Usiamo console.log() per mostrare l'output sulla console del browser. Possiamo sostituire i valori e anche stilizzare il log con %c.
+
+- Mostrare l'output sulla console del browser
+
+```js
+console.log('30 Days of JavaScript')
+```
+
+```sh
+30 Days of JavaScript
+```
+
+- Substitution
+
+```js
+console.log('%d %s of JavaScript', 30, 'Days')
+```
+
+```sh
+30 Days of JavaScript
+```
+
+- CSS
+
+Possiamo stilizzare il messaggio di registrazione usando i css. Copiare il codice seguente e incollarlo nella console del browser per vedere il risultato.
+
+```js
+console.log('%c30 Days Of JavaScript', 'color:green') // log output is green
+console.log(
+ '%c30 Days%c %cOf%c %cJavaScript%c',
+ 'color:green',
+ '',
+ 'color:red',
+ '',
+ 'color:yellow'
+) // log output green red and yellow text
+```
+
+### console.warn()
+
+Utilizziamo console.warn() per fornire avvisi al browser. Per esempio, per informare o avvisare della deprecazione di una versione di un pacchetto o di cattive pratiche. Copiate il codice seguente e incollatelo nella console del browser per visualizzare i messaggi di avviso.
+
+```js
+console.warn('This is a warning')
+console.warn(
+ 'You are using React. Do not touch the DOM. Virtual DOM will take care of handling the DOM!'
+)
+console.warn('Warning is different from error')
+```
+
+### console.error()
+
+Il metodo console.error() mostra un messaggio di errore.
+
+```js
+console.error('This is an error message')
+console.error('We all make mistakes')
+```
+
+### console.table()
+
+Il metodo console.table() visualizza i dati come tabella sulla console. Visualizza i dati in forma di tabella. Il metodo console.table() accetta un parametro obbligatorio, data, che deve essere un array o un oggetto, e un parametro opzionale aggiuntivo columns.
+
+Cominciamo con un semplice array. Il codice seguente visualizza una tabella con due colonne. Una colonna indice per visualizzare l'indice e una colonna valore per visualizzare i nomi.
+
+```js
+const names = ['Asabeneh', 'Brook', 'David', 'John']
+console.table(names)
+```
+
+Controlliamo anche il risultato di un oggetto. Si crea una tabella con due colonne: una colonna indice contenente le chiavi e una colonna valore contenente i valori dell'oggetto.
+
+```js
+const user = {
+ name: 'Asabeneh',
+ title: 'Programmer',
+ country: 'Finland',
+ city: 'Helsinki',
+ age: 250
+}
+console.table(user)
+```
+
+Verificate il resto degli esempi copiando e incollando sulla console del browser.
+
+```js
+const countries = [
+ ['Finland', 'Helsinki'],
+ ['Sweden', 'Stockholm'],
+ ['Norway', 'Oslo']
+]
+console.table(countries)
+```
+
+```js
+const users = [
+ {
+ name: 'Asabeneh',
+ title: 'Programmer',
+ country: 'Finland',
+ city: 'Helsinki',
+ age: 250
+ },
+ {
+ name: 'Eyob',
+ title: 'Teacher',
+ country: 'Sweden',
+ city: 'London',
+ age: 25
+ },
+ {
+ name: 'Asab',
+ title: 'Instructor',
+ country: 'Norway',
+ city: 'Oslo',
+ age: 22
+ },
+ {
+ name: 'Matias',
+ title: 'Developer',
+ country: 'Denmark',
+ city: 'Copenhagen',
+ age: 28
+ }
+]
+console.table(users)
+```
+
+### console.time()
+
+Avvia un timer che può essere utilizzato per tenere traccia del tempo necessario per un'operazione. A ogni timer viene assegnato un nome univoco e si possono avere fino a 10.000 timer in esecuzione su una data pagina. Quando si chiama console.timeEnd() con lo stesso nome, il browser visualizza il tempo, in millisecondi, trascorso dall'avvio del timer.
+
+```js
+const countries = [
+ ['Finland', 'Helsinki'],
+ ['Sweden', 'Stockholm'],
+ ['Norway', 'Oslo']
+]
+
+console.time('Regular for loop')
+for (let i = 0; i < countries.length; i++) {
+ console.log(countries[i][0], countries[i][1])
+}
+console.timeEnd('Regular for loop')
+
+console.time('for of loop')
+for (const [name, city] of countries) {
+ console.log(name, city)
+}
+console.timeEnd('for of loop')
+
+console.time('forEach loop')
+countries.forEach(([name, city]) => {
+ console.log(name, city)
+})
+console.timeEnd('forEach loop')
+```
+
+```sh
+Finland Helsinki
+Sweden Stockholm
+Norway Oslo
+Regular for loop: 0.34716796875ms
+Finland Helsinki
+Sweden Stockholm
+Norway Oslo
+for of loop: 0.26806640625ms
+Finland Helsinki
+Sweden Stockholm
+Norway Oslo
+forEach loop: 0.358154296875ms
+```
+
+Secondo l'output sopra riportato, il ciclo for regolare è più lento del ciclo for of o forEach.
+
+### console.info()
+
+Visualizza un messaggio informativo sulla console del browser.
+
+```js
+console.info('30 Days Of JavaScript challenge is trending on Github')
+console.info('30 Days Of fullStack challenge might be released')
+console.info('30 Days Of HTML and CSS challenge might be released')
+```
+
+### console.assert()
+
+Il metodo console.assert() scrive un messaggio di errore nella console se l'asserzione è falsa. Se l'asserzione è vera, non succede nulla. Il primo parametro è un'espressione di asserzione. Se questa espressione è falsa, viene visualizzato un messaggio di errore Asserzione fallita.
+
+```js
+console.assert(4 > 3, '4 is greater than 3') // no result
+console.assert(3 > 4, '3 is not greater than 4') // Assertion failed: 3 is not greater than 4
+
+for (let i = 0; i <= 10; i += 1) {
+ let errorMessage = `${i} is not even`
+ console.log('the # is ' + i)
+ console.assert(i % 2 === 0, { number: i, errorMessage: errorMessage })
+}
+```
+
+### console.group()
+
+Console.group() può aiutare a raggruppare diversi gruppi di log. Copiare il codice seguente e incollarlo nella console del browser per i gruppi.
+
+```js
+const names = ['Asabeneh', 'Brook', 'David', 'John']
+const countries = [
+ ['Finland', 'Helsinki'],
+ ['Sweden', 'Stockholm'],
+ ['Norway', 'Oslo']
+]
+const user = {
+ name: 'Asabeneh',
+ title: 'Programmer',
+ country: 'Finland',
+ city: 'Helsinki',
+ age: 250
+}
+const users = [
+ {
+ name: 'Asabeneh',
+ title: 'Programmer',
+ country: 'Finland',
+ city: 'Helsinki',
+ age: 250
+ },
+ {
+ name: 'Eyob',
+ title: 'Teacher',
+ country: 'Sweden',
+ city: 'London',
+ age: 25
+ },
+ {
+ name: 'Asab',
+ title: 'Instructor',
+ country: 'Norway',
+ city: 'Oslo',
+ age: 22
+ },
+ {
+ name: 'Matias',
+ title: 'Developer',
+ country: 'Denmark',
+ city: 'Copenhagen',
+ age: 28
+ }
+]
+
+console.group('Names')
+console.log(names)
+console.groupEnd()
+
+console.group('Countries')
+console.log(countries)
+console.groupEnd()
+
+console.group('Users')
+console.log(user)
+console.log(users)
+console.groupEnd()
+```
+
+### console.count()
+
+Stampa il numero di volte in cui viene richiamato console.count(). Richiede un parametro stringa label. È molto utile per contare il numero di volte che una funzione viene chiamata. Nell'esempio seguente, il metodo console.count() verrà eseguito tre volte
+
+```js
+const func = () => {
+ console.count('Function has been called')
+}
+func()
+func()
+func()
+```
+
+```sh
+Function has been called: 1
+Function has been called: 2
+Function has been called: 3
+```
+
+### console.clear()
+
+Console.clear() pulisce la console del browser.
+
+🌕 Continua a lavorare bene. Continua a spingere, il cielo è il limite! Hai appena completato le sfide del 13° giorno e sei a 13 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## Esercizi
+
+### Esercizi:Level 1
+
+1. Visualizzare l'array di paesi come tabella
+2. Visualizzare l'oggetto Paesi come tabella
+3. Usare console.group() per raggruppare i log.
+
+### Esercizi:Livello 2
+
+1. 10 > 2 \* 10 usare console.assert()
+2. Scrivere un messaggio di avviso usando console.warn()
+3. Scrivere un messaggio di errore usando console.error()
+
+### Esercizi:Level 3
+
+1. Verificare la differenza di velocità tra i seguenti cicli: while, for, for of, forEach
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 12](../12_Day_Regular_expressions/12_day_regular_expressions.md) | [Day 14>>](../14_Day_Error_handling/14_day_error_handling.md)
diff --git a/Italian/14_Day_Error_handling/14_day_error_handling.md b/Italian/14_Day_Error_handling/14_day_error_handling.md
new file mode 100644
index 000000000..967939335
--- /dev/null
+++ b/Italian/14_Day_Error_handling/14_day_error_handling.md
@@ -0,0 +1,193 @@
+
+
+[<< Day 13](../13_Day_Console_object_methods/13_day_console_object_methods.md) | [Day 15>>](../15_Day_Classes/15_day_classes.md)
+
+
+
+- [Day 14](#day-14)
+ - [Gestione Errori](#error-handling)
+ - [Tipi di Errore](#error-types)
+ - [Esercizi](#exercises)
+ - [Esercizi:Level 1](#exerciseslevel-1)
+ - [Esercizi: Livello 2](#exercises-level-2)
+ - [Esercizi:Level](#exerciseslevel)
+
+# Day 14
+
+## Gestione Errori
+
+JavaScript è un linguaggio a tipizzazione libera. A volte si ottiene un errore di runtime quando si tenta di accedere a una variabile non definita o di chiamare una funzione non definita, ecc.
+
+JavaScript, simile a Python o Java, fornisce un meccanismo di gestione degli errori per catturare gli errori di runtime utilizzando il blocco try-catch-finally.
+
+```js
+try {
+ // code that may throw an error
+} catch (err) {
+ // code to be executed if an error occurs
+} finally {
+ // code to be executed regardless of an error occurs or not
+}
+```
+
+L'istruzione *try* ci permette di definire un blocco di codice che deve essere testato per verificare la presenza di errori durante l'esecuzione.
+
+**catch**: scrivere il codice per fare qualcosa nel blocco catch quando si verifica un errore. Il blocco catch può avere dei parametri che forniscono informazioni sull'errore. Il blocco catch viene utilizzato per registrare un errore o per visualizzare messaggi specifici all'utente.
+
+**finally**: il blocco finally viene sempre eseguito, indipendentemente dal verificarsi di un errore. Il blocco finally può essere usato per completare il compito rimanente o per resettare le variabili che potrebbero essere cambiate prima del verificarsi dell'errore nel blocco try.
+
+**Esempio:**
+
+```js
+try {
+ let lastName = 'Yetayeh'
+ let fullName = fistName + ' ' + lastName
+} catch (err) {
+ console.log(err)
+}
+```
+
+```sh
+ReferenceError: fistName is not defined
+ at :4:20
+```
+
+```js
+try {
+ let lastName = 'Yetayeh'
+ let fullName = fistName + ' ' + lastName
+} catch (err) {
+ console.error(err) // we can use console.log() or console.error()
+} finally {
+ console.log('In any case I will be executed')
+}
+```
+
+```sh
+ReferenceError: fistName is not defined
+ at :4:20
+In any case it will be executed
+```
+
+Il blocco catch accetta un parametro. È comune passare e, err o error come parametro al blocco catch. Questo parametro è un oggetto e ha le chiavi name e message. Utilizziamo il nome e il messaggio.
+
+```js
+try {
+ let lastName = 'Yetayeh'
+ let fullName = fistName + ' ' + lastName
+} catch (err) {
+ console.log('Name of the error', err.name)
+ console.log('Error message', err.message)
+} finally {
+ console.log('In any case I will be executed')
+}
+```
+
+```sh
+Name of the error ReferenceError
+Error message fistName is not defined
+In any case I will be executed
+```
+
+throw: l'istruzione throw consente di creare un errore personalizzato. Possiamo utilizzare una stringa, un numero, un booleano o un oggetto. Utilizzare l'istruzione throw per lanciare un'eccezione. Quando si lancia un'eccezione, l'espressione specifica il valore dell'eccezione. Ognuno dei seguenti comandi lancia un'eccezione:
+
+```js
+throw 'Error2' // generates an exception with a string value
+throw 42 // generates an exception with the value 42
+throw true // generates an exception with the value true
+throw new Error('Required') // generates an error object with the message of Required
+```
+
+```js
+const throwErrorExampleFun = () => {
+ let message
+ let x = prompt('Enter a number: ')
+ try {
+ if (x == '') throw 'empty'
+ if (isNaN(x)) throw 'not a number'
+ x = Number(x)
+ if (x < 5) throw 'too low'
+ if (x > 10) throw 'too high'
+ } catch (err) {
+ console.log(err)
+ }
+}
+throwErrorExampleFun()
+```
+
+### Tipi di Errore
+
+- ReferenceError: Si è verificato un riferimento illegale. Un ReferenceError viene lanciato se si utilizza una variabile che non è stata dichiarata.
+
+```js
+let firstName = 'Asabeneh'
+let fullName = firstName + ' ' + lastName
+
+console.log(fullName)
+```
+
+```sh
+Uncaught ReferenceError: lastName is not defined
+ at :2:35
+```
+
+- SyntaxError: Si è verificato un errore di sintassi
+
+```js
+let square = 2 x 2
+console.log(square)
+
+console.log('Hello, world")
+```
+
+```sh
+Uncaught SyntaxError: Unexpected identifier
+```
+
+- TypeError: Si è verificato un errore di tipo
+
+```js
+let num = 10
+console.log(num.toLowerCase())
+```
+
+```sh
+Uncaught TypeError: num.toLowerCase is not a function
+ at :2:17
+```
+
+Questi sono alcuni degli errori più comuni che si possono incontrare quando si scrive un codice. Capire gli errori può aiutarvi a capire quali sono gli errori commessi e vi aiuterà a eseguire il debug del codice in modo rapido.
+
+🌕 Sei impeccabile. Ora sai come gestire gli errori e sei in grado di scrivere applicazioni robuste che gestiscono gli input inaspettati dell'utente. Hai appena completato le sfide del giorno 14 e sei a 14 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## Esercizi
+
+### Esercizi:Level 1
+
+Fai pratica
+
+### Esercizi: Livello 2
+
+Fai pratica
+
+### Esercizi:Level
+
+Fai pratica
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 13](../13_Day_Console_object_methods/13_day_console_object_methods.md) | [Day 15>>](../15_Day_Classes/15_day_classes.md)
diff --git a/Italian/15_Day_Classes/15_day_classes.md b/Italian/15_Day_Classes/15_day_classes.md
new file mode 100644
index 000000000..4ffec5270
--- /dev/null
+++ b/Italian/15_Day_Classes/15_day_classes.md
@@ -0,0 +1,715 @@
+
+
+[<< Day 14](../14_Day_Error_handling/14_day_error_handling.md) | [Day 16>>](../16_Day_JSON/16_day_json.md)
+
+
+
+- [Day 15](#day-15)
+ - [Classi](#classes)
+ - [Definire una classe](#defining-a-classes)
+ - [Instanzionare una Classe](#class-instantiation)
+ - [Costruttore della Classe](#class-constructor)
+ - [Valori di Default nel costruttore](#default-values-with-constructor)
+ - [Metodi di Classe](#class-methods)
+ - [Proprietà con valori iniziali](#properties-with-initial-value)
+ - [getter](#getter)
+ - [setter](#setter)
+ - [Metodo Statico](#static-method)
+ - [Inheritance (Ereditarietà)](#inheritance)
+ - [Override dei metodi](#overriding-methods)
+ - [Esercizi](#exercises)
+ - [Esercizi Livello 1](#exercises-level-1)
+ - [Esercizi Livello 2](#exercises-level-2)
+ - [Esercizi Livello 3](#exercises-level-3)
+
+# Day 15
+
+## Classi
+
+JavaScript è un linguaggio di programmazione orientato agli oggetti. Tutto in JavaScript è un oggetto, con le sue proprietà e i suoi metodi. Per creare un oggetto, creiamo una classe. Una classe è come un costruttore di oggetti, o un "progetto" per la creazione di oggetti. Istanziamo una classe per creare un oggetto. La classe definisce gli attributi e il comportamento dell'oggetto, mentre l'oggetto, d'altra parte, rappresenta la classe.
+
+Una volta creata una classe, possiamo creare oggetti da essa ogni volta che vogliamo. La creazione di un oggetto da una classe si chiama istanziazione della classe.
+
+Nella sezione dedicata agli oggetti, abbiamo visto come creare un letterale di oggetto. L'oggetto letterale è un singleton. Se vogliamo ottenere un oggetto simile, dobbiamo scriverlo. Tuttavia, le classi consentono di creare molti oggetti. Questo aiuta a ridurre la quantità di codice e la sua ripetizione.
+
+### Definire una classe
+
+Per definire una classe in JavaScript è necessaria la parola chiave _class_, il nome della classe in **CamelCase** e il codice di blocco (due parentesi graffe). Creiamo una classe di nome Persona.
+
+```sh
+// syntax
+class ClassName {
+ // code goes here
+}
+
+```
+
+**Esempio:**
+
+```js
+class Person {
+ // code goes here
+}
+```
+
+Abbiamo creato una classe Person, ma non ha nulla al suo interno.
+
+### Instanzionare una Classe
+
+Istanziare una classe significa creare un oggetto da una classe. Abbiamo bisogno della parola chiave _new_ e chiamiamo il nome della classe dopo la parola new.
+
+Creiamo un oggetto cane dalla nostra classe Persona.
+
+```js
+class Person {
+ // code goes here
+}
+const person = new Person()
+console.log(person)
+```
+
+```sh
+Person {}
+```
+
+Come si può vedere, abbiamo creato un oggetto persona. Poiché la classe non ha ancora alcuna proprietà, anche l'oggetto è vuoto.
+
+Utilizziamo il costruttore della classe per passare diverse proprietà alla classe.
+
+### Costruttore della Classe
+
+Il costruttore è una funzione integrata che consente di creare un blueprint per il nostro oggetto. La funzione costruttore inizia con la parola chiave constructor seguita da una parentesi. All'interno della parentesi si passano le proprietà dell'oggetto come parametro. Utilizziamo la parola chiave _this_ per associare i parametri del costruttore alla classe.
+
+Il seguente costruttore della classe Person ha le proprietà firstName e lastName. Queste proprietà sono allegate alla classe Person utilizzando la parola chiave _this_. _This_ si riferisce alla classe stessa.
+
+```js
+class Person {
+ constructor(firstName, lastName) {
+ console.log(this) // Check the output from here
+ this.firstName = firstName
+ this.lastName = lastName
+ }
+}
+
+const person = new Person()
+
+console.log(person)
+```
+
+```sh
+Person {firstName: undefined, lastName:undefined}
+```
+
+Tutte le chiavi dell'oggetto sono indefinite. Quando si istanzia l'oggetto, si deve passare il valore delle proprietà. Passiamo il valore in questo momento, quando istanziamo la classe.
+
+```js
+class Person {
+ constructor(firstName, lastName) {
+ this.firstName = firstName
+ this.lastName = lastName
+ }
+}
+
+const person1 = new Person('Asabeneh', 'Yetayeh')
+
+console.log(person1)
+```
+
+```sh
+Person {firstName: "Asabeneh", lastName: "Yetayeh"}
+```
+
+Come abbiamo detto all'inizio, una volta creata una classe, possiamo creare molti oggetti utilizzando la classe. Ora, creiamo molti oggetti persona usando la classe Person.
+
+```js
+class Person {
+ constructor(firstName, lastName) {
+ console.log(this) // Check the output from here
+ this.firstName = firstName
+ this.lastName = lastName
+ }
+}
+
+const person1 = new Person('Asabeneh', 'Yetayeh')
+const person2 = new Person('Lidiya', 'Tekle')
+const person3 = new Person('Abraham', 'Yetayeh')
+
+console.log(person1)
+console.log(person2)
+console.log(person3)
+```
+
+```sh
+Person {firstName: "Asabeneh", lastName: "Yetayeh"}
+Person {firstName: "Lidiya", lastName: "Tekle"}
+Person {firstName: "Abraham", lastName: "Yetayeh"}
+```
+
+Utilizzando la classe Persona abbiamo creato tre oggetti persona. Come si può vedere, la nostra classe non ha molte proprietà, ma possiamo aggiungere altre proprietà alla classe.
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ console.log(this) // Check the output from here
+ this.firstName = firstName
+ this.lastName = lastName
+ this.age = age
+ this.country = country
+ this.city = city
+ }
+}
+
+const person1 = new Person('Asabeneh', 'Yetayeh', 250, 'Finland', 'Helsinki')
+
+console.log(person1)
+```
+
+```sh
+Person {firstName: "Asabeneh", lastName: "Yetayeh", age: 250, country: "Finland", city: "Helsinki"}
+```
+
+### Valori di Default nel costruttore
+
+Le proprietà della funzione costruttore possono avere un valore predefinito come le altre funzioni regolari.
+
+```js
+class Person {
+ constructor(
+ firstName = 'Asabeneh',
+ lastName = 'Yetayeh',
+ age = 250,
+ country = 'Finland',
+ city = 'Helsinki'
+ ) {
+ this.firstName = firstName
+ this.lastName = lastName
+ this.age = age
+ this.country = country
+ this.city = city
+ }
+}
+
+const person1 = new Person() // it will take the default values
+const person2 = new Person('Lidiya', 'Tekle', 28, 'Finland', 'Espoo')
+
+console.log(person1)
+console.log(person2)
+```
+
+```sh
+Person {firstName: "Asabeneh", lastName: "Yetayeh", age: 250, country: "Finland", city: "Helsinki"}
+Person {firstName: "Lidiya", lastName: "Tekle", age: 28, country: "Finland", city: "Espoo"}
+```
+
+### Metodi di Classe
+
+Il costruttore all'interno di una classe è una funzione incorporata che ci permette di creare un progetto per l'oggetto. In una classe possiamo creare metodi di classe. I metodi sono funzioni JavaScript all'interno della classe. Creiamo alcuni metodi della classe.
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ this.firstName = firstName
+ this.lastName = lastName
+ this.age = age
+ this.country = country
+ this.city = city
+ }
+ getFullName() {
+ const fullName = this.firstName + ' ' + this.lastName
+ return fullName
+ }
+}
+
+const person1 = new Person('Asabeneh', 'Yetayeh', 250, 'Finland', 'Helsinki')
+const person2 = new Person('Lidiya', 'Tekle', 28, 'Finland', 'Espoo')
+
+console.log(person1.getFullName())
+console.log(person2.getFullName())
+```
+
+```sh
+Asabeneh Yetayeh
+test.js:19 Lidiya Tekle
+```
+
+### Proprietà con valori iniziali
+
+Quando creiamo una classe per alcune proprietà possiamo avere un valore iniziale. Per esempio, se si sta giocando, il punteggio iniziale sarà zero. Quindi, possiamo avere un punteggio iniziale o un punteggio che è zero. In altri termini, potremmo avere un'abilità iniziale e acquisirla dopo qualche tempo.
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ this.firstName = firstName
+ this.lastName = lastName
+ this.age = age
+ this.country = country
+ this.city = city
+ this.score = 0
+ this.skills = []
+ }
+ getFullName() {
+ const fullName = this.firstName + ' ' + this.lastName
+ return fullName
+ }
+}
+
+const person1 = new Person('Asabeneh', 'Yetayeh', 250, 'Finland', 'Helsinki')
+const person2 = new Person('Lidiya', 'Tekle', 28, 'Finland', 'Espoo')
+
+console.log(person1.score)
+console.log(person2.score)
+
+console.log(person1.skills)
+console.log(person2.skills)
+```
+
+```sh
+0
+0
+[]
+[]
+```
+
+Un metodo può essere un metodo normale, un getter o un setter. Vediamo i metodi getter e setter.
+
+### getter
+
+Il metodo get ci consente di accedere al valore dell'oggetto. Scriviamo un metodo get usando la parola chiave _get_ seguita da una funzione. Invece di accedere alle proprietà direttamente dall'oggetto, usiamo getter per ottenere il valore. Vedere l'esempio seguente
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ this.firstName = firstName
+ this.lastName = lastName
+ this.age = age
+ this.country = country
+ this.city = city
+ this.score = 0
+ this.skills = []
+ }
+ getFullName() {
+ const fullName = this.firstName + ' ' + this.lastName
+ return fullName
+ }
+ get getScore() {
+ return this.score
+ }
+ get getSkills() {
+ return this.skills
+ }
+}
+
+const person1 = new Person('Asabeneh', 'Yetayeh', 250, 'Finland', 'Helsinki')
+const person2 = new Person('Lidiya', 'Tekle', 28, 'Finland', 'Espoo')
+
+console.log(person1.getScore) // We do not need parenthesis to call a getter method
+console.log(person2.getScore)
+
+console.log(person1.getSkills)
+console.log(person2.getSkills)
+```
+
+```sh
+0
+0
+[]
+[]
+```
+
+### setter
+
+Il metodo setter ci consente di modificare il valore di alcune proprietà. Scriviamo un metodo setter usando la parola chiave _set_ seguita da una funzione. Si veda l'esempio qui sotto.
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ this.firstName = firstName
+ this.lastName = lastName
+ this.age = age
+ this.country = country
+ this.city = city
+ this.score = 0
+ this.skills = []
+ }
+ getFullName() {
+ const fullName = this.firstName + ' ' + this.lastName
+ return fullName
+ }
+ get getScore() {
+ return this.score
+ }
+ get getSkills() {
+ return this.skills
+ }
+ set setScore(score) {
+ this.score += score
+ }
+ set setSkill(skill) {
+ this.skills.push(skill)
+ }
+}
+
+const person1 = new Person('Asabeneh', 'Yetayeh', 250, 'Finland', 'Helsinki')
+const person2 = new Person('Lidiya', 'Tekle', 28, 'Finland', 'Espoo')
+
+person1.setScore = 1
+person1.setSkill = 'HTML'
+person1.setSkill = 'CSS'
+person1.setSkill = 'JavaScript'
+
+person2.setScore = 1
+person2.setSkill = 'Planning'
+person2.setSkill = 'Managing'
+person2.setSkill = 'Organizing'
+
+console.log(person1.score)
+console.log(person2.score)
+
+console.log(person1.skills)
+console.log(person2.skills)
+```
+
+```sh
+1
+1
+["HTML", "CSS", "JavaScript"]
+["Planning", "Managing", "Organizing"]
+```
+
+Non lasciatevi ingannare dalla differenza tra un metodo regolare e un getter. Se sapete come creare un metodo regolare, siete a posto. Aggiungiamo un metodo regolare chiamato getPersonInfo nella classe Person.
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ this.firstName = firstName
+ this.lastName = lastName
+ this.age = age
+ this.country = country
+ this.city = city
+ this.score = 0
+ this.skills = []
+ }
+ getFullName() {
+ const fullName = this.firstName + ' ' + this.lastName
+ return fullName
+ }
+ get getScore() {
+ return this.score
+ }
+ get getSkills() {
+ return this.skills
+ }
+ set setScore(score) {
+ this.score += score
+ }
+ set setSkill(skill) {
+ this.skills.push(skill)
+ }
+ getPersonInfo() {
+ let fullName = this.getFullName()
+ let skills =
+ this.skills.length > 0 &&
+ this.skills.slice(0, this.skills.length - 1).join(', ') +
+ ` and ${this.skills[this.skills.length - 1]}`
+ let formattedSkills = skills ? `He knows ${skills}` : ''
+
+ let info = `${fullName} is ${this.age}. He lives ${this.city}, ${this.country}. ${formattedSkills}`
+ return info
+ }
+}
+
+const person1 = new Person('Asabeneh', 'Yetayeh', 250, 'Finland', 'Helsinki')
+const person2 = new Person('Lidiya', 'Tekle', 28, 'Finland', 'Espoo')
+const person3 = new Person('John', 'Doe', 50, 'Mars', 'Mars city')
+
+person1.setScore = 1
+person1.setSkill = 'HTML'
+person1.setSkill = 'CSS'
+person1.setSkill = 'JavaScript'
+
+person2.setScore = 1
+person2.setSkill = 'Planning'
+person2.setSkill = 'Managing'
+person2.setSkill = 'Organizing'
+
+console.log(person1.getScore)
+console.log(person2.getScore)
+
+console.log(person1.getSkills)
+console.log(person2.getSkills)
+console.log(person3.getSkills)
+
+console.log(person1.getPersonInfo())
+console.log(person2.getPersonInfo())
+console.log(person3.getPersonInfo())
+```
+
+```sh
+1
+1
+["HTML", "CSS", "JavaScript"]
+["Planning", "Managing", "Organizing"]
+[]
+Asabeneh Yetayeh is 250. He lives Helsinki, Finland. He knows HTML, CSS and JavaScript
+Lidiya Tekle is 28. He lives Espoo, Finland. He knows Planning, Managing and Organizing
+John Doe is 50. He lives Mars city, Mars.
+```
+
+### Metodo Statico
+
+La parola chiave static definisce un metodo statico per una classe. I metodi statici non vengono richiamati sulle istanze della classe. Vengono invece richiamati sulla classe stessa. Si tratta spesso di funzioni di utilità, come quelle per creare o clonare oggetti. Un esempio di metodo statico è _Date.now()_. Il metodo _now_ viene richiamato direttamente dalla classe.
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ this.firstName = firstName
+ this.lastName = lastName
+ this.age = age
+ this.country = country
+ this.city = city
+ this.score = 0
+ this.skills = []
+ }
+ getFullName() {
+ const fullName = this.firstName + ' ' + this.lastName
+ return fullName
+ }
+ get getScore() {
+ return this.score
+ }
+ get getSkills() {
+ return this.skills
+ }
+ set setScore(score) {
+ this.score += score
+ }
+ set setSkill(skill) {
+ this.skills.push(skill)
+ }
+ getPersonInfo() {
+ let fullName = this.getFullName()
+ let skills =
+ this.skills.length > 0 &&
+ this.skills.slice(0, this.skills.length - 1).join(', ') +
+ ` and ${this.skills[this.skills.length - 1]}`
+
+ let formattedSkills = skills ? `He knows ${skills}` : ''
+
+ let info = `${fullName} is ${this.age}. He lives ${this.city}, ${this.country}. ${formattedSkills}`
+ return info
+ }
+ static favoriteSkill() {
+ const skills = ['HTML', 'CSS', 'JS', 'React', 'Python', 'Node']
+ const index = Math.floor(Math.random() * skills.length)
+ return skills[index]
+ }
+ static showDateTime() {
+ let now = new Date()
+ let year = now.getFullYear()
+ let month = now.getMonth() + 1
+ let date = now.getDate()
+ let hours = now.getHours()
+ let minutes = now.getMinutes()
+ if (hours < 10) {
+ hours = '0' + hours
+ }
+ if (minutes < 10) {
+ minutes = '0' + minutes
+ }
+
+ let dateMonthYear = date + '.' + month + '.' + year
+ let time = hours + ':' + minutes
+ let fullTime = dateMonthYear + ' ' + time
+ return fullTime
+ }
+}
+
+console.log(Person.favoriteSkill())
+console.log(Person.showDateTime())
+```
+
+```sh
+Node
+15.1.2020 23:56
+```
+
+The static methods are methods which can be used as utility functions.
+
+## Inheritance (Ereditarietà)
+
+Utilizzando l'ereditarietà, possiamo accedere a tutte le proprietà e ai metodi della classe madre. Questo riduce la ripetizione del codice. Se ricordate, abbiamo una classe genitore Persona e da questa creeremo dei figli. I nostri figli potrebbero essere studenti, insegnanti, ecc.
+
+```js
+// syntax
+class ChildClassName extends {
+ // code goes here
+}
+```
+
+Creiamo una classe figlio Student dalla classe genitore Person.
+
+```js
+class Student extends Person {
+ saySomething() {
+ console.log('I am a child of the person class')
+ }
+}
+
+const s1 = new Student('Asabeneh', 'Yetayeh', 'Finland', 250, 'Helsinki')
+console.log(s1)
+console.log(s1.saySomething())
+console.log(s1.getFullName())
+console.log(s1.getPersonInfo())
+```
+
+```sh
+Student {firstName: "Asabeneh", lastName: "Yetayeh", age: "Finland", country: 250, city: "Helsinki", …}
+I am a child of the person class
+Asabeneh Yetayeh
+Student {firstName: "Asabeneh", lastName: "Yetayeh", age: "Finland", country: 250, city: "Helsinki", …}
+Asabeneh Yetayeh is Finland. He lives Helsinki, 250.
+```
+
+### Override dei metodi
+
+Come si può vedere, riusciamo ad accedere a tutti i metodi della classe Person e li utilizziamo nella classe figlio Student. Possiamo personalizzare i metodi dei genitori e aggiungere proprietà aggiuntive a una classe figlio. Se vogliamo personalizzare i metodi e aggiungere proprietà aggiuntive, dobbiamo utilizzare la funzione costruttore anche per la classe figlio. All'interno della funzione costruttore chiamiamo la funzione super() per accedere a tutte le proprietà della classe genitore. La classe Person non aveva il genere, ma ora diamo la proprietà gender alla classe figlio, Student. Se lo stesso nome del metodo viene utilizzato nella classe figlio, il metodo genitore verrà sovrascritto.
+
+```js
+class Student extends Person {
+ constructor(firstName, lastName, age, country, city, gender) {
+ super(firstName, lastName, age, country, city)
+ this.gender = gender
+ }
+
+ saySomething() {
+ console.log('I am a child of the person class')
+ }
+ getPersonInfo() {
+ let fullName = this.getFullName()
+ let skills =
+ this.skills.length > 0 &&
+ this.skills.slice(0, this.skills.length - 1).join(', ') +
+ ` and ${this.skills[this.skills.length - 1]}`
+
+ let formattedSkills = skills ? `He knows ${skills}` : ''
+ let pronoun = this.gender == 'Male' ? 'He' : 'She'
+
+ let info = `${fullName} is ${this.age}. ${pronoun} lives in ${this.city}, ${this.country}. ${formattedSkills}`
+ return info
+ }
+}
+
+const s1 = new Student(
+ 'Asabeneh',
+ 'Yetayeh',
+ 250,
+ 'Finland',
+ 'Helsinki',
+ 'Male'
+)
+const s2 = new Student('Lidiya', 'Tekle', 28, 'Finland', 'Helsinki', 'Female')
+s1.setScore = 1
+s1.setSkill = 'HTML'
+s1.setSkill = 'CSS'
+s1.setSkill = 'JavaScript'
+
+s2.setScore = 1
+s2.setSkill = 'Planning'
+s2.setSkill = 'Managing'
+s2.setSkill = 'Organizing'
+
+console.log(s1)
+
+console.log(s1.saySomething())
+console.log(s1.getFullName())
+console.log(s1.getPersonInfo())
+
+console.log(s2.saySomething())
+console.log(s2.getFullName())
+console.log(s2.getPersonInfo())
+```
+
+```sh
+Student {firstName: "Asabeneh", lastName: "Yetayeh", age: 250, country: "Finland", city: "Helsinki", …}
+Student {firstName: "Lidiya", lastName: "Tekle", age: 28, country: "Finland", city: "Helsinki", …}
+I am a child of the person class
+Asabeneh Yetayeh
+Student {firstName: "Asabeneh", lastName: "Yetayeh", age: 250, country: "Finland", city: "Helsinki", …}
+Asabeneh Yetayeh is 250. He lives in Helsinki, Finland. He knows HTML, CSS and JavaScript
+I am a child of the person class
+Lidiya Tekle
+Student {firstName: "Lidiya", lastName: "Tekle", age: 28, country: "Finland", city: "Helsinki", …}
+Lidiya Tekle is 28. She lives in Helsinki, Finland. He knows Planning, Managing and Organizing
+```
+
+Ora, il metodo getPersonInfo è stato sovrascritto e identifica se la persona è maschio o femmina.
+
+🌕 Stai eccellendo. Ora conosci la classe e hai il potere di trasformare tutto in un oggetto. Hai raggiunto la metà della tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## Esercizi
+
+### Esercizi Livello 1
+
+1. Creare una classe Animale. La classe avrà le proprietà nome, età, colore, zampe e creerà diversi metodi.
+2. Creare una classe figlio Cane e Gatto dalla classe Animale.
+
+### Esercizi Livello 2
+
+1. Sovrascrivere il metodo creato nella classe Animale
+
+### Esercizi Livello 3
+
+1. Proviamo a sviluppare un programma che calcoli la misura della tendenza centrale di un campione (media, mediana, modalità) e la misura della variabilità (intervallo, varianza, deviazione standard). Oltre a queste misure, trova il minimo, il massimo, il numero, il percentile e la distribuzione di frequenza del campione. È possibile creare una classe chiamata Statistica e creare tutte le funzioni che eseguono calcoli statistici come metodi per la classe Statistica. Verificate l'output qui sotto.
+
+```JS
+ages = [31, 26, 34, 37, 27, 26, 32, 32, 26, 27, 27, 24, 32, 33, 27, 25, 26, 38, 37, 31, 34, 24, 33, 29, 26]
+
+console.log('Count:', statistics.count()) // 25
+console.log('Sum: ', statistics.sum()) // 744
+console.log('Min: ', statistics.min()) // 24
+console.log('Max: ', statistics.max()) // 38
+console.log('Range: ', statistics.range() // 14
+console.log('Mean: ', statistics.mean()) // 30
+console.log('Median: ',statistics.median()) // 29
+console.log('Mode: ', statistics.mode()) // {'mode': 26, 'count': 5}
+console.log('Variance: ',statistics.var()) // 17.5
+console.log('Standard Deviation: ', statistics.std()) // 4.2
+console.log('Variance: ',statistics.var()) // 17.5
+console.log('Frequency Distribution: ',statistics.freqDist()) // [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)]
+```
+
+```sh
+// you output should look like this
+console.log(statistics.describe())
+Count: 25
+Sum: 744
+Min: 24
+Max: 38
+Range: 14
+Mean: 30
+Median: 29
+Mode: (26, 5)
+Variance: 17.5
+Standard Deviation: 4.2
+Frequency Distribution: [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)]
+```
+
+1. Creare una classe chiamata PersonAccount. Ha le proprietà nome, cognome, reddito, spese e i metodi totalIncome, totalExpense, accountInfo, addIncome, addExpense e accountBalance. Le entrate sono un insieme di entrate e la loro descrizione e le spese sono anch'esse un insieme di spese e la loro descrizione.
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 14](../14_Day_Error_handling/14_day_error_handling.md) | [Day 16>>](../16_Day_JSON/16_day_json.md)
diff --git a/Italian/16_Day_JSON/16_day_json.md b/Italian/16_Day_JSON/16_day_json.md
new file mode 100644
index 000000000..bde95525f
--- /dev/null
+++ b/Italian/16_Day_JSON/16_day_json.md
@@ -0,0 +1,598 @@
+
+
+[<< Day 16](../16_Day_JSON/16_day_json.md) | [Day 18 >>](../18_Day_Promises/18_day_promises.md)
+
+
+
+- [Day 17](#day-17)
+ - [HTML5 Web Storage](#html5-web-storage)
+ - [sessionStorage](#sessionstorage)
+ - [localStorage](#localstorage)
+ - [Casi d'uso per il Web Storage](#use-case-of-web-storages)
+ - [Oggetti HTML5 Web Storage](#html5-web-storage-objects)
+ - [Impostare elementi nel localStorage](#setting-item-to-the-localstorage)
+ - [Ottenere elementi dal localStorage](#getting-item-from-localstorage)
+ - [Svuotare il localStorage](#clearing-the-localstorage)
+ - [Esercizi](#exercises)
+ - [Esercizi: Livello 1](#exercises-level-1)
+ - [Esercizi: Livello 2](#exercises-level-2)
+ - [Esercizi: Livello 3](#exercises-level-3)
+
+# Day 17
+
+## HTML5 Web Storage
+
+Web Storage (sessionStorage e localStorage) è una nuova API HTML5 che offre importanti vantaggi rispetto ai cookie tradizionali. Prima di HTML5, i dati delle applicazioni dovevano essere memorizzati nei cookie, inclusi in ogni richiesta del server. La memorizzazione sul Web è più sicura e grandi quantità di dati possono essere memorizzate localmente, senza influire sulle prestazioni del sito web. Il limite di memorizzazione dei dati dei cookie in molti browser web è di circa 4 KB per cookie. We Storages può memorizzare dati molto più grandi (almeno 5 MB) e non vengono mai trasferiti al server. Tutti i siti della stessa o di una stessa origine possono memorizzare e accedere agli stessi dati.
+
+È possibile accedere ai dati memorizzati utilizzando JavaScript, che consente di sfruttare lo scripting lato client per fare molte cose che tradizionalmente richiedevano la programmazione lato server e i database relazionali. Esistono due oggetti Web Storage:
+
+- sessionStorage
+- localStorage
+
+localStorage è simile a sessionStorage, tranne per il fatto che mentre i dati memorizzati in localStorage non hanno scadenza, i dati memorizzati in sessionStorage vengono cancellati quando la sessione della pagina termina, cioè quando la pagina viene chiusa.
+
+Va notato che i dati memorizzati in localStorage o in sessionStorage sono specifici del protocollo della pagina.
+
+Le chiavi e i valori sono sempre stringhe (si noti che, come per gli oggetti, le chiavi intere saranno automaticamente convertite in stringhe).
+
+
+
+### sessionStorage
+
+sessionStorage è disponibile solo all'interno della sessione della scheda o della finestra del browser. È progettato per memorizzare i dati in una singola sessione della pagina web. Ciò significa che se la finestra viene chiusa, i dati della sessione vengono rimossi. Poiché sessionStorage e localStorage hanno metodi simili, ci concentreremo solo su localStorage.
+
+### localStorage
+
+HTML5 localStorage è il para dell'API di archiviazione web che viene utilizzato per memorizzare i dati sul browser senza scadenza. I dati saranno disponibili sul browser anche dopo la sua chiusura. localStorage viene mantenuto anche tra le sessioni del browser. Ciò significa che i dati sono ancora disponibili quando il browser viene chiuso e riaperto e anche istantaneamente tra le schede e le finestre.
+
+I dati di Web Storage, in entrambi i casi, non sono disponibili tra i diversi browser. Ad esempio, gli oggetti di memorizzazione creati in Firefox non sono accessibili in Internet Explorer, esattamente come i cookie. Esistono cinque metodi per lavorare sull'archiviazione locale:
+_setItem(), getItem(), removeItem(), clear(), key()_
+
+### Casi d'uso per il Web Storage
+
+Alcuni casi d'uso degli archivi web sono
+
+- memorizzare temporaneamente i dati
+- salvare i prodotti che l'utente inserisce nel suo carrello della spesa
+- i dati possono essere resi disponibili tra le richieste di pagina, tra più schede del browser e anche tra le sessioni del browser utilizzando localStorage
+- possono essere utilizzati completamente offline utilizzando localStorage.
+- Il Web Storage può essere un grande vantaggio in termini di prestazioni quando alcuni dati statici vengono memorizzati sul client per ridurre al minimo il numero di richieste successive. Anche le immagini possono essere memorizzate in stringhe utilizzando la codifica Base64.
+- può essere usato per il metodo di autenticazione dell'utente
+
+Per gli esempi sopra citati, ha senso usare localStorage. Ci si potrebbe chiedere, allora, quando si dovrebbe usare sessionStorage.
+
+Nel caso in cui si voglia sbarazzarsi dei dati non appena la finestra viene chiusa. Oppure, se non si vuole che l'applicazione interferisca con la stessa applicazione aperta in un'altra finestra. Questi scenari sono meglio serviti con sessionStorage.
+
+Vediamo ora come utilizzare queste API di Web Storage.
+
+## Oggetti HTML5 Web Storage
+
+Il web storage HTML fornisce due oggetti per la memorizzazione dei dati sul client:
+
+- window.localStorage - memorizza i dati senza data di scadenza
+- window.sessionStorage - memorizza i dati per una sessione (i dati vengono persi quando la scheda del browser viene chiusa)La maggior parte dei browser moderni supporta Web Storage, tuttavia è bene verificare il supporto del browser per localStorage e sessionStorage. Vediamo i metodi disponibili per gli oggetti Web Storage.
+
+Oggetti Web Storage:
+
+- _localStorage_ - per visualizzare l'oggetto localStorage
+- _localStorage.clear()_ - per rimuovere tutto ciò che è presente nel localStorage
+- _localStorage.setItem()_ - per memorizzare i dati nel localStorage. Richiede i parametri chiave e valore.
+- _localStorage.getItem()_ - per visualizzare i dati memorizzati nel localStorage. Richiede una chiave come parametro.
+- _localStorage.removeItem()_ - per rimuovere un elemento memorizzato dal localStorage. Richiede la chiave come parametro.
+- _localStorage.key()_ - per visualizzare un dato memorizzato in un localStorage. Richiede l'indice come parametro.
+
+
+
+### Impostare elementi nel localStorage
+
+Quando si impostano i dati da memorizzare in un localStorage, questi vengono memorizzati come stringa. Se stiamo memorizzando un array o un oggetto, dovremmo prima stringare per mantenere il formato, a meno che non si perda la struttura dell'array o dell'oggetto dei dati originali.
+
+I dati vengono memorizzati nel localStorage utilizzando il metodo _localStorage.setItem_.
+
+```js
+//syntax
+localStorage.setItem('key', 'value')
+```
+
+- Memorizzazione di stringhe in un localStorage
+
+```js
+localStorage.setItem('firstName', 'Asabeneh') // since the value is string we do not stringify it
+console.log(localStorage)
+```
+
+```sh
+Storage {firstName: 'Asabeneh', length: 1}
+```
+
+- Storing number in a local storage
+
+```js
+localStorage.setItem('age', 200)
+console.log(localStorage)
+```
+
+```sh
+ Storage {age: '200', firstName: 'Asabeneh', length: 2}
+```
+
+- Memorizzazione di un array in un localStorage. Se si memorizza un array, un oggetto o un array di oggetti, occorre prima stringere l'oggetto. Vedere l'esempio seguente.
+
+```js
+const skills = ['HTML', 'CSS', 'JS', 'React']
+//Skills array has to be stringified first to keep the format.
+const skillsJSON = JSON.stringify(skills, undefined, 4)
+localStorage.setItem('skills', skillsJSON)
+console.log(localStorage)
+```
+
+```sh
+Storage {age: '200', firstName: 'Asabeneh', skills: 'HTML,CSS,JS,React', length: 3}
+```
+
+```js
+let skills = [
+ { tech: 'HTML', level: 10 },
+ { tech: 'CSS', level: 9 },
+ { tech: 'JS', level: 8 },
+ { tech: 'React', level: 9 },
+ { tech: 'Redux', level: 10 },
+ { tech: 'Node', level: 8 },
+ { tech: 'MongoDB', level: 8 }
+]
+
+let skillJSON = JSON.stringify(skills)
+localStorage.setItem('skills', skillJSON)
+```
+
+- Memorizzazione di un oggetto in un localStorage. Prima di memorizzare gli oggetti in un localStorage, l'oggetto deve essere stringato.
+
+```js
+const user = {
+ firstName: 'Asabeneh',
+ age: 250,
+ skills: ['HTML', 'CSS', 'JS', 'React']
+}
+
+const userText = JSON.stringify(user, undefined, 4)
+localStorage.setItem('user', userText)
+```
+
+### Ottenere elementi dal localStorage
+
+Si ottengono i dati dalla memoria locale con il metodo _localStorage.getItem()_.
+
+```js
+//syntax
+localStorage.getItem('key')
+```
+
+```js
+let firstName = localStorage.getItem('firstName')
+let age = localStorage.getItem('age')
+let skills = localStorage.getItem('skills')
+console.log(firstName, age, skills)
+```
+
+```sh
+ 'Asabeneh', '200', '['HTML','CSS','JS','React']'
+```
+
+Come si può vedere, l'abilità è in formato stringa. Utilizziamo JSON.parse() per analizzarla in un normale array.
+
+```js
+let skills = localStorage.getItem('skills')
+let skillsObj = JSON.parse(skills, undefined, 4)
+console.log(skillsObj)
+```
+
+```sh
+['HTML','CSS','JS','React']
+```
+
+### Svuotare il localStorage
+
+Il metodo clear cancella tutto ciò che è memorizzato nella memoria locale.
+
+```js
+localStorage.clear()
+```
+
+🌕 Ora conosci un Web Storages e sai come memorizzare piccoli dati sui browser dei client. Sei a 17 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il tuo cervello e per i muscoli.
+
+## Esercizi
+
+### Esercizi: Livello 1
+
+1. Memorizzare nome, cognome, età, paese e città nel browser localStorage.
+
+### Esercizi: Livello 2
+
+1. Creare un oggetto studente. L'oggetto studente avrà nome, cognome, età, competenze, nazione, chiavi di iscrizione e valori per le chiavi. Memorizzare l'oggetto studente nel localStorage del browser.
+
+### Esercizi: Livello 3
+
+1. Creare un oggetto chiamato personAccount. Ha le proprietà nome, cognome, reddito, spese e i metodi totalIncome, totalExpense, accountInfo, addIncome, addExpense e accountBalance. Le entrate sono un insieme di entrate e la loro descrizione e le spese sono anch'esse un insieme di spese e la loro descrizione.
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 16](../16_Day_JSON/16_day_json.md) | [Day 18 >>](../18_Day_Promises/18_day_promises.md)
diff --git a/Italian/18_Day_Promises/18_day_promises.md b/Italian/18_Day_Promises/18_day_promises.md
new file mode 100644
index 000000000..064362bb9
--- /dev/null
+++ b/Italian/18_Day_Promises/18_day_promises.md
@@ -0,0 +1,273 @@
+
+
+[<< Day 17](../17_Day_Web_storages/17_day_web_storages.md) | [Day 19>>](../19_Day_Closures/19_day_closures.md)
+
+
+
+- [Day 18](#day-18)
+ - [Promise](#promise)
+ - [Callbacks](#callbacks)
+ - [Costruttore Promise](#promise-constructor)
+ - [Fetch API](#fetch-api)
+ - [Async and Await](#async-and-await)
+ - [Esercizi](#exercises)
+ - [Esercizi: Livello 1](#exercises-level-1)
+ - [Esercizi: Livello 2](#exercises-level-2)
+ - [Esercizi: Livello 3](#exercises-level-3)
+
+# Day 18
+
+## Promise
+
+Noi esseri umani facciamo o riceviamo la promessa di svolgere un'attività in un determinato momento. Se manteniamo la promessa, rendiamo felici gli altri, ma se non la manteniamo, possiamo essere scontenti. La promessa in JavaScript ha qualcosa in comune con gli esempi precedenti.
+
+Una promessa è un modo per gestire operazioni asincrone in JavaScript. Permette ai gestori di avere un valore di successo o un motivo di fallimento di un'azione asincrona. Ciò consente ai metodi asincroni di restituire valori come i metodi sincroni: invece di restituire immediatamente il valore finale, il metodo asincrono restituisce una promessa di fornire il valore in un momento futuro.
+
+Una promessa si trova in uno di questi stati:
+
+- pending: stato iniziale, né soddisfatto né rifiutato.
+- soddisfatta: significa che l'operazione è stata completata con successo.
+- rifiutata: significa che l'operazione è fallita.
+
+Una promessa in sospeso può essere soddisfatta con un valore o rifiutata con un motivo (errore). Quando si verifica una di queste opzioni, vengono richiamati i gestori associati messi in coda dal metodo then di una promessa. (Se la promessa è già stata soddisfatta o rifiutata quando viene collegato un gestore corrispondente, il gestore verrà chiamato, in modo che non ci sia una condizione di gara tra il completamento di un'operazione asincrona e il collegamento dei suoi gestori).
+
+Poiché i metodi Promise.prototype.then() e Promise.prototype.catch() restituiscono promesse, possono essere concatenati.
+
+## Callbacks
+
+Per comprendere bene la promise, dobbiamo prima capire le callback. Vediamo le seguenti callback. Dai seguenti blocchi di codice si noterà la differenza tra callback e promise.
+
+- callback
+ Vediamo una funzione di callback che può accettare due parametri. Il primo parametro è err e il secondo è result. Se il parametro err è false, non ci sarà alcun errore, altrimenti restituirà un errore.
+
+In questo caso err ha un valore e restituirà il blocco err.
+
+```js
+//Callback
+const doSomething = callback => {
+ setTimeout(() => {
+ const skills = ['HTML', 'CSS', 'JS']
+ callback('It did not go well', skills)
+ }, 2000)
+}
+
+const callback = (err, result) => {
+ if (err) {
+ return console.log(err)
+ }
+ return console.log(result)
+}
+
+doSomething(callback)
+```
+
+```sh
+// after 2 seconds it will print
+It did not go well
+```
+
+In questo caso l'errore è falso e restituirà il blocco else che è il risultato.
+
+```js
+const doSomething = callback => {
+ setTimeout(() => {
+ const skills = ['HTML', 'CSS', 'JS']
+ callback(false, skills)
+ }, 2000)
+}
+
+doSomething((err, result) => {
+ if (err) {
+ return console.log(err)
+ }
+ return console.log(result)
+})
+```
+
+```sh
+// after 2 seconds it will print the skills
+["HTML", "CSS", "JS"]
+```
+
+### Costruttore Promise
+
+Possiamo creare una promessa utilizzando il costruttore Promise. Possiamo creare una nuova promessa usando la parola chiave `new` seguita dalla parola `Promise` e seguita da una parentesi. All'interno della parentesi, prende una funzione `callback`. La funzione di callback della promessa ha due parametri, che sono le funzioni _`resolve`_ e _`reject`_.
+
+```js
+// syntax
+const promise = new Promise((resolve, reject) => {
+ resolve('success')
+ reject('failure')
+})
+```
+
+```js
+// Promise
+const doPromise = new Promise((resolve, reject) => {
+ setTimeout(() => {
+ const skills = ['HTML', 'CSS', 'JS']
+ if (skills.length > 0) {
+ resolve(skills)
+ } else {
+ reject('Something wrong has happened')
+ }
+ }, 2000)
+})
+
+doPromise
+ .then(result => {
+ console.log(result)
+ })
+ .catch(error => console.log(error))
+```
+
+```sh
+["HTML", "CSS", "JS"]
+```
+
+La promessa di cui sopra è stata risolta con resolve.
+Facciamo un altro esempio quando la promessa viene risolta con un rifiuto.
+
+```js
+// Promise
+const doPromise = new Promise((resolve, reject) => {
+ setTimeout(() => {
+ const skills = ['HTML', 'CSS', 'JS']
+ if (skills.includes('Node')) {
+ resolve('fullstack developer')
+ } else {
+ reject('Something wrong has happened')
+ }
+ }, 2000)
+})
+
+doPromise
+ .then(result => {
+ console.log(result)
+ })
+ .catch(error => console.error(error))
+```
+
+```sh
+Something wrong has happened
+```
+
+## Fetch API
+
+L'API Fetch fornisce un'interfaccia per il recupero di risorse (anche attraverso la rete). Sembrerà familiare a chiunque abbia usato XMLHttpRequest, ma la nuova API fornisce un insieme di funzionalità più potenti e flessibili. In questa sfida useremo fetch per richiedere url e APIS. Inoltre, vedremo un caso d'uso dimostrativo delle promesse per accedere alle risorse di rete utilizzando l'API fetch.
+
+```js
+const url = 'https://restcountries.com/v2/all' // countries api
+fetch(url)
+ .then(response => response.json()) // accessing the API data as JSON
+ .then(data => {
+ // getting the data
+ console.log(data)
+ })
+ .catch(error => console.error(error)) // handling error if something wrong happens
+```
+
+## Async and Await
+
+Async e await sono un modo elegante di gestire le promesse. È facile da capire e pulito da scrivere.
+
+```js
+const square = async function (n) {
+ return n * n
+}
+
+square(2)
+```
+
+```sh
+Promise {: 4}
+```
+
+La parola _async_ davanti a una funzione significa che la funzione restituirà una promessa. La funzione quadrata di cui sopra, invece di un valore, restituisce una promessa.
+
+Come si accede al valore della promessa? Per accedere al valore della promessa, utilizzeremo la parola chiave _await_.
+
+```js
+const square = async function (n) {
+ return n * n
+}
+const value = await square(2)
+console.log(value)
+```
+
+```sh
+4
+```
+
+Ora, come si può vedere dall'esempio precedente, scrivendo async davanti a una funzione si crea una promessa e per ottenere il valore da una promessa si usa await. Async e await vanno insieme, uno non può esistere senza l'altro.
+
+Cerchiamo di recuperare i dati dell'API utilizzando sia il metodo promise che i metodi async e await.
+
+- promise
+
+```js
+const url = 'https://restcountries.com/v2/all'
+fetch(url)
+ .then(response => response.json())
+ .then(data => {
+ console.log(data)
+ })
+ .catch(error => console.error(error))
+```
+
+- async and await
+
+```js
+const fetchData = async () => {
+ try {
+ const response = await fetch(url)
+ const countries = await response.json()
+ console.log(countries)
+ } catch (err) {
+ console.error(err)
+ }
+}
+console.log('===== async and await')
+fetchData()
+```
+
+🌕 Sei reale, hai mantenuto la tua promessa e sei arrivato al 18° giorno. Mantieni la tua promessa e affronta la sfida con determinazione. Sei 18 passi avanti verso la tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e i muscoli.
+
+## Esercizi
+
+```js
+const countriesAPI = 'https://restcountries.com/v2/all'
+const catsAPI = 'https://api.thecatapi.com/v1/breeds'
+```
+
+### Esercizi: Livello 1
+
+1. Leggere le API dei paesi utilizzando fetch e stampare il nome del paese, la capitale, le lingue, la popolazione e l'area.
+
+### Esercizi: Livello 2
+
+1. Stampare tutti i nomi dei gatti nella variabile catNames.
+
+### Esercizi: Livello 3
+
+1. Leggere l'api gatti e trovare il peso medio dei gatti in unità metriche.
+2. Leggete l'api dei Paesi e trovate i 10 Paesi più grandi.
+3. Leggete l'api dei Paesi e contate il numero totale di lingue del mondo usate come ufficiali.
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 17](../17_Day_Web_storages/17_day_web_storages.md) | [Day 19>>](../19_Day_Closures/19_day_closures.md)
diff --git a/Italian/19_Day_Closures/19_day_closures.md b/Italian/19_Day_Closures/19_day_closures.md
new file mode 100644
index 000000000..0257842f5
--- /dev/null
+++ b/Italian/19_Day_Closures/19_day_closures.md
@@ -0,0 +1,104 @@
+
+
+[<< Day 18](../18_Day_Promises/18_day_promises.md) | [Day 20 >>](../20_Day_Writing_clean_codes/20_day_writing_clean_codes.md)
+
+
+- [Day 19](#day-19)
+ - [Closure](#closure)
+ - [Esercizi](#exercises)
+ - [Esercizi: Livello 1](#exercises-level-1)
+ - [Esercizi: Livello 2](#exercises-level-2)
+ - [Esercizi: Livello 3](#exercises-level-3)
+
+# Day 19
+
+## Closure
+
+JavaScript consente di scrivere una funzione all'interno di una funzione esterna. Possiamo scrivere tutte le funzioni interne che vogliamo. Se la funzione interna accede alle variabili della funzione esterna, si parla di chiusura.
+
+```js
+function outerFunction() {
+ let count = 0;
+ function innerFunction() {
+ count++
+ return count
+ }
+
+ return innerFunction
+}
+const innerFunc = outerFunction()
+
+console.log(innerFunc())
+console.log(innerFunc())
+console.log(innerFunc())
+```
+
+```sh
+1
+2
+3
+```
+
+Vediamo altri esempi di funzioni interne
+
+```js
+function outerFunction() {
+ let count = 0;
+ function plusOne() {
+ count++
+ return count
+ }
+ function minusOne() {
+ count--
+ return count
+ }
+
+ return {
+ plusOne:plusOne(),
+ minusOne:minusOne()
+ }
+}
+const innerFuncs = outerFunction()
+
+console.log(innerFuncs.plusOne)
+console.log(innerFuncs.minusOne)
+```
+
+```sh
+1
+0
+```
+
+🌕 State facendo progressi. Mantenete lo slancio, continuate a lavorare bene. Ora fate qualche esercizio per il cervello e per i muscoli.
+
+## Esercizi
+
+### Esercizi: Livello 1
+
+1. Creare una chiusura che abbia una funzione interna
+
+### Esercizi: Livello 2
+
+1. Creare una chiusura con tre funzioni interne
+
+### Esercizi: Livello 3
+
+1. Creare una funzione esterna PersonAccount. Ha le variabili interne nome, cognome, reddito e spese. Ha le funzioni interne totalIncome, totalExpense, accountInfo, addIncome, addExpense e accountBalance. Entrate è un insieme di entrate e relativa descrizione e spese è un insieme di spese e relativa descrizione.
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 18](../18_Day_Promises/18_day_promises.md) | [Day 20 >>](../20_Day_Writing_clean_codes/20_day_writing_clean_codes.md)
\ No newline at end of file
diff --git a/Italian/20_Day_Writing_clean_codes/20_day_writing_clean_codes.md b/Italian/20_Day_Writing_clean_codes/20_day_writing_clean_codes.md
new file mode 100644
index 000000000..3a73ae474
--- /dev/null
+++ b/Italian/20_Day_Writing_clean_codes/20_day_writing_clean_codes.md
@@ -0,0 +1,360 @@
+
+
+[<< Day 19](../19_Day_Closuers/19_day_closures.md) | [Day 21 >>](../21_Day_DOM/21_day_dom.md)
+
+
+- [Day 20](#day-20)
+ - [Scrivere codice pulito](#writing-clean-code)
+ - [Guida allo stile in JavaScript](#javascript-style-guide)
+ - [Perché abbiamo bisogno di uno stile](#why-we-need-style-guide)
+ - [Guida allo stile Airbnb](#airbnb-javascript-style-guide)
+ - [Guida allo stile Standard JavaScript](#standard-javascript-style-guide)
+ - [Guida allo stile Google](#google-javascript-style-guide)
+ - [Convenzioni del codice JavaScript](#javascript-coding-conventions)
+ - [Convenzioni usate in 30DaysOfJavaScript](#conventions-use-in-30daysofjavascript)
+ - [Variables](#variables)
+ - [Arrays](#arrays)
+ - [Functions](#functions)
+ - [Loops](#loops)
+ - [Objects](#objects)
+ - [Conditional](#conditional)
+ - [Classes](#classes)
+
+# Day 20
+
+## Scrivere codice pulito
+
+### Guida allo stile in JavaScript
+
+Una guida di stile JavaScript è un insieme di standard che indica come il codice JavaScript dovrebbe essere scritto e organizzato. In questa sezione parleremo delle guide JavaScript e di come scrivere un codice pulito.
+
+JavaScript è un linguaggio di programmazione e, come i linguaggi umani, ha una sintassi. La sintassi di JavaScript deve essere scritta seguendo una certa linea guida di stile, per motivi di convinzione e semplicità.
+
+### Perché abbiamo bisogno di uno stile
+
+Avete codificato da soli per tanto tempo, ma ora sembra che dobbiate lavorare in team. Non importa in che modo scriviate il codice, purché funzioni, ma quando lavorate in un team di 10 o 20 o più sviluppatori su un progetto e sullo stesso codice base, il codice sarà disordinato e difficile da gestire se non ci sono linee guida da seguire.
+
+È possibile sviluppare linee guida e convenzioni proprie o adattare linee guida ben sviluppate. Vediamo le linee guida più comuni.
+Guida allo stile più comune in JavaScript
+
+- Guida allo stile Airbnb
+- Guida allo stile standard di JavaScript
+- Guida allo stile Google
+
+#### Guida allo stile Airbnb
+
+Airbnb ha una delle guide di stile JavaScript più popolari su Internet. Copre quasi tutti gli aspetti di JavaScript ed è adottata da molti sviluppatori e aziende. Potete consultare la [Guida allo stile di Airbnb](https://github.com/airbnb/javascript). Vi consiglio di provarla. Il loro stile è molto facile da usare e semplice da capire.
+
+#### Guida allo stile Standard JavaScript
+
+Questa linea guida non è così popolare come Airbnb, ma vale la pena guardarla. Hanno rimosso il punto e virgola nel loro [style guide](https://standardjs.com/).
+
+#### Guida allo stile Google
+
+Non parlo molto delle linee guida di Google e non le ho usate, piuttosto vi suggerisco di dare un'occhiata a questo sito. [link](https://google.github.io/styleguide/jsguide.html).
+
+### Convenzioni del codice JavaScript
+
+Anche in questa sfida abbiamo utilizzato le convenzioni e le guide generali di scrittura di JavaScript. Le convenzioni di codifica sono linee guida di stile per la programmazione sviluppate da un individuo, un team o un'azienda.
+
+Le convenzioni di codifica aiutano a
+
+- scrivere codice pulito
+- migliorare la leggibilità del codice
+- migliorare la riutilizzabilità e la manutenibilità del codice
+
+Le convenzioni di codifica comprendono
+
+- Regole di denominazione e dichiarazione per le variabili
+- Regole di denominazione e dichiarazione per le funzioni
+- Regole per l'uso degli spazi bianchi, dell'indentazione e dei commenti.
+- Pratiche e principi di programmazione
+
+#### Convenzioni usate in 30DaysOfJavaScript
+
+In questa sfida abbiamo seguito le normali convenzioni di JavaScript, ma ho aggiunto anche le mie preferenze di scrittura.
+
+- Abbiamo usato il camelCase per le variabili e le funzioni.
+- Tutti i nomi delle variabili iniziano con una lettera.
+- Abbiamo scelto di usare *const* per costanti, array, oggetti e funzioni. Al posto delle doppie virgolette, abbiamo scelto di usare le virgolette singole o il backtick. Le virgolette singole stanno diventando di moda.
+- Abbiamo anche eliminato i punti e virgola dal nostro codice, ma è una questione di preferenze personali.
+- Spazio intorno agli operatori aritmetici, agli operatori di assegnazione e dopo la virgola.
+- Freccia di funzione invece di dichiarazione di funzione
+- Ritorno esplicito invece di ritorno implicito se la funzione è one liner
+- Nessuna virgola nell'ultimo valore di un oggetto.
+- Preferiamo questi +=, -=, *= /=, **= invece della versione più lunga
+- Quando si usa console.log() è bene stampare con una stringa di tag per identificare da dove proviene la console
+
+#### Variables
+
+```js
+
+let firstName = 'Asabeneh'
+let lastName = 'Yetayeh'
+let country = 'Finland'
+let city = 'Helsinki'
+
+const PI = Math.PI
+const gravity = 9.81
+```
+
+#### Arrays
+
+Abbiamo scelto di rendere i nomi degli array plurali
+
+- names
+- numbers
+- countries
+- languages
+- skills
+- fruits
+- vegetables
+
+```js
+// arrays
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+const numbers = [0, 3.14, 9.81, 37, 98.6, 100]
+const countries = ['Finland', 'Denmark', 'Sweden', 'Norway', 'Iceland']
+const languages = ['Amharic', 'Arabic', 'English', 'French', 'Spanish']
+const skills = ['HTML', 'CSS', 'JavaScript', 'React', 'Python']
+const fruits = ['banana', 'orange', 'mango', 'lemon']
+const vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
+```
+
+#### Functions
+
+Ormai conoscete bene la dichiarazione di funzione, la funzione espressione, la funzione freccia e la funzione anonima. In questa sfida tendiamo a usare la funzione freccia invece di altre funzioni. La funzione freccia non sostituisce le altre funzioni. Inoltre, le funzioni freccia e le dichiarazioni di funzione non sono esattamente la stessa cosa. È quindi necessario sapere quando usarle e quando no. Tratterò la differenza in dettaglio in altre sezioni. Utilizzeremo il ritorno esplicito al posto di quello implicito se la funzione è una sola riga.
+
+```js
+// function which return full name of a person
+const printFullName = (firstName, lastName) => firstName + ' ' + lastName
+
+// function which calculates a square of a number
+const square = (n) => n * n
+
+// a function which generate random hexa colors
+const hexaColor = () => {
+ const str = '0123456789abcdef'
+ let hexa = '#'
+ let index
+ for (let i = 0; i < 6; i++) {
+ index = Math.floor(Math.random() * str.length)
+ hexa += str[index]
+ }
+ return hexa
+}
+
+// a function which shows date and time
+const showDateTime = () => {
+ const now = new Date()
+ const year = now.getFullYear()
+ const month = now.getMonth() + 1
+ const date = now.getDate()
+ let hours = now.getHours()
+ let minutes = now.getMinutes()
+ if (hours < 10) {
+ hours = '0' + hours
+ }
+ if (minutes < 10) {
+ minutes = '0' + minutes
+ }
+
+ const dateMonthYear = date + '.' + month + '.' + year
+ const time = hours + ':' + minutes
+ const fullTime = dateMonthYear + ' ' + time
+ return fullTime
+}
+```
+
+Il metodo `new Dat().toLocaleString()` può essere utilizzato anche per visualizzare l'ora della data corrente. I metodi `toLocaleString()` accettano diversi argomenti. Per saperne di più sulla data e sull'ora, consultare questo documento [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString).
+
+#### Loops
+
+In questa sfida copriamo molti tipi di loop. I normali cicli for, while, do while, for of, forEach e for in.
+Vediamo come utilizzarli:
+
+```js
+for (let i = 0; i < n; i++){
+ console.log()
+}
+
+// declaring an array variable
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+
+// iterating an array using regular for loop
+let len = names.length;
+for(let i = 0; i < len; i++){
+ console.log(names[i].toUpperCase())
+}
+
+
+// iterating an array using for of
+for( const name of names) {
+ console.log(name.toUpperCase())
+}
+
+// iterating array using forEach
+names.forEach((name) => name.toUpperCase())
+
+
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: ['HTML','CSS','JavaScript','React','Node','MongoDB','Python','D3.js'],
+ isMarried: true
+}
+for(const key in person) {
+ console.log(key)
+}
+
+```
+
+#### Objects
+
+Dichiariamo gli oggetti letterali con *const*.
+
+```js
+// declaring object literal
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: ['HTML','CSS','JavaScript','TypeScript', 'React','Node','MongoDB','Python','D3.js'],
+ isMarried: true
+}
+// iterating through object keys
+for(const key in person) {
+ console.log(key, person[key])
+}
+
+```
+
+#### Conditional
+
+ Nelle sfide precedenti abbiamo parlato di operatori if, if else, if else, switch e ternari.
+
+ ```js
+ // syntax
+if (condition) {
+ // this part of code run for truthy condition
+} else {
+ // this part of code run for false condition
+}
+ ```
+
+ ```js
+ // if else
+let num = 3
+if (num > 0) {
+ console.log(`${num} is a positive number`)
+} else {
+ console.log(`${num} is a negative number`)
+}
+// 3 is a positive number
+ ```
+
+ ```js
+ // if else if else if else
+
+let a = 0
+if (a > 0) {
+ console.log(`${a} is a positive number`)
+} else if (a < 0) {
+ console.log(`${a} is a negative number`)
+} else if (a == 0) {
+ console.log(`${a} is zero`)
+} else {
+ console.log(`${a} is not a number`)
+}
+ ```
+
+ ```js
+ // Switch More Examples
+let dayUserInput = prompt('What day is today ?')
+let day = dayUserInput.toLowerCase()
+
+switch (day) {
+ case 'monday':
+ console.log('Today is Monday')
+ break
+ case 'tuesday':
+ console.log('Today is Tuesday')
+ break
+ case 'wednesday':
+ console.log('Today is Wednesday')
+ break
+ case 'thursday':
+ console.log('Today is Thursday')
+ break
+ case 'friday':
+ console.log('Today is Friday')
+ break
+ case 'saturday':
+ console.log('Today is Saturday')
+ break
+ case 'sunday':
+ console.log('Today is Sunday')
+ break
+ default:
+ console.log('It is not a week day.')
+}
+ ```
+
+ ```js
+ // ternary
+
+ let isRaining = true
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+ ```
+
+#### Classes
+
+Dichiariamo la classe con CamelCase, che inizia con la lettera maiuscola.
+
+```js
+// syntax
+class ClassName {
+ // code goes here
+}
+```
+
+```js
+// defining class
+class Person {
+ constructor(firstName, lastName) {
+ console.log(this) // Check the output from here
+ this.firstName = firstName
+ this.lastName = lastName
+ }
+}
+
+```
+
+Qualunque sia la guida di stile che seguite, siate coerenti. Seguite alcuni paradigmi di programmazione e modelli di progettazione. Ricordate che se non scrivete il codice in un certo ordine o modo, sarà difficile leggerlo. Quindi, fate un favore a voi stessi o a chi leggerà il vostro codice scrivendo codice leggibile.
+
+🌕 Sei ordinato. Ora, sapete come scrivere codice pulito, quindi chiunque conosca la lingua inglese può capire il tuo codice. Sei sempre in progresso e sei a 20 passi verso la grandezza.
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 19](../19_Day_Closuers/19_day_closures.md) | [Day 21 >>](../21_Day_DOM/21_day_dom.md)
diff --git a/Italian/21_Day_DOM/21_day_dom.md b/Italian/21_Day_DOM/21_day_dom.md
new file mode 100644
index 000000000..977b61823
--- /dev/null
+++ b/Italian/21_Day_DOM/21_day_dom.md
@@ -0,0 +1,409 @@
+
+
+[<< Day 20](../20_Day_Writing_clean_codes/20_day_writing_clean_codes.md) | [Day 22 >>](../22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md)
+
+
+
+- [Day 21](#day-21)
+ - [Document Object Model (DOM) - Day 1](#document-object-model-dom---day-1)
+ - [Ottenere un Elemento](#getting-element)
+ - [Ottenere un Elemento tramite nome tag](#getting-elements-by-tag-name)
+ - [Ottenere un Elemento tramite nome classe](#getting-elements-by-class-name)
+ - [Ottenere un Elemento tramite nome id](#getting-an-element-by-id)
+ - [Ottenere un Elemento tramite i metodi querySelector](#getting-elements-by-using-queryselector-methods)
+ - [Aggiungere attributi](#adding-attribute)
+ - [Aggiungere attributi usando setAttribute](#adding-attribute-using-setattribute)
+ - [Aggiungere attributi senza usare setAttribute](#adding-attribute-without-setattribute)
+ - [Aggiungere attributi usando classList](#adding-class-using-classlist)
+ - [Rimuovere una classe usando remove](#removing-class-using-remove)
+ - [Aggiungere Testo ad un elemento HTML](#adding-text-to-html-element)
+ - [Aggiungere Testo usando textContent](#adding-text-content-using-textcontent)
+ - [Aggiungere test usando innerHTML](#adding-text-content-using-innerhtml)
+ - [Text Content](#text-content)
+ - [Inner HTML](#inner-html)
+ - [Aggiungere uno stile](#adding-style)
+ - [Aggiungere un colore](#adding-style-color)
+ - [Aggiungere un colore di background](#adding-style-background-color)
+ - [Definire una dimensione del testo](#adding-style-font-size)
+ - [Esercizi](#exercises)
+ - [EsercizioLivello 1](#exercise-level-1)
+ - [EsercizioLivello 2](#exercise-level-2)
+ - [EsercizioLivello 3](#exercise-level-3)
+ - [DOM: Mini project 1](#dom-mini-project-1)
+
+# Day 21
+
+## Document Object Model (DOM) - Day 1
+
+Il documento HTML è strutturato come un oggetto JavaScript. Ogni elemento HTML ha diverse proprietà che possono aiutare a manipolarlo. È possibile ottenere, creare, aggiungere o rimuovere elementi HTML utilizzando JavaScript. Verificate gli esempi riportati di seguito. La selezione di un elemento HTML tramite JavaScript è simile alla selezione tramite CSS. Per selezionare un elemento HTML, si utilizza il nome del tag, l'id, il nome della classe o altri attributi.
+
+### Ottenere un Elemento
+
+Possiamo accedere a elementi o elementi già creati utilizzando JavaScript. Per accedere agli elementi o ottenerli utilizziamo diversi metodi. Il codice sottostante ha quattro elementi _h1_. Vediamo i diversi metodi per accedere agli elementi _h1_.
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
First Title
+
Second Title
+
Third Title
+
+
+
+
+```
+
+#### Ottenere un Elemento tramite nome tag
+
+**_getElementsByTagName()_**:prende un nome di tag come parametro stringa e questo metodo restituisce un oggetto HTMLCollection. Una HTMLCollection è un oggetto simile a un array di elementi HTML. La proprietà length fornisce la dimensione dell'insieme. Ogni volta che si utilizza questo metodo, si accede ai singoli elementi utilizzando l'indice o dopo aver eseguito un ciclo su ogni singolo elemento. Un HTMLCollection non supporta tutti i metodi degli array, quindi dovremmo usare il normale ciclo for invece di forEach.
+
+```js
+// syntax
+document.getElementsByTagName('tagname')
+```
+
+```js
+const allTitles = document.getElementsByTagName('h1')
+
+console.log(allTitles) //HTMLCollections
+console.log(allTitles.length) // 4
+
+for (let i = 0; i < allTitles.length; i++) {
+ console.log(allTitles[i]) // prints each elements in the HTMLCollection
+}
+```
+
+#### Ottenere un Elemento tramite nome classe
+
+Il metodo **_getElementsByClassName()_** restituisce un oggetto HTMLCollection. Una HTMLCollection è un elenco di elementi HTML simile a un array. La proprietà length fornisce la dimensione dell'insieme. È possibile scorrere tutti gli elementi di HTMLCollection. Vedere l'esempio seguente
+
+```js
+//syntax
+document.getElementsByClassName('classname')
+```
+
+```js
+const allTitles = document.getElementsByClassName('title')
+
+console.log(allTitles) //HTMLCollections
+console.log(allTitles.length) // 4
+
+for (let i = 0; i < allTitles.length; i++) {
+ console.log(allTitles[i]) // prints each elements in the HTMLCollection
+}
+```
+
+#### Ottenere un Elemento tramite nome id
+
+**_getElementsById()_** si rivolge a un singolo elemento HTML. Si passa l'id senza # come argomento.
+
+```js
+//syntax
+document.getElementById('id')
+```
+
+```js
+let firstTitle = document.getElementById('first-title')
+console.log(firstTitle) //
First Title
+```
+
+#### Ottenere un Elemento tramite i metodi querySelector
+
+Il metodo _document.querySelector_ può selezionare un elemento HTML o elementi HTML per nome di tag, id o classe.
+
+**_querySelector_**: può essere usato per selezionare un elemento HTML in base al suo nome di tag, id o classe. Se viene utilizzato il nome del tag, viene selezionato solo il primo elemento.
+
+```js
+let firstTitle = document.querySelector('h1') // select the first available h1 element
+let firstTitle = document.querySelector('#first-title') // select id with first-title
+let firstTitle = document.querySelector('.title') // select the first available element with class title
+```
+
+**_querySelectorAll_**: può essere usato per selezionare elementi html in base al nome del tag o della classe. Restituisce un nodeList, che è un oggetto simile a un array che supporta i metodi degli array. Si può usare **_for loop_** o **_forEach_** per scorrere ogni elemento dell'elenco di nodi.
+
+```js
+const allTitles = document.querySelectorAll('h1') # selects all the available h1 elements in the page
+
+console.log(allTitles.length) // 4
+for (let i = 0; i < allTitles.length; i++) {
+ console.log(allTitles[i])
+}
+
+allTitles.forEach(title => console.log(title))
+const allTitles = document.querySelectorAll('.title') // the same goes for selecting using class
+```
+
+### Aggiungere attributi
+
+Nel tag di apertura dell'HTML viene aggiunto un attributo che fornisce informazioni aggiuntive sull'elemento. Attributi HTML comuni: id, class, src, style, href, disabled, title, alt. Aggiungiamo id e class per il quarto titolo.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles[3].className = 'title'
+titles[3].id = 'fourth-title'
+```
+
+#### Aggiungere attributi usando setAttribute
+
+Il metodo **_setAttribute()_** imposta qualsiasi attributo html. Richiede due parametri: il tipo di attributo e il nome dell'attributo.
+Aggiungiamo gli attributi class e id per il quarto titolo.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles[3].setAttribute('class', 'title')
+titles[3].setAttribute('id', 'fourth-title')
+```
+
+#### Aggiungere attributi senza usare setAttribute
+
+Possiamo usare il normale metodo di impostazione degli oggetti per impostare un attributo, ma questo non può funzionare per tutti gli elementi. Alcuni attributi sono proprietà degli oggetti DOM e possono essere impostati direttamente. Ad esempio, id e class
+
+```js
+//another way to setting an attribute
+titles[3].className = 'title'
+titles[3].id = 'fourth-title'
+```
+
+#### Aggiungere attributi usando classList
+
+Il metodo dell'elenco di classi è un buon metodo per aggiungere classi supplementari. Non sovrascrive la classe originale, se esiste, ma aggiunge una classe aggiuntiva per l'elemento.
+
+```js
+//another way to setting an attribute: append the class, doesn't over ride
+titles[3].classList.add('title', 'header-title')
+```
+
+#### Rimuovere una classe usando remove
+
+Analogamente all'aggiunta, possiamo anche rimuovere una classe da un elemento. Possiamo rimuovere una classe specifica da un elemento.
+
+```js
+//another way to setting an attribute: append the class, doesn't over ride
+titles[3].classList.remove('title', 'header-title')
+```
+
+### Aggiungere Testo ad un elemento HTML
+
+Un HTML è un blocco composto da un tag di apertura, un tag di chiusura e un contenuto testuale. Possiamo aggiungere un contenuto testuale utilizzando la proprietà _textContent_ o \*innerHTML.
+
+#### Aggiungere Testo usando textContent
+
+La proprietà _textContent_ viene utilizzata per aggiungere testo a un elemento HTML.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles[3].textContent = 'Fourth Title'
+```
+
+#### Aggiungere test usando innerHTML
+
+Molte persone si confondono tra _textContent_ e _innerHTML_. _textContent_ ha lo scopo di aggiungere testo a un elemento HTML, mentre innerHTML può aggiungere uno o più elementi di testo o HTML come figli.
+
+##### Text Content
+
+Assegniamo la proprietà dell'oggetto HTML *textContent* a un testo
+
+```js
+const titles = document.querySelectorAll('h1')
+titles[3].textContent = 'Fourth Title'
+```
+
+##### Inner HTML
+
+Utilizziamo la proprietà innerHTML quando vogliamo sostituire o aggiungere un contenuto completamente nuovo a un elemento genitore.
+Il valore assegnato sarà una stringa di elementi HTML.
+
+```html
+
+
+
+ JavaScript for Everyone:DOM
+
+
+
+
Asabeneh Yetayeh challenges in 2020
+
30DaysOfJavaScript Challenge
+
+
+
+
+
+```
+
+La proprietà innerHTML può consentire anche di rimuovere tutti i figli di un elemento genitore. Invece di usare removeChild(), raccomanderei il metodo seguente.
+
+```html
+
+
+
+ JavaScript for Everyone:DOM
+
+
+
+
Asabeneh Yetayeh challenges in 2020
+
30DaysOfJavaScript Challenge
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Ongoing
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+```
+
+### Aggiungere uno stile
+
+#### Aggiungere un colore
+
+Aggiungiamo un po' di stile ai nostri titoli. Se l'elemento ha un indice pari, gli diamo il colore verde, altrimenti il rosso.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles.forEach((title, i) => {
+ title.style.fontSize = '24px' // all titles will have 24px font size
+ if (i % 2 === 0) {
+ title.style.color = 'green'
+ } else {
+ title.style.color = 'red'
+ }
+})
+```
+
+#### Aggiungere un colore di background
+
+Aggiungiamo un po' di stile ai nostri titoli. Se l'elemento ha un indice pari, gli diamo il colore verde, altrimenti il rosso.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles.forEach((title, i) => {
+ title.style.fontSize = '24px' // all titles will have 24px font size
+ if (i % 2 === 0) {
+ title.style.backgroundColor = 'green'
+ } else {
+ title.style.backgroundColor = 'red'
+ }
+})
+```
+
+#### Definire una dimensione del testo
+
+Aggiungiamo un po' di stile ai nostri titoli. Se l'elemento ha un indice pari, gli diamo 20px, altrimenti 30px.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles.forEach((title, i) => {
+ title.style.fontSize = '24px' // all titles will have 24px font size
+ if (i % 2 === 0) {
+ title.style.fontSize = '20px'
+ } else {
+ title.style.fontSize = '30px'
+ }
+})
+```
+
+Come si è notato, le proprietà dei css quando vengono utilizzate in JavaScript saranno in camelCase. Le seguenti proprietà CSS cambiano da background-color a backgroundColor, da font-size a fontSize, da font-family a fontFamily, da margin-bottom a marginBottom.
+
+---
+
+🌕 Ora sei carico di un superpotere, hai completato la parte più importante e impegnativa della sfida e in generale di JavaScript. Hai imparato il DOM e ora hai la capacità di costruire e sviluppare applicazioni. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## Esercizi
+
+### EsercizioLivello 1
+
+1. Creare un file index.html e inserire quattro elementi p come sopra: Ottenere il primo paragrafo utilizzando **_document.querySelector(tagname)_** e il nome del tag
+2. Ottenere ciascuno dei paragrafi utilizzando **_document.querySelector('#id')_** e il loro id.
+3. Ottenere tutti i p come nodeList usando **_document.querySelectorAll(tagname)_** e in base al loro nome di tag
+4. Eseguire un loop attraverso l'elenco dei nodi e ottenere il contenuto del testo di ciascun paragrafo.
+5. Impostare un contenuto di testo per il quarto paragrafo,**_Quarto paragrafo_**
+6. Impostare gli attributi id e class per tutti i paragrafi, utilizzando diversi metodi di impostazione degli attributi.
+
+### EsercizioLivello 2
+
+1. Modificare lo stile di ogni paragrafo utilizzando JavaScript (ad esempio, colore, sfondo, bordo, dimensione del carattere, tipo di carattere).
+1. Selezionate tutti i paragrafi e passate in rassegna tutti gli elementi, dando al primo e al terzo paragrafo un colore verde e al secondo e al quarto un colore rosso.
+1. Impostare il contenuto del testo, l'id e la classe di ogni paragrafo
+
+### EsercizioLivello 3
+
+#### DOM: Mini project 1
+
+1. Sviluppare la seguente applicazione, utilizzando i seguenti elementi HTML per iniziare. Otterrete lo stesso codice nella cartella di partenza. Applicare tutti gli stili e le funzionalità utilizzando solo JavaScript.
+
+ - Il colore dell'anno cambia ogni 1 secondo
+ - Il colore di sfondo della data e dell'ora cambia ogni secondo.
+ - La sfida completata ha lo sfondo verde
+ - La sfida in corso ha lo sfondo giallo
+ - Le sfide in arrivo hanno lo sfondo rosso
+
+```html
+
+
+
+
+ JavaScript for Everyone:DOM
+
+
+
+
+[<< Day 21](../21_Day_DOM/21_day_dom.md) | [Day 23 >>](../23_Day_Event_listeners/23_day_event_listeners.md)
+
+
+- [Day 22](#day-22)
+ - [DOM(Document Object Model)-Day 2](#domdocument-object-model-day-2)
+ - [Creare un elemento](#creating-an-element)
+ - [Creare più elementi](#creating-elements)
+ - [collegare un elemento child ad un elemento parent](#appending-child-to-a-parent-element)
+ - [Rimuovere un elemento child da un elemento parent](#removing-a-child-element-from-a-parent-node)
+ - [Esercizi](#exercises)
+ - [Esercizi: Livello 1](#exercises-level-1)
+ - [Esercizi: Livello 2](#exercises-level-2)
+ - [Esercizi: Livello 3](#exercises-level-3)
+
+# Day 22
+
+## DOM(Document Object Model)-Day 2
+
+### Creare un elemento
+
+Per creare un elemento HTML si usa il nome del tag. Creare un elemento HTML con JavaScript è molto semplice e immediato. Si utilizza il metodo _document.createElement()_. Il metodo prende il nome di un tag dell'elemento HTML come parametro stringa.
+
+```js
+// syntax
+document.createElement('tagname')
+```
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+
+
+```
+
+### Creare più elementi
+
+Per creare più elementi dobbiamo usare il loop. Utilizzando il ciclo, possiamo creare tutti gli elementi HTML che vogliamo.
+Dopo aver creato l'elemento, possiamo assegnare il valore alle diverse proprietà dell'oggetto HTML.
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+
+
+```
+
+### collegare un elemento child ad un elemento parent
+
+Per vedere un elemento creato nel documento HTML, dobbiamo aggiungerlo al genitore come elemento figlio. Possiamo accedere al corpo del documento HTML usando *document.body*. Il file *document.body* supporta il metodo *appendChild()*. Si veda l'esempio seguente.
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+
+```
+
+### Rimuovere un elemento child da un elemento parent
+
+Dopo aver creato un HTML, potremmo voler rimuovere uno o più elementi e possiamo usare il metodo *removeChild()*.
+
+**Esempio:**
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Removing child Node
+
Asabeneh Yetayeh challenges in 2020
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Done
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+
+```
+
+Come abbiamo visto nella sezione precedente, esiste un modo migliore per eliminare tutti gli elementi HTML interni o i figli di un elemento genitore, utilizzando le proprietà del metodo *innerHTML*.
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Removing child Node
+
Asabeneh Yetayeh challenges in 2020
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Done
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+
+```
+
+Il frammento di codice precedente cancella tutti gli elementi figli.
+
+---
+
+🌕Sei così speciale, fai progressi ogni giorno. Ora sai come distruggere un elemento DOM creato quando è necessario. Hai imparato il DOM e ora hai la capacità di costruire e sviluppare applicazioni. Ti restano solo otto giorni per raggiungere la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## Esercizi
+
+### Esercizi: Livello 1
+
+1. Creare un div contenitore nel documento HTML e creare 100-100 numeri dinamicamente e aggiungerli al div contenitore.
+ - Lo sfondo dei numeri pari è verde
+ - Lo sfondo dei numeri dispari è giallo
+ - Lo sfondo dei numeri primi è rosso
+
+
+
+### Esercizi: Livello 2
+
+1. Utilizzare l'array Paesi per visualizzare tutti i Paesi.Vedere il disegno
+
+
+
+### Esercizi: Livello 3
+
+Controllare i requisiti di questo progetto da entrambe le immagini (jpg e gif). Tutti i dati e i CSS sono stati implementati utilizzando solo JavaScript. I dati si trovano nella cartella starter project_3. Il pulsante a discesa è stato creato utilizzando l'elemento HTML [*details*](https://www.w3schools.com/tags/tag_details.asp).
+
+
+
+
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 21](../21_Day_DOM/21_day_dom.md) | [Day 23 >>](../23_Day_Event_listeners/23_day_event_listeners.md)
\ No newline at end of file
diff --git a/Italian/23_Day_Event_listeners/23_day_event_listeners.md b/Italian/23_Day_Event_listeners/23_day_event_listeners.md
new file mode 100644
index 000000000..d6b7d2d30
--- /dev/null
+++ b/Italian/23_Day_Event_listeners/23_day_event_listeners.md
@@ -0,0 +1,333 @@
+
+
+[<< Day 22](../22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md) | [Day 24 >>](../24_Day_Project_solar_system/24_day_project_solar_system.md)
+
+
+
+- [Day 22](#day-22)
+ - [DOM(Document Object Model)-Day 3](#domdocument-object-model-day-3)
+ - [Event Listeners](#event-listeners)
+ - [Click](#click)
+ - [Double Click](#double-click)
+ - [Mouse enter](#mouse-enter)
+ - [Ottenere un valore da un elemento di input](#getting-value-from-an-input-element)
+ - [Valore di input](#input-value)
+ - [Valore di input ed azioni in risposta](#input-event-and-change)
+ - [Evento di blur](#blur-event)
+ - [keypress, keydow and keyup](#keypress-keydow-and-keyup)
+ - [Esercizi](#exercises)
+ - [Esercizio: Livello 1](#exercise-level-1)
+
+# Day 22
+
+## DOM(Document Object Model)-Day 3
+
+### Event Listeners
+
+Eventi HTML comuni: onclick, onchange, onmouseover, onmouseout, onkeydown, onkeyup, onload.
+Possiamo aggiungere un metodo di ascolto degli eventi a qualsiasi oggetto DOM. Utilizziamo il metodo **_addEventListener()_** per ascoltare diversi tipi di eventi sugli elementi HTML. Il metodo _addEventListener()_ accetta due argomenti, un ascoltatore di eventi e una funzione di callback.
+
+```js
+selectedElement.addEventListener('eventlistner', function(e) {
+ // the activity you want to occur after the event will be in here
+})
+// or
+
+selectedElement.addEventListener('eventlistner', e => {
+ // the activity you want to occur after the event will be in here
+})
+```
+
+#### Click
+
+Per collegare un ascoltatore di eventi a un elemento, prima si seleziona l'elemento e poi si applica il metodo addEventListener. L'ascoltatore di eventi prende come argomento il tipo di evento e le funzioni di callback.
+
+Di seguito è riportato un esempio di evento di tipo click.
+
+**Esempio: click**
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
+
+
+
+
+```
+
+Un evento può anche essere allegato direttamente all'elemento HTML come script inline.
+
+**Esempio: onclick**
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
+
+
+
+```
+
+#### Double Click
+
+Per collegare un ascoltatore di eventi a un elemento, prima si seleziona l'elemento e poi si applica il metodo addEventListener. L'ascoltatore di eventi prende come argomento il tipo di evento e le funzioni di callback.
+
+Di seguito è riportato un esempio di evento di tipo click.
+
+**Esempio: dblclick**
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
+
+
+
+```
+
+#### Mouse enter
+
+Per collegare un ascoltatore di eventi a un elemento, prima si seleziona l'elemento e poi si applica il metodo addEventListener. L'ascoltatore di eventi prende come argomento il tipo di evento e le funzioni di callback.
+
+Di seguito è riportato un esempio di evento di tipo click.
+
+**Esempio: mouseenter**
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
+
+
+
+```
+
+Ormai si conosce il metodo addEventListen e come collegare un ascoltatore di eventi. Esistono molti tipi di ascoltatori di eventi. Ma in questa sfida ci concentreremo sugli eventi più comuni e importanti.
+Elenco degli eventi:
+
+- click - quando l'elemento viene cliccato
+- dblclick - quando l'elemento fa doppio clic
+- mouseenter - quando il punto del mouse entra nell'elemento
+- mouseleave - quando il puntatore del mouse lascia l'elemento
+- mousemove - quando il puntatore del mouse si sposta sull'elemento
+- mouseover - quando il puntatore del mouse si sposta sull'elemento
+- mouseout - quando il puntatore del mouse esce dall'elemento
+- input - quando il valore viene inserito nel campo di input
+- change - quando il valore viene modificato nel campo di input
+- blur - quando l'elemento non è focalizzato
+- keydown - quando un tasto è abbassato
+- keyup - quando un tasto viene alzato
+- keypress - quando si preme un tasto qualsiasi
+- onload - quando il browser ha terminato il caricamento di una pagina
+
+Verificate i tipi di evento di cui sopra sostituendo il tipo di evento nel codice dello snippet precedente.
+
+### Ottenere un valore da un elemento di input
+
+Di solito compiliamo moduli e i moduli accettano dati. I campi dei moduli vengono creati utilizzando l'elemento HTML input. Costruiamo una piccola applicazione che ci consenta di calcolare l'indice di massa corporea di una persona utilizzando due campi di input, un pulsante e un tag p.
+
+### Valore di input
+
+```html
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Body Mass Index Calculator
+
+
+
+
+
+
+
+
+```
+
+#### Valore di input ed azioni in risposta
+
+Nell'esempio precedente, siamo riusciti a ottenere il valore di input da due campi di input facendo clic sul pulsante. E se volessimo ottenere il valore senza fare clic sul pulsante? Possiamo usare il tipo di evento _change_ o _input_ per ottenere subito i dati dal campo di input quando il campo è a fuoco. Vediamo come gestirlo.
+
+```html
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Data Binding using input or change event
+
+
+
+
+
+
+
+```
+
+#### Evento di blur
+
+A differenza di _input_ o _change_, l'evento _blur_ si verifica quando il campo di input non è a fuoco.
+
+```js
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Giving feedback using Evento di blur
+
+
+
+
+
+
+
+
+```
+
+#### keypress, keydow and keyup
+
+Possiamo accedere a tutti i numeri dei tasti della tastiera utilizzando diversi tipi di ascoltatori di eventi. Utilizziamo keypress e otteniamo il keyCode di ogni tasto della tastiera.
+
+```html
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Key events: Press any key
+
+
+
+
+```
+
+---
+
+🌕 Sei così speciale, progredisci ogni giorno. Ora, sai come gestire qualsiasi tipo di evento DOM. . Ti restano solo sette giorni per raggiungere la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
+
+## Esercizi
+
+### Exercise: Livello 1
+
+1. Generazione di numeri e marcatura di pari, dispari e numeri primi con tre colori diversi. Vedere l'immagine qui sotto.
+
+
+
+1. Generazione del codice della tastiera utilizzando l'ascoltatore Even. L'immagine seguente.
+
+
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 22](../22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md) | [Day 24 >>](../24_Day_Project_solar_system/24_day_project_solar_system.md)
diff --git a/Italian/24_Day_Project_solar_system/24_day_project_solar_system.md b/Italian/24_Day_Project_solar_system/24_day_project_solar_system.md
new file mode 100644
index 000000000..19e49525b
--- /dev/null
+++ b/Italian/24_Day_Project_solar_system/24_day_project_solar_system.md
@@ -0,0 +1,38 @@
+
+
+[<< Day 23](../23_Day_Event_listeners/23_day_event_listeners.md) | [Day 25 >>](../25_Day_World_countries_data_visualization_1/25_day_world_countries_data_visualization_1.md)
+
+
+
+- [Day 24](#day-24)
+ - [Esercizi](#exercises)
+ - [Esercizio: Livello 1](#exercise-level-1)
+
+# Day 24
+
+## Esercizi
+
+### Exercise: Livello 1
+
+1. Sviluppare una piccola applicazione che calcoli il peso di un oggetto in un determinato pianeta. L'immagine gif non è completa, controllate il video nel file di partenza.
+
+
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[<< Day 23](../23_Day_Event_listeners/23_day_event_listeners.md) | [Day 25 >>](../25_Day_World_countries_data_visualization_1/25_day_world_countries_data_visualization_1.md)
+
diff --git a/Italian/25_Day_World_countries_data_visualization_1/25_day_world_countries_data_visualization_1.md b/Italian/25_Day_World_countries_data_visualization_1/25_day_world_countries_data_visualization_1.md
new file mode 100644
index 000000000..c2ec794ed
--- /dev/null
+++ b/Italian/25_Day_World_countries_data_visualization_1/25_day_world_countries_data_visualization_1.md
@@ -0,0 +1,39 @@
+
+
30 Days Of JavaScript: World Countries Data Visualization
+Support the author to create more educational materials
+
+
+
+[<< Day 29](../29_Day_Mini_project_animating_characters/29_day_mini_project_animating_characters.md)
+
+
+
+- [Day 30](#day-30)
+ - [Esercizi](#esercizi)
+ - [Exercise: Livello 1](#exercise-livello-1)
+ - [Exercise: Livello 2](#exercise-livello-2)
+ - [Exercise: Livello 3](#exercise-livello-3)
+ - [Testimony](#testimony)
+ - [Support](#support)
+
+# Day 30
+
+## Esercizi
+
+### Exercise: Livello 1
+
+1. Creare la seguente animazione utilizzando (HTML, CSS, JS)
+
+
+
+2. Convalidare il seguente modulo utilizzando una regex.
+
+ 
+
+ 
+
+### Exercise: Livello 2
+
+### Exercise: Livello 3
+
+🌕Il tuo viaggio verso la grandezza si è concluso con successo. Hai raggiunto un alto livello di grandezza. Ora sei molto più grande di prima. Sapevo cosa ci voleva per raggiungere questo Livello e tu sei arrivato a questo punto. Sei un vero eroe. Ora è il momento di festeggiare il tuo successo con un amico o con la tua famiglia. Non vedo l'ora di vederti in un'altra sfida.
+
+## Testimony
+
+Ora è il momento di sostenere l'autore e di esprimere il tuo pensiero sull'autore e su 30DaysOfJavaScript. Potete lasciare la vostra testimonianza su questo [link](https://www.asabeneh.com/testimonials)
+
+## Support
+
+Potete sostenere l'autore nella produzione di ulteriori materiali didattici.
+
+[](https://www.paypal.me/asabeneh)
+
+
+
+[<< Day 29](../29_Day_Mini_project_animating_characters/29_day_mini_project_animating_characters.md)
diff --git a/Italian/readMe.md b/Italian/readMe.md
new file mode 100644
index 000000000..5af388c98
--- /dev/null
+++ b/Italian/readMe.md
@@ -0,0 +1,813 @@
+
+# 30 Days Of JavaScript
+
+| # Giorni | Topics |
+| ---- | :-------------------------------------------------------------------------------------------------------------------------------------------------: |
+
+| 01 | [Introduzione](./readMe.md) |
+
+| 02 | [Tipi di dato (Data Types)](./02_Day_Data_types/02_day_data_types.md) |
+
+| 03 | [Booleans,Operatori, Date](./03_Day_Booleans_operators_date/03_booleans_operators_date.md) |
+
+| 04 | [Istruzioni Condizionali (Conditionals)](./04_Day_Conditionals/04_day_conditionals.md) |
+
+| 05 | [Arrays](./05_Day_Arrays/05_day_arrays.md) |
+
+| 06 | [Loops](./06_Day_Loops/06_day_loops.md) |
+
+| 07 | [Funzioni](./07_Day_Functions/07_day_functions.md) |
+
+| 08 | [Oggetti (Objects)](./08_Day_Objects/08_day_objects.md) |
+
+| 09 | [Funzioni di ordine superiore (Higher Order Functions)](./09_Day_Higher_order_functions/09_day_higher_order_functions.md) |
+
+| 10 | [Sets e Maps](./10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md) |
+
+| 11 | [Destrutturazione ed Operatore di Espansione (Destructuring and Spreading)](./11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md) |
+
+| 12 | [Espressioni Regolari (Regular Expressions)](./12_Day_Regular_expressions/12_day_regular_expressions.md) |
+
+| 13 | [Metodi dell'Oggetto *Console* (Console Object Methods)](./13_Day_Console_object_methods/13_day_console_object_methods.md) |
+
+| 14 | [Gestione Errori (Error Handling)](./14_Day_Error_handling/14_day_error_handling.md) |
+
+| 15 | [Classes](./15_Day_Classes/15_day_classes.md) |
+
+| 16 | [JSON](./16_Day_JSON/16_day_json.md) |
+
+| 17 | [Web Storages](./17_Day_Web_storages/17_day_web_storages.md) |
+
+| 18 | [Promises](./18_Day_Promises/18_day_promises.md) |
+
+| 19 | [Closure](./19_Day_Closures/19_day_closures.md) |
+
+| 20 | [Scrivere codice pulito (Writing Clean Code)](./20_Day_Writing_clean_codes/20_day_writing_clean_codes.md) |
+
+| 21 | [DOM](./21_Day_DOM/21_day_dom.md) |
+
+| 22 | [Manipolare l'Oggetto DOM (Manipulating DOM Object)](./22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md) |
+
+| 23 | [Event Listeners](./23_Day_Event_listeners/23_day_event_listeners.md) |
+
+| 24 | [Mini Progetto: Sistema Solare (Mini Project: Solar System)](./24_Day_Project_solar_system/24_day_project_solar_system.md) |
+
+| 25 | [Mini Progetto: Visualizzazione Dati Paesi Nel Mondo (Mini Project: World Countries Data Visualization 1)](./25_Day_World_countries_data_visualization_1/25_day_world_countries_data_visualization_1.md) |
+
+| 26 | [Mini Progetto: Visualizzazione Dati Paesi Nel Mondo (Mini Project: World Countries Data Visualization 2)](./26_Day_World_countries_data_visualization_2/26_day_world_countries_data_visualization_2.md) |
+
+| 27 | [Mini Progetto: Portfolio (Mini Project: Portfolio)](./27_Day_Mini_project_portfolio/27_day_mini_project_portfolio.md) |
+
+| 28 | [Mini Progetto: Leaderboard (Mini Project: Leaderboard)](./28_Day_Mini_project_leaderboard/28_day_mini_project_leaderboard.md) |
+
+| 29 | [Mini Progetto: Animare le Lettere (Mini Project: Animating characters)](./29_Day_Mini_project_animating_characters/29_day_mini_project_animating_characters.md) |
+
+| 30 | [Progetti Finali (Final Projects)](./30_Day_Mini_project_final/30_day_mini_project_final.md) |
+
+🧡🧡🧡 BUON CODING 🧡🧡🧡
+
+
+
+Supporta l' autore nel creare altri materiali educativi
+
+
+
+
+
+
+
+[Giorno 2 >>](./02_Day_Data_types/02_day_data_types.md)
+
+
+
+- [30 Days Of JavaScript](#30-days-of-javascript)
+- [📔 Giorno 1](#-day-1)
+ - [Introduzione](#introduction)
+ - [Requisiti](#requirements)
+ - [Setup](#setup)
+ - [Installazione Node.js](#install-nodejs)
+ - [Browser](#browser)
+ - [Installazione di Google Chrome](#installing-google-chrome)
+ - [Apertura Console di Google Chrome](#opening-google-chrome-console)
+ - [Scrivere codice sulla Console del Browser](#writing-code-on-browser-console)
+ - [Console.log](#consolelog)
+ - [Console.log con Argomenti Multipli](#consolelog-with-multiple-arguments)
+ - [commenti](#comments)
+ - [Sintassi](#syntax)
+ - [Aritmetica](#arithmetics)
+ - [Editor Codice](#code-editor)
+ - [Installazione Visual Studio Code](#installing-visual-studio-code)
+ - [Come usare Visual Studio Code](#how-to-use-visual-studio-code)
+ - [Aggiungere JavaScript ad una Pagina Web](#adding-javascript-to-a-web-page)
+ - [Inline Script](#inline-script)
+ - [Internal Script](#internal-script)
+ - [External Script](#external-script)
+ - [Multipli External Scripts](#multiple-external-scripts)
+ - [Introduzione ai Tipi di Dato](#introduction-to-data-types)
+ - [Numbers](#numbers)
+ - [Strings](#strings)
+ - [Booleans](#booleans)
+ - [Undefined](#undefined)
+ - [Null](#null)
+ - [Verificare il Tipo dei Dati](#checking-data-types)
+ - [Ancora Commenti](#comments-again)
+ - [Variabili](#variables)
+- [💻 Giorno 1: Esercizi](#-day-1-exercises)
+
+# 📔 Giorno 1
+
+## Introduzione
+
+**Congratulazioni** per aver deciso di partecipare a 30 days of JavaScript programming challenge. In questa challenge imparerai tutto quello di cui hai bisogno per essere un programmatore JavaScript, ed in generale, il concetto di programmazione. Al termine della challenge otterrai un certificato di completamento della 30DaysOfJavaScript programming challenge. In caso avessi bisogno di aiuto o vorrei aiutare altri puoi unirti al [gruppo_telegram](https://t.me/ThirtyDaysOfJavaScript).
+
+**Un 30DaysOfJavaScript** è una challenge sviluppatori JavaScript esperti o alle prime armi. Benvenuto in JavaScript. JavaScript è un linguaggio per il web. Mi piace insegnarlo ed usarlo, spero che lo faccia presto anche tu.
+
+In questa challenge step by step di JavaScript, imparerai JavaScript, il linguaggio di programmazione più popolare nella storia dell'umanità.
+
+JavaScript è usato **_per aggiungere interazione ai websites, per sviluppare mobile apps, applicazioni desktop, videogiochi_** ed attualmente JavaScript può essere usato anche in ambito **_machine learning_** e **_AI_**. **_JavaScript (JS)_** è diventato popolare nei ultimi anni ed è il linguaggio più utilizzato su GitHub da sei anni.
+
+
+
+## Requisiti
+
+Nessuna conoscenza pregressa è richiesta per seguire questa challenge. Hai solo bisogno di:
+
+1. Motivazione
+
+2. Un computer
+
+3. Internet
+
+4. Un browser
+
+5. Un editor code
+
+## Setup
+
+Ritengo tu abbia la motivazione ed il forte desiderio per diventare uno sviluppatore. Se è così, allora hai tutto quello che ti server per iniziare.
+
+### Installazione Node.js
+
+Potresti non aver bisogno di Node.js adesso ma ne avrai probabilmente bisogno dopo. Installa [node.js](https://nodejs.org/en/).
+
+
+
+Dopo aver scaricato il file aprilo ed installa node
+
+
+
+Possiamo controllare l'installazione di node sulla macchina locale aprendo il terminale.
+
+```sh
+asabeneh $ node -v
+
+v12.14.0
+```
+
+Nella realizzazione di questo tutorial sto usando Node 12.14.0, potresti avere una versione differente disponibile da installare.
+
+### Browser
+
+Ci sono diversi browser disponibili. Io raccomando l'uso di Google Chrome.
+
+#### Installazione di Google Chrome
+
+Installa [Google Chrome](https://www.google.com/chrome/). Possiamo scrivere del codice semplice sulla console del browser ma non la utilzzeremo per scrivere codice.
+
+
+
+#### Apertura della Console di Google Chrome
+
+Puoi aprire la console di Google Chrome console sia cliccando sui tre puntini nell'angolo in alto a destra del browser, selezionando _Più strumenti -> Strumenti per sviluppatori_ o usando una scorciatoia da tastiera. Preferisco usare le scorciatoie.
+
+
+
+Per aprire la console di Chrome utilizzando una scorciatoia da tastiera
+
+```sh
+Mac
+
+Command+Option+J
+
+
+Windows/Linux:
+
+Ctl+Shift+J
+```
+
+
+
+Dopo aver aperto la console di Google Chrome, provate a esplorare i pulsanti contrassegnati. Dedicheremo la maggior parte del tempo alla Console. La Console è il luogo in cui si trova il codice JavaScript. L'engine Google Console V8 trasforma il codice JavaScript in codice macchina.
+
+Scriviamo un codice JavaScript nella console di Google Chrome:
+
+
+
+#### Scrivendo codice sulla Console del Browser
+
+Possiamo scrivere qualsiasi codice JavaScript sulla console di Google o su quella di qualsiasi browser. Tuttavia, per questa sfida, ci concentreremo solo sulla console di Google Chrome. Apri la console utilizzando:
+
+```sh
+Mac
+
+Command+Option+I
+
+
+Windows:
+
+Ctl+Shift+I
+```
+
+##### Console.log
+
+
+Per scrivere il nostro primo codice JavaScript, abbiamo utilizzato la funzione integrata **console.log()**. Abbiamo passato un argomento come dato di input e la funzione visualizza l'output. Abbiamo passato `'Hello, World'` come dato di input o argomento nella funzione console.log().
+```js
+console.log('Hello, World!')
+```
+
+##### Console.log con Argomenti Multipli
+
+La funzione **`console.log()`** può prendere più parametri separandoli con la virgola. La sintassi è come segue:**`console.log(param1, param2, param3)`**
+
+
+
+```js
+console.log('Hello', 'World', '!')
+console.log('HAPPY', 'NEW', 'YEAR', 2020)
+console.log('Welcome', 'to', 30, 'Days', 'Of', 'JavaScript')
+```
+
+Come si può vedere dal codice snippet qui sopra, _`console.log()`_ accetta argomenti multipli.
+
+Congratulazioni! Avete scritto il vostro primo codice JavaScript usando _`console.log()`_.
+
+
+##### Commenti
+
+
+Possiamo aggiungere commenti al nostro codice. I commenti sono molto importanti per rendere il codice più leggibile e per annorare osservazioni nel nostro codice. JavaScript non esegue la parte di commento del nostro codice. In JavaScript, qualsiasi riga di testo che inizia con // in JavaScript è un commento, e qualsiasi cosa racchiusa come questa `//` è anch'essa un commento.
+
+**Esempio: Commento su Linea Singola**
+```js
+// This is the first comment
+// This is the second comment
+// I am a single line comment
+```
+
+**Esempio: Commento Multilinea**
+```js
+/*
+This is a multiline comment
+Multiline comments can take multiple lines
+JavaScript is the language of the web
+*/
+```
+
+##### Sintassi
+
+I linguaggi di programmazione sono simili alle lingue umane. L'inglese o molte altre lingue utilizzano parole, frasi, frasi composte e altro ancora per trasmettere un messaggio significativo. Il significato inglese di sintassi è _la disposizione di parole e frasi per creare frasi ben formate in una lingua_. La definizione tecnica di sintassi è la struttura degli enunciati in un linguaggio informatico. I linguaggi di programmazione hanno una sintassi. JavaScript è un linguaggio di programmazione e, come altri linguaggi di programmazione, ha una propria sintassi. Se non scriviamo una sintassi comprensibile in JavaScript, questo darà luogo a diversi tipi di errori. Esploreremo i diversi tipi di errori di JavaScript più avanti. Per ora, vediamo gli errori di sintassi.
+
+
+
+
+Ho commesso un errore intenzionale. Di conseguenza, la console visualizza gli errori di sintassi. In realtà, la sintassi è molto informativa sul tipo di errore commesso. Leggendo la linea guida di feedback dell'errore, possiamo correggere la sintassi e risolvere il problema. Il processo di identificazione e rimozione degli errori da un programma si chiama debug. Risolviamo gli errori:
+
+```js
+console.log('Hello, World!')
+console.log('Hello, World!')
+```
+
+Finora abbiamo visto come visualizzare il testo utilizzando _`console.log()`_. Se si stampa un testo o una stringa utilizzando _`console.log()`_, il testo deve trovarsi all'interno di apici singoli, doppi apici o un backtick.
+
+**Esempio:**
+
+```js
+console.log('Hello, World!')
+console.log("Hello, World!")
+console.log(`Hello, World!`)
+```
+
+#### Aritmetica
+
+
+Ora facciamo pratica scrivendo codici JavaScript usando _`console.log()`_ sulla console di Google Chrome per i tipi di dati numerici. Oltre al testo, possiamo anche eseguire calcoli matematici utilizzando JavaScript. È possibile scrivere codice JavaScript sulla console di Google Chrome direttamente senza la funzione **`console.log()`_**. Tuttavia, è stata inclusa in questa introduzione perché la maggior parte di questa sfida si svolgerà in un editor di testo, dove l'uso della funzione sarà obbligatorio. È possibile giocare direttamente con le istruzioni della console.
+
+
+
+```js
+console.log(2 + 3) // Addition
+console.log(3 - 2) // Subtraction
+console.log(2 * 3) // Multiplication
+console.log(3 / 2) // Division
+console.log(3 % 2) // Modulus - finding remainder
+console.log(3 ** 2) // Exponentiation 3 ** 2 == 3 * 3
+```
+
+### Editor Codice
+
+Possiamo scrivere i nostri codici sulla console del browser, ma solo per codice breve. In un ambiente di lavoro reale, gli sviluppatori utilizzano diversi editor di codice per scrivere i loro codici. In questa sfida di 30 giorni di JavaScript, utilizzeremo Visual Studio Code.
+
+#### Installazione Visual Studio Code
+
+Visual Studio Code è un editor di testo open-source molto popolare. Raccomanderei di [scaricare Visual Studio Code](https://code.visualstudio.com/), ma se siete favorevoli ad altri editor, sentitevi liberi di seguire con quello che avete.
+
+
+
+Se avete installato Visual Studio Code, iniziate a usarlo.
+
+#### Come Usare Visual Studio Code
+
+Aprire Visual Studio Code facendo doppio clic sulla sua icona. Quando si apre, si ottiene questo tipo di interfaccia. Provate a interagire con le icone etichettate.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Aggiungere JavaScript ad una Pagina Web
+
+JavaScript può essere aggiunto a una pagina web in tre modi diversi:
+
+- **_Inline script_**
+
+- **_Internal script_**
+
+- **_External script_**
+
+- **_Multiple External scripts_**
+
+Le sezioni seguenti mostrano diversi modi per aggiungere codice JavaScript alla pagina Web.
+### Inline Script
+
+Crea una cartella di progetto sul desktop o in una posizione qualsiasi, denominala 30DaysOfJS e crea un file **_`index.html`_** nella cartella di progetto. Incolla quindi il seguente codice e aprilo in un browser, ad esempio [Chrome].(https://www.google.com/chrome/).
+
+```html
+
+
+
+ 30DaysOfScript:Inline Script
+
+
+
+
+
+```
+
+Ora, hai appena scritto il tuo primo script inline. Possiamo creare un messaggio di avviso a comparsa usando la funzione incorporata _`alert()`_.
+
+### Internal Script
+
+Gli internal script possono essere inseriti nel _`head`_ o nel _`body`_, ma è preferibile inserirli nel body del documento HTML.
+
+Per prima cosa, scriviamo nella parte iniziale della pagina.
+
+```html
+
+
+
+ 30DaysOfScript:Internal Script
+
+
+
+
+```
+
+Nella maggior parte dei casi è così che si scrive uno script interno. Scrivere il codice JavaScript nella sezione del corpo è l'opzione preferita. Aprire la console del browser per vedere l'output di `console.log()`.
+
+```html
+
+
+
+ 30DaysOfScript:Internal Script
+
+
+
+
+
+
+```
+
+Aprire la console del browser per vedere l'output di `console.log()`.
+
+
+
+### External Script
+
+Come per Internal Script , il link all'External Script può essere presente nell'intestazione o nel corpo, ma è preferibile inserirlo nel corpo.
+Per prima cosa, occorre creare un file JavaScript esterno con estensione .js. Tutti i file che terminano con l'estensione .js sono file JavaScript. Creare un file chiamato introduction.js all'interno della cartella del progetto e scrivere il seguente codice e collegare questo file .js in fondo al body.
+```js
+console.log('Welcome to 30DaysOfJavaScript')
+```
+
+External scripts nel _head_:
+
+```html
+
+
+
+ 30DaysOfJavaScript:External script
+
+
+
+
+```
+
+External scripts nel _body_:
+
+```html
+
+
+
+ 30DaysOfJavaScript:External script
+
+
+
+
+
+
+
+
+
+
+
+```
+
+Aprite la console del browser per vedere l'output del metodo `console.log()`.
+
+
+### Multipli External Scripts
+
+Possiamo anche collegare più file JavaScript esterni a una pagina web.
+Creare un file `helloworld.js` all'interno della cartella 30DaysOfJS e scrivere il seguente codice.
+
+```js
+console.log('Hello, World!')
+```
+
+```html
+
+
+
+ Multiple External Scripts
+
+
+
+
+
+
+```
+
+_Il file main.js deve trovarsi sotto tutti gli altri script_. È molto importante ricordarlo.
+
+
+
+
+## Introduzione ai Tipi di Dato
+
+
+In JavaScript e in altri linguaggi di programmazione esistono diversi tipi di dati. I seguenti sono tipi di dati primitivi di JavaScript: _String, Number, Boolean, undefined, Null_, e _Symbol_.
+
+
+### Numbers
+- Integers: Numeri interi (negativi, zero e positivi)
+
+Esempio:
+
+... -3, -2, -1, 0, 1, 2, 3 ...
+
+- Float-point: Numeri decimali
+
+Esempio
+
+... -3.5, -2.25, -1.0, 0.0, 1.1, 2.2, 3.5 ...
+
+### Strings
+
+Un insieme di uno o più caratteri compresi tra due apici singoli, doppi apici o backtick.
+
+**Esempio:**
+
+```js
+'a'
+'Asabeneh'
+"Asabeneh"
+'Finland'
+'JavaScript is a beautiful programming language'
+'I love teaching'
+'I hope you are enjoying the first day'
+`We can also create a string using a backtick`
+'A string could be just as small as one character or as big as many pages'
+'Any data type under a single quote, double quote or backtick is a string'
+```
+
+### Booleans
+
+Un valore booleano è vero o falso. Qualsiasi confronto restituisce un valore booleano che può essere vero o falso.
+
+Un tipo di dati booleano è un valore vero o falso.
+
+**Esempio:**
+
+```js
+true // if the light is on, the value is true
+
+false // if the light is off, the value is false
+```
+
+### Undefined
+
+
+In JavaScript, se non si assegna un valore a una variabile, il valore è undefined. Inoltre, se una funzione non restituisce nulla, restituisce undefined.
+
+```js
+let firstName
+console.log(firstName) // undefined, because it is not assigned to a value yet
+```
+
+### Null
+
+Null in JavaScript significa valore vuoto.
+
+```js
+let emptyValue = null
+```
+
+## Verificando i Tipi di dato
+
+Per verificare il tipo di dati di una determinata variabile, si utilizza l'operatore **typeof**. Si veda l'esempio seguente.
+
+```js
+console.log(typeof 'Asabeneh') // string
+
+console.log(typeof 5) // number
+
+console.log(typeof true) // boolean
+
+console.log(typeof null) // object type
+
+console.log(typeof undefined) // undefined
+
+```
+
+## Ancora Commenti
+
+
+Ricordate che i commenti in JavaScript sono simili a quelli di altri linguaggi di programmazione. I commenti sono importanti per rendere il codice più leggibile.
+
+Esistono due modi per commentare:
+
+- _Single line commenting_
+
+- _Multiline commenting_
+
+```js
+// commenting the code itself with a single comment
+
+// let firstName = 'Asabeneh'; single line comment
+
+// let lastName = 'Yetayeh'; single line comment
+```
+
+Commento Multilinea:
+
+```js
+/*
+
+let location = 'Helsinki';
+
+let age = 100;
+
+let isMarried = true;
+
+This is a Multiple line comment
+
+*/
+```
+
+## Variables
+
+
+Le variabili sono _contenitori_ di dati. Le variabili vengono utilizzate per _immagazzinare_ i dati in una posizione di memoria. Quando una variabile viene dichiarata, viene riservata una posizione di memoria. Quando ad una variabile viene assegnato un valore (dati), lo spazio di memoria verrà riempito con quei dati. Per dichiarare una variabile, si usano le parole chiave _var_, _let_ o _const_.
+
+Per una variabile che cambia in un momento diverso, si usa _let_. Se i dati non cambiano affatto, si usa _const_. Ad esempio, PI, nome del paese, gravità non cambiano e possiamo usare _const_. In questa sfida non useremo var e non ti consiglio di usarlo. È un modo di dichiarare le variabili soggetto a errori e ha molte perdite. Parleremo più dettagliatamente di var, let e const in altre sezioni (ambito). Per ora, la spiegazione di cui sopra è sufficiente.
+
+Un nome di variabile JavaScript valido deve seguire le seguenti regole:
+
+- Il nome di una variabile JavaScript non deve iniziare con un numero.
+
+- Il nome di una variabile JavaScript non ammette caratteri speciali, tranne il segno del dollaro e il trattino basso.
+
+- Il nome di una variabile JavaScript segue la convenzione camelCase.
+
+- Il nome di una variabile JavaScript non deve avere spazi tra le parole.
+
+I seguenti sono esempi di variabili JavaScript valide.
+
+```js
+firstName
+
+lastName
+
+country
+
+city
+
+capitalCity
+
+age
+
+isMarried
+
+first_name
+
+last_name
+
+is_married
+
+capital_city
+
+num1
+
+num_1
+
+_num_1
+
+$num1
+
+year2020
+
+year_2020
+
+```
+
+La prima e la seconda variabile dell'elenco seguono la convenzione camelCase della dichiarazione in JavaScript. In questa challenge, utilizzeremo le variabili camelCase (camelWithOneHump). Utilizzeremo CamelCase (CamelWithTwoHump) per dichiarare le classi; parleremo di classi e oggetti in un'altra sezione.
+
+Esempio di variabili non valide:
+
+```js
+first-name
+
+1_num
+
+num_#_1
+
+```
+
+Dichiariamo variabili con tipi di dati diversi. Per dichiarare una variabile, dobbiamo usare la parola chiave _let_ o _const_ prima del nome della variabile. Dopo il nome della variabile, scriviamo un segno di uguale (operatore di assegnazione) e un valore (dati assegnati).
+
+```js
+// Syntax
+let nameOfVariable = value
+```
+
+Il nameOfVariable è il nome che memorizza i diversi dati del valore. Vedi degli esempi dettagliati.
+
+**Esempi di variabili dichiarate**
+
+```js
+// Declaring different variables of different data types
+
+let firstName = 'Asabeneh' // first name of a person
+
+let lastName = 'Yetayeh' // last name of a person
+
+let country = 'Finland' // country
+
+let city = 'Helsinki' // capital city
+
+let age = 100 // age in years
+
+let isMarried = true
+
+console.log(firstName, lastName, country, city, age, isMarried)
+
+```
+
+```sh
+Asabeneh Yetayeh Finland Helsinki 100 true
+
+```
+
+```js
+// Declaring variables with number values
+
+let age = 100 // age in years
+
+const gravity = 9.81 // earth gravity in m/s2
+
+const boilingPoint = 100 // water boiling point, temperature in °C
+
+const PI = 3.14 // geometrical constant
+
+console.log(gravity, boilingPoint, PI)
+
+```
+
+```sh
+9.81 100 3.14
+
+```
+
+```js
+// Variables can also be declaring in one line separated by comma, however I recommend to use a seperate line to make code more readble
+
+let name = 'Asabeneh', job = 'teacher', live = 'Finland'
+
+console.log(name, job, live)
+
+```
+
+```sh
+Asabeneh teacher Finland
+```
+I file del codice sono disposti nelle cartelle x-Day nella directory principale della repository.
+Quando si esegue il file _index.html_ nella cartella 01-Day si dovrebbe ottenere questo risultato:
+
+
+
+🌕 fantastico! hai appena completato la sfida del primo giorno e sei sulla strada della grandezza. Ora fai qualche esercizio per il cervello e i muscoli.
+
+# 💻 Giorno 1: Esercizi
+
+
+1. Scrivete un commento di una sola riga che dice: "I commenti possono rendere il codice leggibile".
+2. Scrivete un altro commento di una sola riga che dica: _Benvenuti a 30DaysOfJavaScript_.
+3. Scrivete un commento di più righe che dica: "I commenti possono rendere il codice leggibile, facile da riutilizzare ed informativo".
+4. Creare un file variable.js, dichiarare le variabili e assegnare i tipi di dati string, boolean, undefined e null.
+5. Creare il file datatypes.js e utilizzare l'operatore JavaScript **_typeof_** per verificare i diversi tipi di dati. Controllare il tipo di dati di ogni variabile
+6. Dichiarare quattro variabili senza assegnare valori
+7. Dichiarare quattro variabili con valori assegnati
+8. Dichiarare le variabili per memorizzare il proprio nome, cognome, stato civile, paese ed età in più righe.
+9. Dichiarare le variabili per memorizzare il nome, il cognome, lo stato civile, il Paese e l'età in un'unica riga.
+10. Dichiarare due variabili _myAge_ e _yourAge_, assegnare loro i valori iniziali e registrarli nella console del browser.
+
+```sh
+I am 25 years old.
+You are 30 years old.
+```
+
+🎉 CONGRATULAZIONI ! 🎉
+
+[Giorno 2 >>](./02_Day_Data_types/02_day_data_types.md)
diff --git a/Korea/README.md b/Korea/README.md
new file mode 100644
index 000000000..352ddca08
--- /dev/null
+++ b/Korea/README.md
@@ -0,0 +1,637 @@
+# 자바스크립트 30일 정복 😎
+
+| # Day | Topics |
+| ----- | :--------------------------------------------------------------------------------------------------------------------------------------: |
+| 01 | [소개](./readMe.md) |
+| 02 | [자료형](./02_Day_Data_types/02_day_data_types.md) |
+| 03 | [불리언, 연산자, 날짜](./03_Day_Booleans_operators_date/03_booleans_operators_date.md) |
+| 04 | [조건문](./04_Day_Conditionals/04_day_conditionals.md) |
+| 05 | [배열](./05_Day_Arrays/05_day_arrays.md) |
+| 06 | [반복문](./06_Day_Loops/06_day_loops.md) |
+| 07 | [함수](./07_Day_Functions/07_day_functions.md) |
+| 08 | [객체](./08_Day_Objects/08_day_objects.md) |
+| 09 | [고차 함수](./09_Day_Higher_order_functions/09_day_higher_order_functions.md) |
+| 10 | [집합과 맵](./10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md) |
+| 11 | [구조 분해 할당과 전개 연산자](./11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md) |
+| 12 | [정규표현식](./12_Day_Regular_expressions/12_day_regular_expressions.md) |
+| 13 | [콘솔 객체 메서드](./13_Day_Console_object_methods/13_day_console_object_methods.md) |
+| 14 | [오류 핸들링](./14_Day_Error_handling/14_day_error_handling.md) |
+| 15 | [클래스](./15_Day_Classes/15_day_classes.md) |
+| 16 | [JSON](./16_Day_JSON/16_day_json.md) |
+| 17 | [웹 저장소](./17_Day_Web_storages/17_day_web_storages.md) |
+| 18 | [프로미스](./18_Day_Promises/18_day_promises.md) |
+| 19 | [클로져](./19_Day_Closures/19_day_closures.md) |
+| 20 | [클린 코드 작성법](./20_Day_Writing_clean_codes/20_day_writing_clean_codes.md) |
+| 21 | [DOM](./21_Day_DOM/21_day_dom.md) |
+| 22 | [DOM 객체 조작](./22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md) |
+| 23 | [이벤트 리스너](./23_Day_Event_listeners/23_day_event_listeners.md) |
+| 24 | [미니 프로젝트: 태양계](./24_Day_Project_solar_system/24_day_project_solar_system.md) |
+| 25 | [미니 프로젝트: 세계 도시 데이터 시각화 1](./25_Day_World_countries_data_visualization_1/25_day_world_countries_data_visualization_1.md) |
+| 26 | [미니 프로젝트: 세계 도시 데이터 시각화 2](./26_Day_World_countries_data_visualization_2/26_day_world_countries_data_visualization_2.md) |
+| 27 | [미니 프로젝트: 포트폴리오](./27_Day_Mini_project_portfolio/27_day_mini_project_portfolio.md) |
+| 28 | [미니 프로젝트: 리더보드](./28_Day_Mini_project_leaderboard/28_day_mini_project_leaderboard.md) |
+| 29 | [미니 프로젝트: 캐릭터 움직이기](./29_Day_Mini_project_animating_characters/29_day_mini_project_animating_characters.md) |
+| 30 | [최종 프로젝트](./30_Day_Mini_project_final/30_day_mini_project_final.md) |
+
+🇬🇧 [English](../readMe.md)
+🇪🇸 [Spanish](../Spanish/readme.md)
+🇷🇺 [Russian](../RU/README.md)
+
+[2일차 >>](./02_Day_Data_types/02_day_data_types.md)
+
+
+
+- [자바스크립트 30일 정복](#30-days-of-javascript)
+- [📔 1일차](#📔-1일차)
+ - [소개](#소개)
+ - [요구 사항](#요구사항)
+ - [설정](#설정)
+ - [Node.js 설치](#Node.js-설치)
+ - [브라우저](#브라우저)
+ - [구글 크롬 설치](#구글-크롬-설치)
+ - [구글 크롬 콘솔창 열기](#구글-크롬-콘솔창-열기)
+ - [콘솔창에서 코드 작성해 보기](#콘솔창에서-코드-작성해-보기)
+ - [Console.log로 출력하기](#Console.log로-출력하기)
+ - [Console.log로 여러 인자 출력하기](#Console.log로-여러-인자-출력하기)
+ - [주석](#주석)
+ - [문법](#문법)
+ - [산술](#산술)
+ - [코드 편집기](#코드-편집기)
+ - [Visual Studio Code 설치](#Visual-Studio-Code-설치)
+ - [Visual Studio Code 사용법](#Visual-Studio-Code-사용법)
+ - [웹 페이지에서 자바스크립트 코드 적용](#웹-페이지에서-자바스크립트-코드-적용)
+ - [인라인 자바스크립트](#인라인-자바스크립트)
+ - [내부 자바스크립트](#내부-자바스크립트)
+ - [외부 자바스크립트](#외부-자바스크립트)
+ - [여러 외부 자바스크립트](#여러-외부-자바스크립트)
+ - [자료형 소개](#자료형-소개)
+ - [숫자](#숫자)
+ - [문자열](#문자열)
+ - [불리언](#불리언)
+ - [Undefined](#Undefined)
+ - [Null](#Null)
+ - [자료형 확인하기](#자료형-확인하기)
+ - [주석을 다시](#주석을-다시)
+ - [변수](#변수)
+- [💻 1일차: 실습](#-1일차-실습)
+
+# 📔 1일차
+
+## 소개
+
+자바스크립트 30일 정복 프로그래밍 챌린지에 참여 결정하신 것을 축하드립니다. 이번 챌린지에서는 자바스크립트 프로그래머가 되기 위해서 필요한 모든 것들과, 일반적인 프로그래밍에 대한 개념을 다룹니다. 해당 챌린지를 모두 완료하셨다면, 30DaysOfJavaScript 프로그래밍 챌린지 완료 인증서를 받게 됩니다. 도움이 필요하거나, 다른 사람을 도와주고 싶은 경우 [텔레그램 그룹](https://t.me/ThirtyDaysOfJavaScript)에 연락을 주세요.
+
+**자바스크립트 30일 정복 챌린지**는 초보자와 숙련된 자바스크립트 개발자를 위한 지침서입니다. 자바스크립트에 오신 것을 환영합니다. 자바스크립트는 웹을 다루는 언어입니다. 저는 여러분들을 가르치고 사용하는 것을 즐깁니다. 여러분도 그렇게 되셨으면 좋겠습니다.
+
+자바스크립트 30일 정복 챌린지를 단계별로 진행하면서, 인류 역사상 가장 인기있는 자바스크립트를 배우게 될 것입니다.
+자바스크립트는 **_상호작용을 하는 웹사이트를 만들거나, 모바일 애플리케이션 혹은 데스크탑 애플리케이션, 게임_**을 만드는 데에 사용이 됩니다. 요즈음 자바스크립트는 **_머신러닝과 AI_**를 하는데에도 사용이 됩니다. **_자바스크립트(JS)_**는 최근 몇 년간 인기가 상승하여 선두를 달리고 있습니다. 실제로 깃헙에서 6년동안 가장 많이 사용되고 있습니다.
+
+## 요구사항
+
+프로그래밍에 대한 선수 지식은 해당 챌린지에서 필요하지 않습니다. 대신 아래에 대한 요구사항이 필요합니다.
+
+1. 열정
+2. 컴퓨터
+3. 인터넷
+4. 브라우저
+5. 코드 편집기
+
+## 설정
+
+저는 여러분이 개발자, 컴퓨터, 인터넷이 되기 위해서 강한 욕구와 동기부여가 있다고 믿습니다. 만약 이런 것들을 가지고 있다면, 해당 챌린지를 시작할 수 있습니다.
+
+### Node.js 설치
+
+여러분은 Node.js가 당장은 필요 없지만, 나중을 위해 설치가 필요합니다. [해당 사이트](https://nodejs.org/en/)에서 설치를 진행해 주세요.
+
+
+
+다운로드가 끝이 나면 파일을 더블 클릭해서 열고 설치합니다.
+
+
+
+우리의 로컬 컴퓨터에 터미널 창을 열거나, 명령 프롬포트를 통해서 노드가 설치되어 있는지 알 수 있습니다.
+
+```sh
+asabeneh $ node -v
+v12.14.0
+```
+
+해당 챌린지을 제작할 때에는 Node 12.14.0 버전을 사용했으나, 현재는 Node 14.17.6 버전을 권장하고 있습니다.
+
+### 브라우저
+
+브라우저는 많은 것들이 존재합니다. 그러나, 우리는 구글 크롬을 강력하게 권장합니다.
+
+#### 구글 크롬 설치
+
+[구글 크롬](https://www.google.com/chrome/)이 설치되어있지 않다면, 설치를 해 주세요. 우리는 브라우저 콘솔창에서 간단한 자바스크립트 코드를 작성할 수 있습니다. 그러나 우리는 애플리케이션을 개발하기 위해 브라우저 콘솔을 사용하지 않습니다.
+
+
+
+#### 구글 크롬 콘솔창 열기
+
+브라우저 오른쪽 상단에 있는 점 3개를 클릭하고 **추가 도구 -> 개발자 도구**를 선택하거나 바로 가기 키를 사용하여 구글 크롬 콘솔창을 열 수 있습니다. 저는 단축키 사용을 선호합니다.
+
+
+
+콘솔창을 열기위한 단축키는 아래와 같습니다.
+
+```sh
+Mac
+Command+Option+J
+
+Windows/Linux:
+Ctl+Shift+J
+```
+
+
+
+콘솔창을 열고 나서, 표시된 버튼을 경험해 보세요. 우리는 콘솔창에서 많은 시간을 보내게 될 것 입니다. 콘솔창은 자바스크립트 코드가 저장되는 위치입니다. 구글 크롬의 콘솔창의 V8 엔진은 자바스크립트 코드를 기계 코드로 변경시켜줍니다.
+
+콘솔창에서 간단한 자바스크립트 코드 예제를 적어봅시다.
+
+
+
+#### 콘솔창에서 코드 작성해 보기
+
+우리는 구글 크롬이 아니더라도, 콘솔창에서 간단한 코드를 작성해볼 수 있습니다. 그러나 이 챌린지를 위해서는 오직 구글 크롬 콘솔창에만 집중합시다. 콘솔창을 열어 주세요.
+
+```sh
+Mac
+Command+Option+I
+
+Windows:
+Ctl+Shift+I
+```
+
+##### Console.log로 출력하기
+
+우리의 첫 번째 코드는, 내장되어있는 함수인 **console.log()**입니다. 인수로 입력 데이터를 전달하면, 해당 함수가 결과물을 콘솔창에 표시합니다. 우리는 console.log() 함수에 'Hello, World'를 인풋으로 전달을 해 봅시다.
+
+```js
+console.log('Hello, World!');
+```
+
+##### Console.log로 여러 인자 출력하기
+
+**console.log()** 함수는 반점(comma)로 여러개의 인자를 구분할 수 있습니다. 문법은 다음과 같습니다. **console.log(param1, param2, param3)**
+
+
+
+```js
+console.log('Hello', 'World', '!');
+console.log('HAPPY', 'NEW', 'YEAR', 2020);
+console.log('Welcome', 'to', 30, 'Days', 'Of', 'JavaScript');
+```
+
+위의 예시 코드와 같이, *console.log()*함수는 여러 인자를 사용할 수 있습니다.
+
+축하드립니다! 당신은 *console.log()*를 이용해서 첫 자바스크립트 코드를 작성했습니다.
+
+##### 주석
+
+우리는 우리의 코드에 주석을 추가합니다. 주석은 코드의 가독성과, 코드의 설명을 남기는데에 매우 중요합니다. 자바스크립트는 코드 내부에 주석을 실행하지 않습니다. 자바스크립트에서 //로 시작하는 것은 주석이며, /\*로 시작해서 \*/로 닫히는 것 또한 주석이 될 수 있습니다.
+
+**한 줄 주석 예시**
+
+// 첫 번째 주석입니다.
+// 두 번째 주석입니다.
+// 한 줄 주석입니다.
+
+**여러 줄 주석 예시**
+
+/_
+여러 줄 주석할 때 사용합니다.
+여러줄 주석은 여러 줄을 입력할 수 있습니다.
+자바스크립트는 웹을 다루는 프로그래밍 언어입니다.
+_/
+
+##### 문법
+
+프로그래밍 언어는 인간의 언어와 유사합니다. 영어 혹은 다른 모든 언어는 단어부터 시작해서 문법, 문장, 복잡한 문장을 사용하고 의미있는 메시지들을 전달합니다. 영어에서의 구문의 의미는 언어에서 잘 만들어진 문장을 만들기 위한 단어와 문법의 배열입니다. 문법의 기술적인 정의는 컴퓨터 언어에서의 문장 구조입니다. 프로그래밍 언어에는 문법이 있습니다. 자바스크립트와, 다른 프로그래밍 언어는 문법을 가지고 있습니다. 우리는 자바스크립트가 이해할 수 있는 문법을 작성하지 않는다면, 해당 코드는 여러 가지 오류를 일으킬 것입니다. 오류에 대한 다양한 종류는 다음에 살펴봅시다. 지금부터는 간단한 문법 오류를 살펴봅시다.
+
+
+
+고의적으로 실수를 저질렀습니다. 그 결과 콘솔창은 구문 오류를 발생시키고 있습니다. 실제로 이런 구문은 매우 유익합니다. 어떤 실수가 일어났는지 알려줍니다. 오류 피드백에 대한 가이드라인을 읽으면서 우리는 구문을 수정하고 문제를 해결할 수 있습니다. 프로그램으로부터 발생한 오류를 구별하고 제거하는 과정을 디버깅이라고 말합니다. 아래 오류를 수정해 봅시다:
+
+```js
+console.log('Hello, World!');
+console.log('Hello, World!');
+```
+
+지금까지, 우리는 _console.log()_ 함수를 통해서 문자열을 표시하는 방법을 다루었습니다. _console.log()_ 를 이용해서 문자열을 입력하려면 작은 따옴표나, 큰 따옴표 혹은 백틱 따옴표안에 들어가있어야 합니다.
+
+**예시:**
+
+```js
+console.log('Hello, World!');
+console.log('Hello, World!');
+console.log(`Hello, World!`);
+```
+
+#### 산술
+
+이번에는 구글 크롬 콘솔창에서 숫자 자료형을 _console.log()_ 로 작성하는 법에 대해서 공부해 봅시다.
+
+문자열외에도 자바스크립트를 이용해서 수학적인 계산도 가능합니다. 다음과 같은 간단한 계산을 해 봅시다.
+콘솔창은 **_console.log()_** 함수 없이 직접 인수를 사용할 수 있습니다. 그러나 앞선 말한 것은 함수 사용이 필수적인 텍스트 편집기에서 일어나기 때문에, 맨 앞 부분에 포함되어 있습니다. 콘솔창을 통해서 명령어들을 가지고 놀 수 있습니다.
+
+
+
+```js
+console.log(2 + 3); // 덧셈
+console.log(3 - 2); // 뺄셈
+console.log(2 * 3); // 곱셈
+console.log(3 / 2); // 나눗셈
+console.log(3 % 2); // 나눗셈 - 나머지 구하기
+console.log(3 ** 2); // 제곱 3 ** 2 == 3 * 3
+```
+
+### 코드 편집기
+
+우리는 브라우저의 콘솔에서 코드를 작성할 수 있지만, 큰 프로젝트에서는 바람직하지 않습니다. 실제 일하는 환경에서 개발자는 코드를 작성하기 위해서 서로 다른 코드 편집기를 사용합니다. 해당 자바스크립트 30일 정복 챌린지에서는 Visual Studio Code를 사용할 예정입니다.
+
+#### Visual Studio Code 설치
+
+Visual Studio Code는 매우 유명한 오픈 소스 텍스트 편집기입니다. 우리는 [Visual Studio Code](https://code.visualstudio.com/)를 다운로드 하는 것을 권장합니다. 그렇지만 다른 편집기가 마음에 든다면, 원하시는 대로 사용하면 됩니다.
+
+
+
+Visual Studio Code를 설치했다면, 실제로 사용해 봅시다.
+
+#### Visual Studio Code 사용법
+
+Visual Studio Code의 아이콘을 더블 클릭해서 실행합시다. 실행이 되었다면 다음과 같은 화면을 볼 수 있습니다. 라벨이 적혀져있는 아이콘들을 사용해 봅시다.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## 웹 페이지에서 자바스크립트 코드 적용
+
+자바스크립트 코드는 웹 페이지에 세 가지 방법으로 적용할 수 있습니다:
+
+- **인라인 자바스크립트**
+- **내부 자바스크립트**
+- **외부 자바스크립트**
+- **여러 외부 자바스크립트**
+
+해당 섹션에서는 웹페이지에 자바스크립트 코드를 추가하는 각 방법을 다룰 예정입니다.
+
+### 인라인 자바스크립트
+
+데스크탑 등 아무 곳에서 30DaysOfJS라는 이름으로 프로젝트 폴더를 만들어 주세요. 만들고 나서, **_index.html_**을 생성합시다. 아래의 코드를 붙여넣고 크롬과 같은 브라우저로 열어봅시다.
+
+```html
+
+
+
+ 30DaysOfScript:Inline Script
+
+
+
+
+
+```
+
+지금 첫 인라인 자바스크립트를 작성했습니다. 우리는 자바스크립트 내장 함수 _alert()_ 를 이용해서 경고 메시지가 뜨게할 수 있습니다.
+
+### 내부 자바스크립트
+
+내부 자바스크립트는 _head_ 혹은 _body_ 에서 작성할 수 있습니다. 그러나, HTML문서에서 body에 넣는 것이 더 선호 됩니다.
+첫 번째로, 페이지의 head부분에 작성해 봅시다.
+
+```html
+
+
+
+ 30DaysOfScript:Internal Script
+
+
+
+
+```
+
+우리는 위와 같이 내부 자바스크립트를 사용합니다. 위에서 언급했듯이, body부분에 자바스크립트 코드를 넣는 것이 더 선호됩니다.
+
+```html
+
+
+
+ 30DaysOfScript:Internal Script
+
+
+
+
+
+
+```
+
+브라우저의 콘솔창을 열고 console.log()의 출력값을 확인해 봅시다.
+
+
+
+### 외부 자바스크립트
+
+내부 자바스크립트 방식과 유사하게, 외부 자바스크립트 방식은 header 혹은 body에 존재합니다. 그러나 이 역시 body에 적는 것이 선호됩니다.
+우선, .js 확장자를 가진 자바스크립트 파일을 생성해야 합니다. .js 확장자로 끝나는 모든 파일은 자바스크립트 파일입니다. introduction.js 프로젝트 폴더 내부에 파일을 생성하고 아래와 같은 코드를 넣어 봅시다. 그리고 본문 하단에 이 .js파일을 연결해 봅시다.
+
+```js
+console.log('Welcome to 30DaysOfJavaScript');
+```
+
+_head_ 에서의 외부 자바스크립트:
+
+```html
+
+
+
+ 30DaysOfJavaScript:External script
+
+
+
+
+```
+
+_body_ 에서의 외부 자바스크립트:
+
+```html
+
+
+
+ 30DaysOfJavaScript:External script
+
+
+
+
+
+
+
+```
+
+브라우저의 콘솔창을 열고 console.log()의 출력값을 확인해 봅시다.
+
+### 여러 외부 자바스크립트
+
+우리는 한 개의 웹 페이지에 여러 자바스크립트 파일을 연결할 수 있습니다.
+프로젝트 폴더 내에 helloworld.js 파일을 생성하고 아래 코드를 작성해 봅시다.
+
+```js
+console.log('Hello, World!');
+```
+
+```html
+
+
+
+ Multiple External Scripts
+
+
+
+
+
+
+```
+
+_main.js 파일은 다른 모든 자바스크립트 파일 아래에 있어야 합니다_ 이것은 매우 중요합니다.
+
+
+
+## 자료형 소개
+
+자바스크립트와 다른 프로그래밍 언어는 여러 자료형들이 있습니다. 다음은 자바스크립트 기본 자료형입니다: _문자열, 숫자, 불리언, undefined, null_ 추가로 _Symbol_ 이 있습니다.
+
+### 숫자
+
+- 정수 자료형: 정수 (음수, 0, 양수) 숫자
+ 예시:
+ ... -3, -2, -1, 0, 1, 2, 3 ...
+- 실수 자료형: 소수 숫자
+ 예시
+ ... -3.5, -2.25, -1.0, 0.0, 1.1, 2.2, 3.5 ...
+
+### 문자열
+
+작은 따옴표, 큰 따옴표, 백틱 따옴표 사이에 있는 한 개 혹은 그 이상의 모음입니다.
+
+**예시:**
+
+```js
+'Asabeneh';
+'Finland';
+'JavaScript is a beautiful programming language';
+'I love teaching';
+'I hope you are enjoying the first day'`We can also create a string using a backtick`;
+('A string could be just as small as one character as big as many pages');
+```
+
+### 불리언
+
+불리언 자료형은 참값과 거짓값이 있습니다. 모든 비교는 참 혹은 거짓값을 갖는 불리언 값을 반환합니다.
+
+불리언 자료형은 참 혹은 거짓입니다.
+
+**예시:**
+
+```js
+true; // 불이 켜져있다면 값은 true입니다.
+false; // 불이 꺼져있다면 값은 true입니다.
+```
+
+### Undefined
+
+자바스크립트에서 변수에 아무 값도 할당하지 않으면, 변수는 undefined값을 가집니다. 덧붙여 얘가하면 함수가 아무 값도 반환하지 않으면, 그것은 undefined를 반환합니다.
+
+```js
+let firstName;
+console.log(firstName); // undefined이다. 할당이 되지 않았기 때문이다.
+```
+
+### Null
+
+자바스크립트에서 값이 비어있으면 변수는 null값을 가집니다.
+
+```js
+let emptyValue = null;
+```
+
+## 자료형 확인하기
+
+특정 변수의 자료형을 확인하고 싶으면 **typeof** 연산자를 사용하면 됩니다. 예시를 확인해 봅시다.
+
+```js
+console.log(typeof 'Asabeneh'); // 문자열
+console.log(typeof 5); // 숫자
+console.log(typeof true); // 불리언
+console.log(typeof null); // null
+console.log(typeof undefined); // undefined
+```
+
+## 주석을 다시
+
+자바스크립트는 다른 프로그래밍언어처럼 주석을 달 수 있던 것을 기억해 봅시다. 주석은 가독성을 위해서 매우 중요합니다.
+주석에는 두 방법이 있습니다.
+
+- _한 줄 주석_
+- _여러 줄 주석_
+
+한 줄 주석:
+
+```js
+// 한 줄 주석으로 코드 자체에 주석 달기
+// let firstName = 'Asabeneh'; 한 줄 주석
+// let lastName = 'Yetayeh'; 한 줄 주석
+```
+
+여러 줄 주석:
+
+```js
+/*
+ let location = 'Helsinki';
+ let age = 100;
+ let isMarried = true;
+ This is a Multiple line comment
+*/
+```
+
+## 변수
+
+변수는 데이터의 _컨테이너_ 입니다. 변수는 메모리 공간에 데이터를 저장할 때 사용합니다. 우리가 변수를 선언하면, 메모리가 할당이 됩니다. 변수에 값을 할당하면은, 메모리 주소는 데이터로 채워집니다. 변수를 선언하기 위해서는 _var_, _let_, _const_ 키워드를 사용합니다.
+
+프로그램이 돌아가면서 변수의 값이 바뀌는 경우, _let_ 키워드를 사용합니다. 만약 변수의 값이 아예 바뀌지 않을 것이라면, _const_ 키워드를 사용합니다. 예로들어 PI, 국가명, 중력은 변하지 않으므로 _const_ 를 사용합니다. 우리는 이 챌린지에서 _var_ 키워드는 사용하지 않을 것이고, 사용하지 않는 것을 권장합니다. 그것은 많은 약점을 가지고 있고, 오류를 발생하기 쉬운 방법입니다. 각 키워드의 자세한 사항, 다른 범위(scope)에서 다음에 알아봅시다. 지금은 위에서 언급한 부분이면 충분합니다.
+
+유효한 자바스크립트 변수 이름을 위해서는 아래와 같은 규칙을 따라야합니다:
+
+- 숫자로 시작하지 않습니다.
+- 달러 기호($), 밑줄(\_)을 제외한 특수문자를 사용하면 안됩니다.
+- camelCase 네이밍 컨벤션을 따릅니다.
+- 변수 이름 단어 사이에 공백이 없어야 합니다.
+
+자바스크립트 변수를 올바르게 이름짓는 법을 예시를 통해 확인해 봅시다.
+
+```js
+firstName;
+lastName;
+country;
+city;
+capitalCity;
+age;
+isMarried;
+
+first_name;
+last_name;
+is_married;
+capital_city;
+
+num1;
+num_1;
+_num_1;
+$num1;
+year2020;
+year_2020;
+```
+
+첫 번째와 두 번째 변수들은 camelCase 네이밍컨벤션을 따릅니다. 우리 자료에서는 camelCase를 사용할 예정입니다.
+
+다음은 적절하지 못한 예시입니다:
+
+```sh
+ first-name
+ 1_num
+ num_#_1
+```
+
+서로 다른 유형의 데이터로 변수를 선언합시다. 변수를 선언하렴녀 _let_, _const_ 키워드를 사용합니다. 변수 이름 뒤에 등호와 값을 사용해 봅시다.
+
+```js
+// Syntax
+let nameOfVariable = value;
+```
+
+**Examples of declared variables**
+
+```js
+// 다른 자료형을 가지고 있는 변수 선언
+let firstName = 'Asabeneh'; // 이름
+let lastName = 'Yetayeh'; // 성
+let country = 'Finland'; // 나라
+let city = 'Helsinki'; // 수도
+let age = 100; // 나이
+let isMarried = true; // 결혼 여부
+
+console.log(firstName, lastName, country, city, age, isMarried);
+```
+
+```sh
+Asabeneh Yetayeh Finland Helsinki 100 true
+```
+
+```js
+// 각각 다른 숫자 자료형 선언
+let age = 100; // 정수 (나이)
+const gravity = 9.81; // 실수 (중력)
+const boilingPoint = 100; // 정수 (끓는 점)
+const PI = 3.14; // 실수 (파이)
+console.log(gravity, boilingPoint, PI);
+```
+
+```sh
+9.81 100 3.14
+```
+
+```js
+// 쉼표(,)를 통해 변수를 구분해서 정의할 수 있습니다.
+let name = 'Asabeneh', // 이름
+ job = 'teacher', // 직업
+ live = 'Finland'; // 사는 곳
+console.log(name, job, live);
+```
+
+```sh
+Asabeneh teacher Finland
+```
+
+01-Day 폴더에서 _index.html_ 파일을 실행하면 다음과 같은 메시지가 나타납니다.
+
+
+
+🌕 당신은 대단합니다! 1일차 도전을 완료했고, 우리는 멋져지고 있습니다. 이제 뇌와 근육을 운동해 봅시다!
+
+# 💻 1일차: 실습
+
+1. 다음의 의미를 갖는 주석을 만들어 봅시다. _주석은 코드를 읽을 수 있게 만듭니다._
+2. 또 다른 주석을 만들어 봅시다. _30DaysOfJavascript에_ 오신 것을 환영합니다.
+3. 여러 줄 주석을 사용해 봅시다. _주석은 읽기 편하고, 재사용하기 쉽고, 정보를 담고 있습니다_
+4. variable.js 파일을 만들고, 문자열 변수, 불리언 변수, undefined 변수, null 변수를 선언해 봅시다.
+5. datatype.js 파일을 만들고 **_typeof_** 연산을 통해서 데이터의 자료형을 확인해 봅시다. 모든 변수를 확인합시다!
+6. 값을 할당하지 않고 변수를 만들어 봅니다.
+7. 값을 할당하면서 변수를 만들어 봅니다.
+8. 변수 성, 이름, 결혼 여부, 사는 곳, 나이를 여러 줄로 선언해 봅시다.
+9. 변수 성, 이름, 결혼 여부, 사는 곳, 나이를 각각 한 줄로 선언해 봅시다.
+10. 두 변수 _myAge_ 와 _yourAge_ 를 만들어서 초기값을 할당하고, 콘솔창에 띄어봅시다.
+
+```sh
+I am 25 years old.
+You are 30 years old.
+```
+
+🎉 축하드립니다 ! 🎉
+
+[Day 2 >>](./02_Day_Data_types/02_day_data_types.md)
diff --git a/Korea/index.html b/Korea/index.html
new file mode 100644
index 000000000..14e41c3aa
--- /dev/null
+++ b/Korea/index.html
@@ -0,0 +1,128 @@
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+
+
Asabeneh Yetayeh challenges in 2020
+
30DaysOfJavaScript Challenge
+
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Ongoing
+
30DaysOfReact Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Polish/images/30DaysOfJavaScript.png b/Polish/images/30DaysOfJavaScript.png
new file mode 100644
index 000000000..41422866d
Binary files /dev/null and b/Polish/images/30DaysOfJavaScript.png differ
diff --git a/Polish/images/adding_project_to_vscode.png b/Polish/images/adding_project_to_vscode.png
new file mode 100644
index 000000000..193586079
Binary files /dev/null and b/Polish/images/adding_project_to_vscode.png differ
diff --git a/Polish/images/arithmetic.png b/Polish/images/arithmetic.png
new file mode 100644
index 000000000..9830916b6
Binary files /dev/null and b/Polish/images/arithmetic.png differ
diff --git a/Polish/images/array_index.png b/Polish/images/array_index.png
new file mode 100644
index 000000000..355324e18
Binary files /dev/null and b/Polish/images/array_index.png differ
diff --git a/Polish/images/assignment_operators.png b/Polish/images/assignment_operators.png
new file mode 100644
index 000000000..99d51d29c
Binary files /dev/null and b/Polish/images/assignment_operators.png differ
diff --git "a/Polish/images/banners/Day -1 \342\200\223 31.png" "b/Polish/images/banners/Day -1 \342\200\223 31.png"
new file mode 100644
index 000000000..d9a9639d8
Binary files /dev/null and "b/Polish/images/banners/Day -1 \342\200\223 31.png" differ
diff --git a/Polish/images/banners/day_1_1.png b/Polish/images/banners/day_1_1.png
new file mode 100644
index 000000000..dd583c719
Binary files /dev/null and b/Polish/images/banners/day_1_1.png differ
diff --git a/Polish/images/banners/day_1_10.png b/Polish/images/banners/day_1_10.png
new file mode 100644
index 000000000..e063dec4a
Binary files /dev/null and b/Polish/images/banners/day_1_10.png differ
diff --git a/Polish/images/banners/day_1_11.png b/Polish/images/banners/day_1_11.png
new file mode 100644
index 000000000..0c2d60b8b
Binary files /dev/null and b/Polish/images/banners/day_1_11.png differ
diff --git a/Polish/images/banners/day_1_12.png b/Polish/images/banners/day_1_12.png
new file mode 100644
index 000000000..232ac853e
Binary files /dev/null and b/Polish/images/banners/day_1_12.png differ
diff --git a/Polish/images/banners/day_1_13.png b/Polish/images/banners/day_1_13.png
new file mode 100644
index 000000000..488f522e4
Binary files /dev/null and b/Polish/images/banners/day_1_13.png differ
diff --git a/Polish/images/banners/day_1_14.png b/Polish/images/banners/day_1_14.png
new file mode 100644
index 000000000..4c5a568af
Binary files /dev/null and b/Polish/images/banners/day_1_14.png differ
diff --git a/Polish/images/banners/day_1_15.png b/Polish/images/banners/day_1_15.png
new file mode 100644
index 000000000..e3013f62e
Binary files /dev/null and b/Polish/images/banners/day_1_15.png differ
diff --git a/Polish/images/banners/day_1_16.png b/Polish/images/banners/day_1_16.png
new file mode 100644
index 000000000..d11606015
Binary files /dev/null and b/Polish/images/banners/day_1_16.png differ
diff --git a/Polish/images/banners/day_1_17.png b/Polish/images/banners/day_1_17.png
new file mode 100644
index 000000000..69cf7ae65
Binary files /dev/null and b/Polish/images/banners/day_1_17.png differ
diff --git a/Polish/images/banners/day_1_18.png b/Polish/images/banners/day_1_18.png
new file mode 100644
index 000000000..8b693409c
Binary files /dev/null and b/Polish/images/banners/day_1_18.png differ
diff --git a/Polish/images/banners/day_1_19.png b/Polish/images/banners/day_1_19.png
new file mode 100644
index 000000000..2a785c9eb
Binary files /dev/null and b/Polish/images/banners/day_1_19.png differ
diff --git a/Polish/images/banners/day_1_2.png b/Polish/images/banners/day_1_2.png
new file mode 100644
index 000000000..0f6eefb1d
Binary files /dev/null and b/Polish/images/banners/day_1_2.png differ
diff --git a/Polish/images/banners/day_1_20.png b/Polish/images/banners/day_1_20.png
new file mode 100644
index 000000000..befe1fcdf
Binary files /dev/null and b/Polish/images/banners/day_1_20.png differ
diff --git a/Polish/images/banners/day_1_21.png b/Polish/images/banners/day_1_21.png
new file mode 100644
index 000000000..634d1ebec
Binary files /dev/null and b/Polish/images/banners/day_1_21.png differ
diff --git a/Polish/images/banners/day_1_22.png b/Polish/images/banners/day_1_22.png
new file mode 100644
index 000000000..81e33d937
Binary files /dev/null and b/Polish/images/banners/day_1_22.png differ
diff --git a/Polish/images/banners/day_1_23.png b/Polish/images/banners/day_1_23.png
new file mode 100644
index 000000000..ceb032192
Binary files /dev/null and b/Polish/images/banners/day_1_23.png differ
diff --git a/Polish/images/banners/day_1_24.png b/Polish/images/banners/day_1_24.png
new file mode 100644
index 000000000..9c8ec4650
Binary files /dev/null and b/Polish/images/banners/day_1_24.png differ
diff --git a/Polish/images/banners/day_1_25.png b/Polish/images/banners/day_1_25.png
new file mode 100644
index 000000000..60a211eec
Binary files /dev/null and b/Polish/images/banners/day_1_25.png differ
diff --git a/Polish/images/banners/day_1_26.png b/Polish/images/banners/day_1_26.png
new file mode 100644
index 000000000..f187f2c66
Binary files /dev/null and b/Polish/images/banners/day_1_26.png differ
diff --git a/Polish/images/banners/day_1_27.png b/Polish/images/banners/day_1_27.png
new file mode 100644
index 000000000..863706961
Binary files /dev/null and b/Polish/images/banners/day_1_27.png differ
diff --git a/Polish/images/banners/day_1_28.png b/Polish/images/banners/day_1_28.png
new file mode 100644
index 000000000..1858aca15
Binary files /dev/null and b/Polish/images/banners/day_1_28.png differ
diff --git a/Polish/images/banners/day_1_29.png b/Polish/images/banners/day_1_29.png
new file mode 100644
index 000000000..959ee3629
Binary files /dev/null and b/Polish/images/banners/day_1_29.png differ
diff --git a/Polish/images/banners/day_1_3.png b/Polish/images/banners/day_1_3.png
new file mode 100644
index 000000000..1268d2ca6
Binary files /dev/null and b/Polish/images/banners/day_1_3.png differ
diff --git a/Polish/images/banners/day_1_30.png b/Polish/images/banners/day_1_30.png
new file mode 100644
index 000000000..18a77c4b7
Binary files /dev/null and b/Polish/images/banners/day_1_30.png differ
diff --git a/Polish/images/banners/day_1_4.png b/Polish/images/banners/day_1_4.png
new file mode 100644
index 000000000..d5262c6ba
Binary files /dev/null and b/Polish/images/banners/day_1_4.png differ
diff --git a/Polish/images/banners/day_1_5.png b/Polish/images/banners/day_1_5.png
new file mode 100644
index 000000000..21bc08c86
Binary files /dev/null and b/Polish/images/banners/day_1_5.png differ
diff --git a/Polish/images/banners/day_1_6.png b/Polish/images/banners/day_1_6.png
new file mode 100644
index 000000000..dbea5fdd8
Binary files /dev/null and b/Polish/images/banners/day_1_6.png differ
diff --git a/Polish/images/banners/day_1_7.png b/Polish/images/banners/day_1_7.png
new file mode 100644
index 000000000..eff8dac0c
Binary files /dev/null and b/Polish/images/banners/day_1_7.png differ
diff --git a/Polish/images/banners/day_1_8.png b/Polish/images/banners/day_1_8.png
new file mode 100644
index 000000000..ddf900715
Binary files /dev/null and b/Polish/images/banners/day_1_8.png differ
diff --git a/Polish/images/banners/day_1_9.png b/Polish/images/banners/day_1_9.png
new file mode 100644
index 000000000..1cf688b2d
Binary files /dev/null and b/Polish/images/banners/day_1_9.png differ
diff --git a/Polish/images/comparison_operators.png b/Polish/images/comparison_operators.png
new file mode 100644
index 000000000..26ccb9130
Binary files /dev/null and b/Polish/images/comparison_operators.png differ
diff --git a/Polish/images/console_log_multipl_arguments.png b/Polish/images/console_log_multipl_arguments.png
new file mode 100644
index 000000000..f324a907e
Binary files /dev/null and b/Polish/images/console_log_multipl_arguments.png differ
diff --git a/Polish/images/date_time_object.png b/Polish/images/date_time_object.png
new file mode 100644
index 000000000..c5297c747
Binary files /dev/null and b/Polish/images/date_time_object.png differ
diff --git a/Polish/images/day_1.png b/Polish/images/day_1.png
new file mode 100644
index 000000000..7daf57f71
Binary files /dev/null and b/Polish/images/day_1.png differ
diff --git a/Polish/images/day_1_1.png b/Polish/images/day_1_1.png
new file mode 100644
index 000000000..dd583c719
Binary files /dev/null and b/Polish/images/day_1_1.png differ
diff --git a/Polish/images/download_node.png b/Polish/images/download_node.png
new file mode 100644
index 000000000..f290b201f
Binary files /dev/null and b/Polish/images/download_node.png differ
diff --git a/Polish/images/google_chrome.png b/Polish/images/google_chrome.png
new file mode 100644
index 000000000..af06acdee
Binary files /dev/null and b/Polish/images/google_chrome.png differ
diff --git a/Polish/images/install_node.png b/Polish/images/install_node.png
new file mode 100644
index 000000000..e5aecf121
Binary files /dev/null and b/Polish/images/install_node.png differ
diff --git a/Polish/images/js_code_on_chrome_console.png b/Polish/images/js_code_on_chrome_console.png
new file mode 100644
index 000000000..7d6002c9f
Binary files /dev/null and b/Polish/images/js_code_on_chrome_console.png differ
diff --git a/Polish/images/js_code_vscode.png b/Polish/images/js_code_vscode.png
new file mode 100644
index 000000000..6e1a66148
Binary files /dev/null and b/Polish/images/js_code_vscode.png differ
diff --git a/Polish/images/launched_on_new_tab.png b/Polish/images/launched_on_new_tab.png
new file mode 100644
index 000000000..ed377dcf8
Binary files /dev/null and b/Polish/images/launched_on_new_tab.png differ
diff --git a/Polish/images/local_storage.png b/Polish/images/local_storage.png
new file mode 100644
index 000000000..087685299
Binary files /dev/null and b/Polish/images/local_storage.png differ
diff --git a/Polish/images/multiple_script.png b/Polish/images/multiple_script.png
new file mode 100644
index 000000000..caa067f34
Binary files /dev/null and b/Polish/images/multiple_script.png differ
diff --git a/Polish/images/opening_chrome_console_shortcut.png b/Polish/images/opening_chrome_console_shortcut.png
new file mode 100644
index 000000000..eace03f05
Binary files /dev/null and b/Polish/images/opening_chrome_console_shortcut.png differ
diff --git a/Polish/images/opening_developer_tool.png b/Polish/images/opening_developer_tool.png
new file mode 100644
index 000000000..6eb33ddb4
Binary files /dev/null and b/Polish/images/opening_developer_tool.png differ
diff --git a/Polish/images/opening_project_on_vscode.png b/Polish/images/opening_project_on_vscode.png
new file mode 100644
index 000000000..908c8fd72
Binary files /dev/null and b/Polish/images/opening_project_on_vscode.png differ
diff --git a/Polish/images/projects/congratulations.gif b/Polish/images/projects/congratulations.gif
new file mode 100644
index 000000000..cddd6c4b5
Binary files /dev/null and b/Polish/images/projects/congratulations.gif differ
diff --git a/Polish/images/projects/dom_min_project_30DaysOfJavaScript_color_changing_day_9.1.gif b/Polish/images/projects/dom_min_project_30DaysOfJavaScript_color_changing_day_9.1.gif
new file mode 100644
index 000000000..c8d2f2b01
Binary files /dev/null and b/Polish/images/projects/dom_min_project_30DaysOfJavaScript_color_changing_day_9.1.gif differ
diff --git a/Polish/images/projects/dom_min_project_bar_graph_day_5.1.gif b/Polish/images/projects/dom_min_project_bar_graph_day_5.1.gif
new file mode 100644
index 000000000..a7d796201
Binary files /dev/null and b/Polish/images/projects/dom_min_project_bar_graph_day_5.1.gif differ
diff --git a/Polish/images/projects/dom_min_project_bar_graph_day_5.1.png b/Polish/images/projects/dom_min_project_bar_graph_day_5.1.png
new file mode 100644
index 000000000..0b6ccf7a5
Binary files /dev/null and b/Polish/images/projects/dom_min_project_bar_graph_day_5.1.png differ
diff --git a/Polish/images/projects/dom_min_project_challenge_info_day_1.1.gif b/Polish/images/projects/dom_min_project_challenge_info_day_1.1.gif
new file mode 100644
index 000000000..055177117
Binary files /dev/null and b/Polish/images/projects/dom_min_project_challenge_info_day_1.1.gif differ
diff --git a/Polish/images/projects/dom_min_project_challenge_info_day_1.1.png b/Polish/images/projects/dom_min_project_challenge_info_day_1.1.png
new file mode 100644
index 000000000..01a8d4f9c
Binary files /dev/null and b/Polish/images/projects/dom_min_project_challenge_info_day_1.1.png differ
diff --git a/Polish/images/projects/dom_min_project_countries_aray_day_2.2.png b/Polish/images/projects/dom_min_project_countries_aray_day_2.2.png
new file mode 100644
index 000000000..ca0e3448a
Binary files /dev/null and b/Polish/images/projects/dom_min_project_countries_aray_day_2.2.png differ
diff --git a/Polish/images/projects/dom_min_project_day_7.1.gif b/Polish/images/projects/dom_min_project_day_7.1.gif
new file mode 100644
index 000000000..51bdadb69
Binary files /dev/null and b/Polish/images/projects/dom_min_project_day_7.1.gif differ
diff --git a/Polish/images/projects/dom_min_project_day_number_generators_2.1.png b/Polish/images/projects/dom_min_project_day_number_generators_2.1.png
new file mode 100644
index 000000000..d69a6c208
Binary files /dev/null and b/Polish/images/projects/dom_min_project_day_number_generators_2.1.png differ
diff --git a/Polish/images/projects/dom_min_project_keycode_day_3.2.gif b/Polish/images/projects/dom_min_project_keycode_day_3.2.gif
new file mode 100644
index 000000000..7c75c14cf
Binary files /dev/null and b/Polish/images/projects/dom_min_project_keycode_day_3.2.gif differ
diff --git a/Polish/images/projects/dom_min_project_number_generator_day_3.1.gif b/Polish/images/projects/dom_min_project_number_generator_day_3.1.gif
new file mode 100644
index 000000000..59a8dd073
Binary files /dev/null and b/Polish/images/projects/dom_min_project_number_generator_day_3.1.gif differ
diff --git a/Polish/images/projects/dom_min_project_solar_system_day_4.1.gif b/Polish/images/projects/dom_min_project_solar_system_day_4.1.gif
new file mode 100644
index 000000000..d88b04b9b
Binary files /dev/null and b/Polish/images/projects/dom_min_project_solar_system_day_4.1.gif differ
diff --git a/Polish/images/projects/dom_min_project_solar_system_day_4.1.mkv b/Polish/images/projects/dom_min_project_solar_system_day_4.1.mkv
new file mode 100644
index 000000000..1ed941c53
Binary files /dev/null and b/Polish/images/projects/dom_min_project_solar_system_day_4.1.mkv differ
diff --git a/Polish/images/projects/dom_min_project_solar_system_day_4.1.mp4 b/Polish/images/projects/dom_min_project_solar_system_day_4.1.mp4
new file mode 100644
index 000000000..69ce9368c
Binary files /dev/null and b/Polish/images/projects/dom_min_project_solar_system_day_4.1.mp4 differ
diff --git a/Polish/images/projects/dom_mini_project_challenge_info_day_2.3.gif b/Polish/images/projects/dom_mini_project_challenge_info_day_2.3.gif
new file mode 100644
index 000000000..571ea6f14
Binary files /dev/null and b/Polish/images/projects/dom_mini_project_challenge_info_day_2.3.gif differ
diff --git a/Polish/images/projects/dom_mini_project_challenge_info_day_2.3.png b/Polish/images/projects/dom_mini_project_challenge_info_day_2.3.png
new file mode 100644
index 000000000..3387beaaa
Binary files /dev/null and b/Polish/images/projects/dom_mini_project_challenge_info_day_2.3.png differ
diff --git a/Polish/images/projects/dom_mini_project_countries_day_6.1.gif b/Polish/images/projects/dom_mini_project_countries_day_6.1.gif
new file mode 100644
index 000000000..8a8f09a90
Binary files /dev/null and b/Polish/images/projects/dom_mini_project_countries_day_6.1.gif differ
diff --git a/Polish/images/projects/dom_mini_project_countries_object_day_10.1.gif b/Polish/images/projects/dom_mini_project_countries_object_day_10.1.gif
new file mode 100644
index 000000000..03b1e359d
Binary files /dev/null and b/Polish/images/projects/dom_mini_project_countries_object_day_10.1.gif differ
diff --git a/Polish/images/projects/dom_mini_project_form_validation_day_10.2.1.png b/Polish/images/projects/dom_mini_project_form_validation_day_10.2.1.png
new file mode 100644
index 000000000..9d2c2b3f6
Binary files /dev/null and b/Polish/images/projects/dom_mini_project_form_validation_day_10.2.1.png differ
diff --git a/Polish/images/projects/dom_mini_project_form_validation_day_10.2.png b/Polish/images/projects/dom_mini_project_form_validation_day_10.2.png
new file mode 100644
index 000000000..ca7cdd512
Binary files /dev/null and b/Polish/images/projects/dom_mini_project_form_validation_day_10.2.png differ
diff --git a/Polish/images/projects/dom_mini_project_leaderboard_day_8.1.gif b/Polish/images/projects/dom_mini_project_leaderboard_day_8.1.gif
new file mode 100644
index 000000000..789d0cb7c
Binary files /dev/null and b/Polish/images/projects/dom_mini_project_leaderboard_day_8.1.gif differ
diff --git a/Polish/images/projects/dom_mini_project_leaderboard_day_8.1.png b/Polish/images/projects/dom_mini_project_leaderboard_day_8.1.png
new file mode 100644
index 000000000..2956fa095
Binary files /dev/null and b/Polish/images/projects/dom_mini_project_leaderboard_day_8.1.png differ
diff --git a/Polish/images/projects/dom_mini_project_slider_day_7.1.gif b/Polish/images/projects/dom_mini_project_slider_day_7.1.gif
new file mode 100644
index 000000000..51bdadb69
Binary files /dev/null and b/Polish/images/projects/dom_mini_project_slider_day_7.1.gif differ
diff --git a/Polish/images/raising_syntax_error.png b/Polish/images/raising_syntax_error.png
new file mode 100644
index 000000000..81f6245e4
Binary files /dev/null and b/Polish/images/raising_syntax_error.png differ
diff --git a/Polish/images/regex.png b/Polish/images/regex.png
new file mode 100644
index 000000000..c7116b4dd
Binary files /dev/null and b/Polish/images/regex.png differ
diff --git a/Polish/images/running_script.png b/Polish/images/running_script.png
new file mode 100644
index 000000000..deac13de2
Binary files /dev/null and b/Polish/images/running_script.png differ
diff --git a/Polish/images/scripts_on_vscode.png b/Polish/images/scripts_on_vscode.png
new file mode 100644
index 000000000..f6257be52
Binary files /dev/null and b/Polish/images/scripts_on_vscode.png differ
diff --git a/Polish/images/string_indexes.png b/Polish/images/string_indexes.png
new file mode 100644
index 000000000..cc2f6389c
Binary files /dev/null and b/Polish/images/string_indexes.png differ
diff --git a/Polish/images/vscode.png b/Polish/images/vscode.png
new file mode 100644
index 000000000..724fc109d
Binary files /dev/null and b/Polish/images/vscode.png differ
diff --git a/Polish/images/vscode_ui.png b/Polish/images/vscode_ui.png
new file mode 100644
index 000000000..7210a088e
Binary files /dev/null and b/Polish/images/vscode_ui.png differ
diff --git a/Polish/images/web_storage.png b/Polish/images/web_storage.png
new file mode 100644
index 000000000..46f9311d9
Binary files /dev/null and b/Polish/images/web_storage.png differ
diff --git a/Polish/index.html b/Polish/index.html
new file mode 100644
index 000000000..14e41c3aa
--- /dev/null
+++ b/Polish/index.html
@@ -0,0 +1,128 @@
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+
+
+
+[Day 2 >>](./02_Day_Data_types/02_day_data_types.md)
+
+
+
+- [30 Days Of JavaScript](#30-days-of-javascript)
+- [📔 Day 1](#-day-1)
+ - [Introduction](#introduction)
+ - [Requirements](#requirements)
+ - [Setup](#setup)
+ - [Install Node.js](#install-nodejs)
+ - [Browser](#browser)
+ - [Installing Google Chrome](#installing-google-chrome)
+ - [Opening Google Chrome Console](#opening-google-chrome-console)
+ - [Writing Code on Browser Console](#writing-code-on-browser-console)
+ - [Console.log](#consolelog)
+ - [Console.log with Multiple Arguments](#consolelog-with-multiple-arguments)
+ - [Comments](#comments)
+ - [Syntax](#syntax)
+ - [Arithmetics](#arithmetics)
+ - [Code Editor](#code-editor)
+ - [Installing Visual Studio Code](#installing-visual-studio-code)
+ - [How to Use Visual Studio Code](#how-to-use-visual-studio-code)
+ - [Adding JavaScript to a Web Page](#adding-javascript-to-a-web-page)
+ - [Inline Script](#inline-script)
+ - [Internal Script](#internal-script)
+ - [External Script](#external-script)
+ - [Multiple External Scripts](#multiple-external-scripts)
+ - [Introduction to Data types](#introduction-to-data-types)
+ - [Numbers](#numbers)
+ - [Strings](#strings)
+ - [Booleans](#booleans)
+ - [Undefined](#undefined)
+ - [Null](#null)
+ - [Checking Data Types](#checking-data-types)
+ - [Comments Again](#comments-again)
+ - [Variables](#variables)
+- [💻 Day 1: Exercises](#-day-1-exercises)
+
+# 📔 Day 1
+
+## Introduction
+
+**Congratulations** on deciding to participate in 30 days of JavaScript programming challenge. In this challenge you will learn everything you need to be a JavaScript programmer, and in general, the whole concept of programming. In the end of the challenge you will get a 30DaysOfJavaScript programming challenge completion certificate. In case you need help or if you would like to help others you may join the [telegram group](https://t.me/ThirtyDaysOfJavaScript).
+
+**A 30DaysOfJavaScript** challenge is a guide for both beginners and advanced JavaScript developers. Welcome to JavaScript. JavaScript is the language of the web. I enjoy using and teaching JavaScript and I hope you will do so too.
+
+In this step by step JavaScript challenge, you will learn JavaScript, the most popular programming language in the history of mankind.
+JavaScript is used **_to add interactivity to websites, to develop mobile apps, desktop applications, games_** and nowadays JavaScript can be used for **_machine learning_** and **_AI_**.
+**_JavaScript (JS)_** has increased in popularity in recent years and has been the leading
+programming language for six consecutive years and is the most used programming language on
+Github.
+
+## Requirements
+
+No prior knowledge of programming is required to follow this challenge. You need only:
+
+1. Motivation
+2. A computer
+3. Internet
+4. A browser
+5. A code editor
+
+## Setup
+
+I believe you have the motivation and a strong desire to be a developer, a computer and Internet. If you have those, then you have everything to get started.
+
+### Install Node.js
+
+You may not need Node.js right now but you may need it for later. Install [node.js](https://nodejs.org/en/).
+
+
+
+After downloading double click and install
+
+
+
+We can check if node is installed on our local machine by opening our device terminal or command prompt.
+
+```sh
+asabeneh $ node -v
+v12.14.0
+```
+
+When making this tutorial I was using Node version 12.14.0, but now the recommended version of Node.js for download is v14.17.6, by the time you use this material you may have a higher Node.js version.
+
+### Browser
+
+There are many browsers out there. However, I strongly recommend Google Chrome.
+
+#### Installing Google Chrome
+
+Install [Google Chrome](https://www.google.com/chrome/) if you do not have one yet. We can write small JavaScript code on the browser console, but we do not use the browser console to develop applications.
+
+
+
+#### Opening Google Chrome Console
+
+You can open Google Chrome console either by clicking three dots at the top right corner of the browser, selecting _More tools -> Developer tools_ or using a keyboard shortcut. I prefer using shortcuts.
+
+
+
+To open the Chrome console using a keyboard shortcut.
+
+```sh
+Mac
+Command+Option+J
+
+Windows/Linux:
+Ctl+Shift+J
+```
+
+
+
+After you open the Google Chrome console, try to explore the marked buttons. We will spend most of the time on the Console. The Console is the place where your JavaScript code goes. The Google Console V8 engine changes your JavaScript code to machine code.
+Let us write a JavaScript code on the Google Chrome console:
+
+
+
+#### Writing Code on Browser Console
+
+We can write any JavaScript code on the Google console or any browser console. However, for this challenge, we only focus on Google Chrome console. Open the console using:
+
+```sh
+Mac
+Command+Option+I
+
+Windows:
+Ctl+Shift+I
+```
+
+##### Console.log
+
+To write our first JavaScript code, we used a built-in function **console.log()**. We passed an argument as input data, and the function displays the output. We passed `'Hello, World'` as input data or argument in the console.log() function.
+
+```js
+console.log("Hello, World!");
+```
+
+##### Console.log with Multiple Arguments
+
+The **`console.log()`** function can take multiple parameters separated by commas. The syntax looks like as follows:**`console.log(param1, param2, param3)`**
+
+
+
+```js
+console.log("Hello", "World", "!");
+console.log("HAPPY", "NEW", "YEAR", 2020);
+console.log("Welcome", "to", 30, "Days", "Of", "JavaScript");
+```
+
+As you can see from the snippet code above, _`console.log()`_ can take multiple arguments.
+
+Congratulations! You wrote your first JavaScript code using _`console.log()`_.
+
+##### Comments
+
+We can add comments to our code. Comments are very important to make code more readable and to leave remarks in our code. JavaScript does not execute the comment part of our code. In JavaScript, any text line starting with // in JavaScript is a comment, and anything enclosed like this `//` is also a comment.
+
+**Example: Single Line Comment**
+
+```js
+// This is the first comment
+// This is the second comment
+// I am a single line comment
+```
+
+**Example: Multiline Comment**
+
+```js
+/*
+This is a multiline comment
+ Multiline comments can take multiple lines
+ JavaScript is the language of the web
+ */
+```
+
+##### Syntax
+
+Programming languages are similar to human languages. English or many other language uses words, phrases, sentences, compound sentences and other more to convey a meaningful message. The English meaning of syntax is _the arrangement of words and phrases to create well-formed sentences in a language_. The technical definition of syntax is the structure of statements in a computer language. Programming languages have syntax. JavaScript is a programming language and like other programming languages it has its own syntax. If we do not write a syntax that JavaScript understands, it will raise different types of errors. We will explore different kinds of JavaScript errors later. For now, let us see syntax errors.
+
+
+
+I made a deliberate mistake. As a result, the console raises syntax errors. Actually, the syntax is very informative. It informs what type of mistake was made. By reading the error feedback guideline, we can correct the syntax and fix the problem. The process of identifying and removing errors from a program is called debugging. Let us fix the errors:
+
+```js
+console.log("Hello, World!");
+console.log("Hello, World!");
+```
+
+So far, we saw how to display text using the _`console.log()`_. If we are printing text or string using _`console.log()`_, the text has to be inside the single quotes, double quotes, or a backtick.
+**Example:**
+
+```js
+console.log("Hello, World!");
+console.log("Hello, World!");
+console.log(`Hello, World!`);
+```
+
+#### Arithmetics
+
+Now, let us practice more writing JavaScript codes using _`console.log()`_ on Google Chrome console for number data types.
+In addition to the text, we can also do mathematical calculations using JavaScript. Let us do the following simple calculations.
+It is possible to write JavaScript code on Google Chrome console can directly without the **_`console.log()`_** function. However, it is included in this introduction because most of this challenge would be taking place in a text editor where the usage of the function would be mandatory. You can play around directly with instructions on the console.
+
+
+
+```js
+console.log(2 + 3); // Addition
+console.log(3 - 2); // Subtraction
+console.log(2 * 3); // Multiplication
+console.log(3 / 2); // Division
+console.log(3 % 2); // Modulus - finding remainder
+console.log(3 ** 2); // Exponentiation 3 ** 2 == 3 * 3
+```
+
+### Code Editor
+
+We can write our codes on the browser console, but it won't be for bigger projects. In a real working environment, developers use different code editors to write their codes. In this 30 days of JavaScript challenge, we will be using Visual Studio Code.
+
+#### Installing Visual Studio Code
+
+Visual Studio Code is a very popular open-source text editor. I would recommend to [download Visual Studio Code](https://code.visualstudio.com/), but if you are in favor of other editors, feel free to follow with what you have.
+
+
+
+If you installed Visual Studio Code, let us start using it.
+
+#### How to Use Visual Studio Code
+
+Open the Visual Studio Code by double-clicking its icon. When you open it, you will get this kind of interface. Try to interact with the labeled icons.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Adding JavaScript to a Web Page
+
+JavaScript can be added to a web page in three different ways:
+
+- **_Inline script_**
+- **_Internal script_**
+- **_External script_**
+- **_Multiple External scripts_**
+
+The following sections show different ways of adding JavaScript code to your web page.
+
+### Inline Script
+
+Create a project folder on your desktop or in any location, name it 30DaysOfJS and create an **_`index.html`_** file in the project folder. Then paste the following code and open it in a browser, for example [Chrome](https://www.google.com/chrome/).
+
+```html
+
+
+
+ 30DaysOfScript:Inline Script
+
+
+
+
+
+```
+
+Now, you just wrote your first inline script. We can create a pop up alert message using the _`alert()`_ built-in function.
+
+### Internal Script
+
+The internal script can be written in the _`head`_ or the _`body`_, but it is preferred to put it on the body of the HTML document.
+First, let us write on the head part of the page.
+
+```html
+
+
+
+ 30DaysOfScript:Internal Script
+
+
+
+
+```
+
+This is how we write an internal script most of the time. Writing the JavaScript code in the body section is the most preferred option. Open the browser console to see the output from the `console.log()`.
+
+```html
+
+
+
+ 30DaysOfScript:Internal Script
+
+
+
+
+
+
+```
+
+Open the browser console to see the output from the `console.log()`.
+
+
+
+### External Script
+
+Similar to the internal script, the external script link can be on the header or body, but it is preferred to put it in the body.
+First, we should create an external JavaScript file with .js extension. All files ending with .js extension are JavaScript files. Create a file named introduction.js inside your project directory and write the following code and link this .js file at the bottom of the body.
+
+```js
+console.log("Welcome to 30DaysOfJavaScript");
+```
+
+External scripts in the _head_:
+
+```html
+
+
+
+ 30DaysOfJavaScript:External script
+
+
+
+
+```
+
+External scripts in the _body_:
+
+```html
+
+
+
+ 30DaysOfJavaScript:External script
+
+
+
+
+
+
+
+```
+
+Open the browser console to see the output of the `console.log()`.
+
+### Multiple External Scripts
+
+We can also link multiple external JavaScript files to a web page.
+Create a `helloworld.js` file inside the 30DaysOfJS folder and write the following code.
+
+```js
+console.log("Hello, World!");
+```
+
+```html
+
+
+
+ Multiple External Scripts
+
+
+
+
+
+
+```
+
+_Your main.js file should be below all other scripts_. It is very important to remember this.
+
+
+
+## Introduction to Data types
+
+In JavaScript and also other programming languages, there are different types of data types. The following are JavaScript primitive data types: _String, Number, Boolean, undefined, Null_, and _Symbol_.
+
+### Numbers
+
+- Integers: Integer (negative, zero and positive) numbers
+ Example:
+ ... -3, -2, -1, 0, 1, 2, 3 ...
+- Float-point numbers: Decimal number
+ Example
+ ... -3.5, -2.25, -1.0, 0.0, 1.1, 2.2, 3.5 ...
+
+### Strings
+
+A collection of one or more characters between two single quotes, double quotes, or backticks.
+
+**Example:**
+
+```js
+"a";
+"Asabeneh";
+"Asabeneh";
+"Finland";
+"JavaScript is a beautiful programming language";
+"I love teaching";
+"I hope you are enjoying the first day"`We can also create a string using a backtick`;
+("A string could be just as small as one character or as big as many pages");
+("Any data type under a single quote, double quote or backtick is a string");
+```
+
+### Booleans
+
+A boolean value is either True or False. Any comparisons returns a boolean value, which is either true or false.
+
+A boolean data type is either a true or false value.
+
+**Example:**
+
+```js
+true; // if the light is on, the value is true
+false; // if the light is off, the value is false
+```
+
+### Undefined
+
+In JavaScript, if we don't assign a value to a variable, the value is undefined. In addition to that, if a function is not returning anything, it returns undefined.
+
+```js
+let firstName;
+console.log(firstName); // undefined, because it is not assigned to a value yet
+```
+
+### Null
+
+Null in JavaScript means an empty value.
+
+```js
+let emptyValue = null;
+```
+
+## Checking Data Types
+
+To check the data type of a certain variable, we use the **typeof** operator. See the following example.
+
+```js
+console.log(typeof "Asabeneh"); // string
+console.log(typeof 5); // number
+console.log(typeof true); // boolean
+console.log(typeof null); // object type
+console.log(typeof undefined); // undefined
+```
+
+## Comments Again
+
+Remember that commenting in JavaScript is similar to other programming languages. Comments are important in making your code more readable.
+There are two ways of commenting:
+
+- _Single line commenting_
+- _Multiline commenting_
+
+```js
+// commenting the code itself with a single comment
+// let firstName = 'Asabeneh'; single line comment
+// let lastName = 'Yetayeh'; single line comment
+```
+
+Multiline commenting:
+
+```js
+/*
+ let location = 'Helsinki';
+ let age = 100;
+ let isMarried = true;
+ This is a Multiple line comment
+*/
+```
+
+## Variables
+
+Variables are _containers_ of data. Variables are used to _store_ data in a memory location. When a variable is declared, a memory location is reserved. When a variable is assigned to a value (data), the memory space will be filled with that data. To declare a variable, we use _var_, _let_, or _const_ keywords.
+
+For a variable that changes at a different time, we use _let_. If the data does not change at all, we use _const_. For example, PI, country name, gravity do not change, and we can use _const_. We will not use var in this challenge and I don't recommend you to use it. It is error prone way of declaring variable it has lots of leak. We will talk more about var, let, and const in detail in other sections (scope). For now, the above explanation is enough.
+
+A valid JavaScript variable name must follow the following rules:
+
+- A JavaScript variable name should not begin with a number.
+- A JavaScript variable name does not allow special characters except dollar sign and underscore.
+- A JavaScript variable name follows a camelCase convention.
+- A JavaScript variable name should not have space between words.
+
+The following are examples of valid JavaScript variables.
+
+```js
+firstName;
+lastName;
+country;
+city;
+capitalCity;
+age;
+isMarried;
+
+first_name;
+last_name;
+is_married;
+capital_city;
+
+num1;
+num_1;
+_num_1;
+$num1;
+year2020;
+year_2020;
+```
+
+The first and second variables on the list follows the camelCase convention of declaring in JavaScript. In this material, we will use camelCase variables(camelWithOneHump). We use CamelCase(CamelWithTwoHump) to declare classes, we will discuss about classes and objects in other section.
+
+Example of invalid variables:
+
+```js
+ first-name
+ 1_num
+ num_#_1
+```
+
+Let us declare variables with different data types. To declare a variable, we need to use _let_ or _const_ keyword before the variable name. Following the variable name, we write an equal sign (assignment operator), and a value(assigned data).
+
+```js
+// Syntax
+let nameOfVariable = value;
+```
+
+The nameOfVriable is the name that stores different data of value. See below for detail examples.
+
+**Examples of declared variables**
+
+```js
+// Declaring different variables of different data types
+let firstName = "Asabeneh"; // first name of a person
+let lastName = "Yetayeh"; // last name of a person
+let country = "Finland"; // country
+let city = "Helsinki"; // capital city
+let age = 100; // age in years
+let isMarried = true;
+
+console.log(firstName, lastName, country, city, age, isMarried);
+```
+
+```sh
+Asabeneh Yetayeh Finland Helsinki 100 true
+```
+
+```js
+// Declaring variables with number values
+let age = 100; // age in years
+const gravity = 9.81; // earth gravity in m/s2
+const boilingPoint = 100; // water boiling point, temperature in °C
+const PI = 3.14; // geometrical constant
+console.log(gravity, boilingPoint, PI);
+```
+
+```sh
+9.81 100 3.14
+```
+
+```js
+// Variables can also be declaring in one line separated by comma, however I recommend to use a seperate line to make code more readble
+let name = "Asabeneh",
+ job = "teacher",
+ live = "Finland";
+console.log(name, job, live);
+```
+
+```sh
+Asabeneh teacher Finland
+```
+
+When you run _index.html_ file in the 01-Day folder you should get this:
+
+
+
+🌕 You are amazing! You have just completed day 1 challenge and you are on your way to greatness. Now do some exercises for your brain and muscle.
+
+# 💻 Day 1: Exercises
+
+1. Write a single line comment which says, _comments can make code readable_
+2. Write another single comment which says, _Welcome to 30DaysOfJavaScript_
+3. Write a multiline comment which says, _comments can make code readable, easy to reuse_
+ _and informative_
+
+4. Create a variable.js file and declare variables and assign string, boolean, undefined and null data types
+5. Create datatypes.js file and use the JavaScript **_typeof_** operator to check different data types. Check the data type of each variable
+6. Declare four variables without assigning values
+7. Declare four variables with assigned values
+8. Declare variables to store your first name, last name, marital status, country and age in multiple lines
+9. Declare variables to store your first name, last name, marital status, country and age in a single line
+10. Declare two variables _myAge_ and _yourAge_ and assign them initial values and log to the browser console.
+
+```sh
+I am 25 years old.
+You are 30 years old.
+```
+
+🎉 CONGRATULATIONS ! 🎉
+
+[Day 2 >>](./02_Day_Data_types/02_day_data_types.md)
diff --git "a/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/helloworld.js" "b/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/helloworld.js"
new file mode 100644
index 000000000..8c9e2c0ae
--- /dev/null
+++ "b/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/helloworld.js"
@@ -0,0 +1 @@
+console.log('Hello, World!')
\ No newline at end of file
diff --git "a/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/index.html" "b/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/index.html"
new file mode 100644
index 000000000..7bc0057be
--- /dev/null
+++ "b/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/index.html"
@@ -0,0 +1,19 @@
+
+
+
+
+ 30DaysOfJavaScript
+
+
+
+
30DaysOfJavaScript:03 Day
+
Introdução
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/introduction.js" "b/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/introduction.js"
new file mode 100644
index 000000000..ad7d2b303
--- /dev/null
+++ "b/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/introduction.js"
@@ -0,0 +1 @@
+console.log('Bem vindo ao 30DaysOfJavaScript')
\ No newline at end of file
diff --git "a/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/main.js" "b/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/main.js"
new file mode 100644
index 000000000..9006c9dbe
--- /dev/null
+++ "b/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/main.js"
@@ -0,0 +1,4 @@
+// Os valores das variáveis podem ser acessados de outro arquivo variable.js
+console.log(primeiroNome, sobrenome, pais, cidade, idade, isCasado)
+console.log(gravidade, pontoEbulicao, PI) // 9.81, 100, 3.14
+console.log(nome, profissao, aondeMora)
\ No newline at end of file
diff --git "a/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/variable.js" "b/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/variable.js"
new file mode 100644
index 000000000..ba7530bf1
--- /dev/null
+++ "b/Portuguese/Dia_01_introdu\303\247\303\243o/01_day_starter/variable.js"
@@ -0,0 +1,20 @@
+// Declarando diferentes variáveis com diferentes tipos de dados.
+
+let primeiroNome = 'Asabeneh' // primeiro nome de uma pessoa
+let sobrenome = 'Yetayeh' // sobrenome de uma pessoa
+let pais = 'Finlândia' // país
+let cidade = 'Helsinki' // capital do país
+let idade = 100 // idade em anos
+let isCasado = true
+
+// Declarando variáveis com valores numéricos
+
+const gravidade = 9.81 // gravidade da terra in m/s2
+const pontoEbulicao = 100 // ponto de ebulição da água, temperatura em oC
+const PI = 3.14 // constante geométrica
+
+// Variáveis também podem ser declaradas em uma linha, separadas por vírgula.
+
+let nome = 'Asabeneh', //name of a person
+ profissao = 'Professor',
+ aondeMora = 'Finlândia'
\ No newline at end of file
diff --git "a/Portuguese/Dia_01_introdu\303\247\303\243o/variable.js" "b/Portuguese/Dia_01_introdu\303\247\303\243o/variable.js"
new file mode 100644
index 000000000..ba7530bf1
--- /dev/null
+++ "b/Portuguese/Dia_01_introdu\303\247\303\243o/variable.js"
@@ -0,0 +1,20 @@
+// Declarando diferentes variáveis com diferentes tipos de dados.
+
+let primeiroNome = 'Asabeneh' // primeiro nome de uma pessoa
+let sobrenome = 'Yetayeh' // sobrenome de uma pessoa
+let pais = 'Finlândia' // país
+let cidade = 'Helsinki' // capital do país
+let idade = 100 // idade em anos
+let isCasado = true
+
+// Declarando variáveis com valores numéricos
+
+const gravidade = 9.81 // gravidade da terra in m/s2
+const pontoEbulicao = 100 // ponto de ebulição da água, temperatura em oC
+const PI = 3.14 // constante geométrica
+
+// Variáveis também podem ser declaradas em uma linha, separadas por vírgula.
+
+let nome = 'Asabeneh', //name of a person
+ profissao = 'Professor',
+ aondeMora = 'Finlândia'
\ No newline at end of file
diff --git a/Portuguese/Dia_02_Tipos_Dados/dia_02_starter/index.html b/Portuguese/Dia_02_Tipos_Dados/dia_02_starter/index.html
new file mode 100644
index 000000000..8fbbe0d1b
--- /dev/null
+++ b/Portuguese/Dia_02_Tipos_Dados/dia_02_starter/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+ 30DaysOfJavaScript
+
+
+
+
30DaysOfJavaScript:02 Day
+
Data types
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Portuguese/Dia_02_Tipos_Dados/dia_02_starter/main.js b/Portuguese/Dia_02_Tipos_Dados/dia_02_starter/main.js
new file mode 100644
index 000000000..77629084e
--- /dev/null
+++ b/Portuguese/Dia_02_Tipos_Dados/dia_02_starter/main.js
@@ -0,0 +1 @@
+// this is your main.js script
\ No newline at end of file
diff --git a/Portuguese/Dia_02_Tipos_Dados/dia_02_tipos_dados.md b/Portuguese/Dia_02_Tipos_Dados/dia_02_tipos_dados.md
new file mode 100644
index 000000000..10e7c5463
--- /dev/null
+++ b/Portuguese/Dia_02_Tipos_Dados/dia_02_tipos_dados.md
@@ -0,0 +1,972 @@
+
+
+
+[<< Dia 1](../readMe.md) | [Dia 3 >>](../Dia_03_Booleanos_Operadores_Data/dia_03_booleanos_operadores_data.md)
+
+
+
+- [📔 Dia 2](#-dia-2)
+ - [Tipo de Dados](#tipos-de-dados)
+ - [Tipos de Dados Primitivos](#tipos-de-dados-primitivos)
+ - [Tipos de Dados Não Primitivos](#tipos-de-dados-não-primitivos)
+ - [Números](#Números)
+ - [Declarando Tipos de Dados Numéricos](#declarando-tipos-de-dados-numéricos)
+ - [Objeto Math](#objeto-math)
+ - [Gerador de Número Aleatório](#gerador-de-número-aleatório)
+ - [Strings](#strings)
+ - [String Concatenação](#string-concatenação)
+ - [Concatenando Usando o Operador de Adição](#concatenando-usando-o-operador-de-adição)
+ - [Escape Sequences em Strings](#escape-sequences-em-strings)
+ - [Strings Literais (Template Strings)](#Strings-Literais-template-strings)
+ - [String Métodos](#string-métodos)
+ - [Verificando Tipos de Dados e Casting](#verificando-tipos-de-dados-e-casting)
+ - [Verificando Tipos de Dados](#verificando-tipos-de-dados)
+ - [Mudando Tipo de Dado (Casting)](#mudando-tipo-de-dado-casting)
+ - [String para Int](#string-para-int)
+ - [String para Float](#string-para-float)
+ - [Float para Int](#float-para-int)
+ - [💻 Dia 2: Exercícios](#-dia-2-exercícios)
+ - [Exercícios: Level 1](#exercícios-level-1)
+ - [Exercícios: Level 2](#exercícios-level-2)
+ - [Exercícios: Level 3](#exercícios-level-3)
+
+# 📔 Dia 2
+
+## Tipos de Dados
+
+Na sessão anterior, nós mencionamos um pouco sobre tipos de dados. Tipos de dados decrevem as caracteristicas dos dados, e podem ser divididos em duas categorias:
+
+ 1. Tipos de dados primitivos
+ 2. Tipos de dados não primitivos (de referência do objeto.)
+
+### Tipos de Dados Primitivos
+
+Tipos de dados primitivos em JavaScript inclui:
+
+ 1. Numbers - Inteiros, floats
+ 2. Strings - Qualquer dado entre aspas simples, aspas duplas e crase
+ 3. Booleans - valores verdadeiros ou falsos
+ 4. Null - valor vazio ou sem valor
+ 5. Undefined - variável declarada sem um valor
+ 6. Symbol - Um valor único que pode ser gerado por um construtor de símbolo
+
+Tipos de dados não primitivos em JavaScriot inclui:
+
+ 1. Objetos
+ 2. Arrays
+
+Agora, vamos ver exatamente oque significa tipos de dados primitivos e não primitivos.
+*Primitivo* são tipos de dados imutáveis (não-modificável). Uma vez criado um tipo de dado primitivo nós não podemos mais modificá-lo.
+
+**Exemplo:**
+
+```js
+let exemplo = 'JavaScript'
+```
+
+Se nós tentarmos modificar uma string armazenada na variável *exemplo*, o JavaScript irá mostar um error. Qualquer dado entre aspas simples, aspas duplas, ou crase é um string.
+
+```js
+exemplo[0] = 'Y'
+```
+
+Esta expressão não muda a string armazenada na variável *exemplo*. Então, podemos dizer que strings não são modificavéis ou in outras palavras imutáveis.
+Tipos de dados primitivos são comparados pelo seu valor. Vamos comparar valores de dados diferentes. Veja o exemplo abaixo:
+
+```js
+let numeroUm = 3
+let numeroDois = 3
+
+console.log(numeroUm == numeroDois) // verdadeiro
+
+let js = 'JavaScript'
+let py = 'Python'
+
+console.log(js == py) // falso
+
+let luzLigar = true
+let luzApagar = false
+
+console.log(luzLigar == luzApagar) // falso
+```
+
+### Tipos de Dados Não Primitivos
+
+*Não primitivos* são tipos de dados modificáveis ou mutáveis. Nós podemos modificar o valor de um dado tipo não primitivo depois de criado.
+Vamos ver isso criando um array, um array é uma lista de valores de dados entre colchetes. Arrays que contém o mesmo ou diferentes tipos de dados. Valores de Arrays são referenciados pelo seu index. Em JavaScript o index do array começa em zero, em outras palavras o primeiro elemento de um array é encontrado no index zero, o segundo elemento no index um, e o terceiro elemento no index dois, etc.
+
+```js
+let numeros = [1, 2, 3]
+numeros[0] = 1
+
+console.log(numeros) // [1, 2, 3]
+```
+
+Como você pode ver, um array é um tipo de dado não primitivo e mutável. Tipos de dados não primitivos não podem ser comparador pelos seus valores. Mesmo se dois tipos de dados não primitivos tem as mesmas propriedades e valores, eles não podem ser estritamentes iguais.
+
+```js
+let nums = [1, 2, 3]
+let numeros = [1, 2, 3]
+
+console.log(nums == numeros) // falso
+
+let userOne = {
+nome:'Asabeneh',
+profissao:'professor',
+país:'Finland'
+}
+
+let userTwo = {
+nome:'Asabeneh',
+profissao:'professor',
+country:'Finland'
+}
+
+console.log(userOne == userTwo) // falso
+```
+
+Regra de ouro, nós não comparamos tipos de dados não primitivos. Não se compara arrays, funções, ou objetos. Porque eles são comparados pela sua referência ao invez do valor. Dois objetos só são estritamentes iguais se a sua referência for o mesmo objeto subjacente.
+
+```js
+let nums = [1, 2, 3]
+let numeros = nums
+
+console.log(nums == numeros) // verdadeiro
+
+let userOne = {
+nome:'Asabeneh',
+profissao:'Professor',
+país:'Finland'
+}
+
+let userTwo = userOne
+
+console.log(userOne == userTwo) // verdadeiro
+```
+
+Com dificuldade de entender a diferença entre tipos de dados primitivos e tipos de dados não primitivos? Você não é o único. Calma e apenas vá para a próxima sessão e tente voltar aqui depois de algum tempo. Agora vamos começar com tipos de dados do tipo número.
+
+## Números
+
+Números são todos os inteiros e valores decimais que podem fazer todas as operações aritméticas.
+Vamos ver alguns exemplos de Números.
+
+### Declarando Tipos de Dados Numéricos
+
+```js
+let idade = 35
+const gravidade = 9.81 // nós usamos const para valores que não mudam, constante gravitacional em 9,8 m/s².
+let massa = 72 // massa em Kilogramas
+const PI = 3.14 // pi constante geométrica
+
+// Mais exemplos
+const pontoEbulicao = 100 // temperatura em oC, ponto de ebulução da água que é uma constante
+const temperaturaCorpo = 37 // oC média da temperatura corporal humana, que é uma constante
+
+console.log(idade, gravidade, massa, PI, pontoEbulicao, temperaturaCorpo)
+```
+
+### Objeto Math
+
+Em JavaScript o objeto Math promove muitos métodos para trabalhar com números.
+
+```js
+const PI = Math.PI
+
+console.log(PI) // 3.141592653589793
+
+// arredondando para o número mais próximo
+// se maior que 0.5 para cima, se menor que 0.5 para baixo.
+
+console.log(Math.round(PI)) // 3 é o valor mais próximo
+
+console.log(Math.round(9.81)) // 10
+
+console.log(Math.floor(PI)) // 3 arredondando para baixo
+
+console.log(Math.ceil(PI)) // 4 arredondando para cima
+
+console.log(Math.min(-5, 3, 20, 4, 5, 10)) // -5, retorna o valor mínimo
+
+console.log(Math.max(-5, 3, 20, 4, 5, 10)) // 20, retorna o valor máximo
+
+const numAleatorio = Math.random() // cria um número aleatório entre 0 até 0.999999
+console.log(numAleatorio)
+
+// Vamos criar um número aleatório entre 0 até 10
+
+const num = Math.floor(Math.random () * 11) // cria um número aleatório entre 0 até 10
+console.log(num)
+
+// Valor absoluto
+console.log(Math.abs(-10)) // 10
+
+// Raiz quadrada
+console.log(Math.sqrt(100)) // 10
+
+console.log(Math.sqrt(2)) // 1.4142135623730951
+
+// Potência
+console.log(Math.pow(3, 2)) // 9
+
+console.log(Math.E) // 2.718
+
+// Logaritmo
+// Retorna o logaritmo natural com base E de x, Math.log(x)
+console.log(Math.log(2)) // 0.6931471805599453
+console.log(Math.log(10)) // 2.302585092994046
+
+// Retorna o logaritmo natural de 2 e 10 repectivamente
+console.log(Math.LN2) // 0.6931471805599453
+console.log(Math.LN10) // 2.302585092994046
+
+// Trigonometria
+Math.sin(0)
+Math.sin(60)
+
+Math.cos(0)
+Math.cos(60)
+```
+
+#### Gerador de Números Aleatórios
+
+O objeto Math do JavaScript tem o método random() que gera números de 0 ate 0.999999999...
+
+```js
+let numeroAleatorio = Math.random() // gera de 0 até 0.999...
+```
+
+Agora, vamos ver como nós podemos usar o método random() para gerar um número aleatório entre 0 e 10:
+
+```js
+let numeroAleatorio = Math.random() // gera de 0 até 0.999
+let numeroEntreZeroAteDez = numeroAleatorio * 11
+
+console.log(numeroEntreZeroAteDez) // retorna: min 0 and max 10.99
+
+let numeroAleatorioParaInteiro = Math.floor(numeroEntreZeroAteDez)
+console.log(numeroAleatorioParaInteiro) // retorna: entre 0 e 10
+```
+
+## Strings
+
+Strings são textos, que estão entre **_simples_**, **_duplas_**, **_crase_**. Para declarar uma string, nós precisamos de um nome de variável, operador de atribuição, um valor entre aspas simples, aspas duplas, ou crase.
+Vamos ver alguns exemplos de string:
+
+```js
+let espaço = ' ' // um valor de string vazia
+let primeiroNone = 'Asabeneh'
+let ultimoNome = 'Yetayeh'
+let país = 'Finland'
+let cidade = 'Helsinki'
+let linguagem = 'JavaScript'
+let profissao = 'Professor'
+let citacao = "The saying,'Seeing is Believing' is not correct in 2020."
+let citacaoUsandoCrase = `The saying,'Seeing is Believing' is not correct in 2020.`
+```
+
+### String Concatenação
+
+Conectando duas ou mais strings juntas é chamado de concatenação.
+Usando as strings declaradas na sessão anterior de strings:
+
+```js
+let nomeCompleto = primeiroNone + espaco + ultimoNome; // concatenação, combinar duas ou mais strings juntas.
+console.log(nomeCompleto);
+```
+
+```sh
+Asabeneh Yetayeh
+```
+
+Nós podemos concatenar strings de jeitos diferentes.
+
+#### Concatenando Usando o Operador de Adição
+
+Concatenando usando o operador de adição é o modo antigo de fazer. Este tipo de concatenação é tedioso e propenso a erros. E é muito bom sabe como concatenar deste modo, mas eu sugiro fortemente que use o template ES6 de strings (explicado mais adiante).
+
+```js
+// Declarando diferentes variáveis de diferentes tipos de dados
+let espaco = ' '
+let primeiroNome = 'Asabeneh'
+let ultimoNome = 'Yetayeh'
+let pais = 'Finland'
+let cidade = 'Helsinki'
+let linguagem = 'JavaScript'
+let profissao = 'teacher'
+let idade = 250
+
+let nomeCompleto = primeiroNome + espaco + ultimoNome
+let pessoaUmInfo = nomeCompleto + '. I am ' + idade + '. I live in ' + país; // ES5 adição de string
+
+console.log(pessoaUmInfo)
+```
+
+```sh
+Asabeneh Yetayeh. I am 250. I live in Finland
+```
+### Strings Literais Longas
+
+Uma string pode ser apenas um caractere, paragrafo ou uma página. Se o tamanho da string é maior que a linha. Nós podemos usar o caractere barras invertidas (\\) no final de cada linha para indicar que aquela string irá continuar na próxima linha.
+**Exemplo**
+
+```js
+const paragrafo = "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(paragrafo)
+```
+
+#### Escape Sequences em Strings
+
+Em JavaScript e outras linguagens de programação \ seguido de alguns caracteres, é um escape sequence. Vamos ver os mais usados:
+
+- \n: Nova linha
+- \t: Tab, significa 8 espaços
+- \\\\: Barra
+- \\': Single quote (')
+- \\": Double quote (")
+
+```js
+console.log('I hope everyone is enjoying the 30 Days Of JavaScript challenge.\nDo you ?') // quebra de linha
+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 (\\)') // Para mostar uma barra
+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')
+```
+
+saída no console:
+
+```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
+```
+
+#### Strings Literais (Template Strings)
+
+Para criar Strings Literais , nós usamos crases. Nós podemos injetar dados como expressões para criar String Literais, usando na expressão parentesis ({}) precedido de um sinal de dollar $. Veja a sintaxe abaixo.
+
+```js
+//Sintaxe
+`String literal text`
+`String literal text ${expressão}`
+```
+
+**Exemplo: 1**
+
+```js
+console.log(`The sum of 2 and 3 is 5`) // escrevendo dados estáticos
+let a = 2
+let b = 3
+console.log(`The sum of ${a} and ${b} is ${a + b}`) // injetando dados dinamicamente
+```
+
+**Exemplo:2**
+
+```js
+let primeiroNome = 'Asabeneh'
+let ultimoNome = 'Yetayeh'
+let pais = 'Finland'
+let cidade = 'Helsinki'
+let linguagem = 'JavaScript'
+let profissao = 'teacher'
+let idade = 250
+let nomeCompleto = primeiroNome + ' ' + ultimoNome
+
+let pessoaInfoUm = `I am ${nomeCompleto}. I am ${idade}. I live in ${pais}.` //ES6 - Método de interpolação de String
+let pesoaInfoDois = `I am ${nomeCompleto}. I live in ${cidade}, ${pais}. I am a ${profissao}. I teach ${linguagem}.`
+console.log(pessoaInfoUm)
+console.log(pesoaInfoDois)
+```
+
+```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.
+```
+
+Usando Literais ou método de interpolação de String, nós podemos adicionar expressões, que podem ser algum valor, ou alguma operação (comparação, aritimética, operador ternário).
+
+```js
+let a = 2
+let b = 3
+console.log(`${a} é maior que ${b}: ${a > b}`)
+```
+
+```sh
+2 é maior que 3: false
+```
+
+### String Métodos
+
+Tudo em JavaScript é um objeto. String é um tipo de dado primitivo, que significa que não podemos modificá-la uma vez criada. Um objeto String pode ter vários métodos. Existe diferentes métodos para strings que pode nos ajudar.
+
+1. *length*: O método *length* retorna o número de caracteres em uma string incluindo espaços vázios.
+
+**Exemplo:**
+
+```js
+let js = 'JavaScript'
+console.log(js.length) // 10
+let primeiroNome = 'Asabeneh'
+console.log(primeiroNome.length) // 8
+```
+
+2. *Acessando caracteres em uma string*: Nós podemos acessar cada caractere em uma string usando seu index. Em programação, a contagem começa em 0. O primeiro index de uma string é zero, e o último index é o length de uma string - 1.
+
+ 
+
+Vamos acessar diferentes caracteres em 'JavaScript' string.
+
+```js
+let string = 'JavaScript'
+let primeiraLetra = string[0]
+
+console.log(primeiraLetra) // J
+
+let segundaLetra = string[1] // a
+let terceiraLetra = string[2]
+let ultimaLetra = string[9]
+
+console.log(ultimaLetra) // t
+
+let ultimoIndex = string.length - 1
+
+console.log(ultimoIndex) // 9
+console.log(string[ultimoIndex]) // t
+```
+
+3. *toUpperCase()*: Este método muda a string para letras maiúsculas.
+
+```js
+let string = 'JavaScript'
+
+console.log(string.toUpperCase()) // JAVASCRIPT
+
+let primeiroNome = 'Asabeneh'
+
+console.log(primeiroNome.toUpperCase()) // ASABENEH
+
+let pais = 'Finland'
+
+console.log(país.toUpperCase()) // FINLAND
+```
+
+4. *toLowerCase()*: Este método muda a string para letras minúsculas.
+
+```js
+let string = 'JavasCript'
+
+console.log(string.toLowerCase()) // javascript
+
+let primeiroNome = 'Asabeneh'
+
+console.log(primeiroNome.toLowerCase()) // asabeneh
+
+let pais = 'Finland'
+
+console.log(pais.toLowerCase()) // finland
+```
+
+5. *substr()*: usando dois argumentos, o index de onde irá começar e o número de caracteres para retirar da string.
+
+```js
+let string = 'JavaScript'
+console.log(string.substr(4,6)) // Script
+
+let pais = 'Finland'
+console.log(país.substr(3, 4)) // land
+```
+
+6. *substring()*: Usando dois argumentos, o index de onde irá começar e o index para parar, mas esse não inclui o caractere no index de parada.
+
+```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 pais = 'Finland'
+
+console.log(país.substring(0, 3)) // Fin
+console.log(país.substring(3, 7)) // land
+console.log(país.substring(3)) // land
+```
+
+7. *split()*: O método split divide uma string em um lugar especifico e converte em um array.
+
+```js
+let string = '30 Days Of JavaScript'
+
+console.log(string.split()) // muda para um array -> ["30 Days Of JavaScript"]
+console.log(string.split(' ')) // separa em um array com espaço -> ["30", "Days", "Of", "JavaScript"]
+
+let primeiroNome = 'Asabeneh'
+
+console.log(primeiroNome.split()) // muda para um array - > ["Asabeneh"]
+console.log(primeiroNome.split('')) // separa em um array cada letra -> ["A", "s", "a", "b", "e", "n", "e", "h"]
+
+let pais = 'Finland, Sweden, Norway, Denmark, and Iceland'
+
+console.log(país.split(',')) // separa para um array com vírgula -> ["Finland", " Sweden", " Norway", " Denmark", " and Iceland"]
+console.log(país.split(', ')) // ["Finland", "Sweden", "Norway", "Denmark", "and Iceland"]
+```
+
+8. *trim()*: Remove espaços adicionais no início ou no final de uma string.
+
+```js
+let string = ' 30 Days Of JavaScript '
+
+console.log(string)
+console.log(string.trim(' '))
+
+let primeiroNome = ' Asabeneh '
+
+console.log(primeiroNome)
+console.log(primeiroNome.trim()) // ainda remove espaços no início e no fim da string
+```
+
+```sh
+ 30 Days Of JavasCript
+30 Days Of JavasCript
+ Asabeneh
+Asabeneh
+```
+
+9. *includes()*: Usando uma substring como argumento, e então verifica se o argumento exise na string. *includes()* retorna um boolean. Se uma substring existe na string, então retorna true, senão retornará false.
+
+```js
+let string = '30 Days Of JavaScript'
+
+console.log(string.includes('Days')) // true
+console.log(string.includes('days')) // false - é 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 pais = 'Finland'
+
+console.log(país.includes('fin')) // false
+console.log(país.includes('Fin')) // true
+console.log(país.includes('land')) // true
+console.log(país.includes('Land')) // false
+```
+
+10. *replace()*: Usando como parâmetro a antiga substring para uma nova substring.
+
+```js
+string.replace(antigaSubstring, novaSubstring)
+```
+
+```js
+let string = '30 Days Of JavaScript'
+console.log(string.replace('JavaScript', 'Python')) // 30 Days Of Python
+
+let pais = 'Finland'
+console.log(país.replace('Fin', 'Noman')) // Nomanland
+```
+11. *charAt()*: Usando um index e retorna o valor no index selecionado;
+
+```js
+string.charAt(index)
+```
+
+```js
+let string = '30 Days Of JavaScript'
+console.log(string.charAt(0)) // 3
+
+let ultimoIndex = string.length - 1
+console.log(string.charAt(ultimoIndex)) // t
+```
+
+12. *charCodeAt()*: Usando um index e retorna o código de caractere (número ASCII) do valor nesse index.
+
+```js
+string.charCodeAt(index)
+```
+
+```js
+let string = '30 Days Of JavaScript'
+console.log(string.charCodeAt(3)) // D ASCII número é 68
+
+let ultimoIndex = string.length - 1
+console.log(string.charCodeAt(ultimoIndex)) // t ASCII é 116
+
+```
+13. *indexOf()*: Usando uma substring e o mesmo existe em uma string retorna a primeira posição da substring, se não existe retornará -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()*: Usando uma substring e o mesmo existe em uma string retorna a última posição da substring, se não existe retornará -1
+
+```js
+//syntax
+string.lastIndexOf(substring)
+```
+
+```js
+let string = 'Eu amo JavaScript. Se você não ama JavaScript oque mais voce pode amar?'
+
+console.log(string.lastIndexOf('love')) // 66
+console.log(string.lastIndexOf('you')) // 56
+console.log(string.lastIndexOf('JavaScript')) // 35
+```
+
+15. *concat()*: Usando algumas substring e os adiciona (Join).
+
+```js
+string.concat(substring, substring, substring)
+```
+
+```js
+let string = '30'
+console.log(string.concat(" Days ", "Of", " JavaScript")) // 30 Days Of JavaScript
+
+let country = 'Fin'
+console.log(country.concat("land")) // Finland
+```
+
+16. *startsWith*: Usando uma substring como argumento, e verifica se a string começa com aquela substring específica. E retorna um boolean(true ou false).
+
+```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*: Usando uma substring como argumento, e verifica se a string termina com aquela substring específica. E retorna um boolean(true ou false).
+
+```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 pais = 'Finland'
+
+console.log(país.endsWith('land')) // true
+console.log(país.endsWith('fin')) // false
+console.log(país.endsWith('Fin')) // false
+```
+
+18. *search*: Usando uma substring como um argumento e retorna o index do primeiro resultado. O valor da pesquisa pode ser uma string ou uma expressão regular.
+
+```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*: Usando uma substring ou expressão regular como um argumento, e retorna um array se exite um resultado, se nao retorna null. Vamos ver como uma expressão regular se parece. Começa com / sinal e terminar com / sinal.
+
+```js
+let string = 'love'
+let patternOne = /love/ // sem nenhuma flag
+let patternTwo = /love/gi // g-significa procurar em todo o texto, i - case insensitive
+```
+
+Sintaxe
+
+```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.", grupo: undefined]
+```
+
+```js
+let pattern = /love/gi
+console.log(string.match(pattern)) // ["love", "love", "love"]
+```
+
+"Vamos extrair números de um texto usando uma expressão regular. Essa não é a seção de expressões regulares, não se assuste! Vamos cobrir expressões regulares mais tarde."
+
+```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+/
+
+// A letra 'd' com o caractere de escape significa 'd' não como uma letra normal, mas sim como um dígito.
+// O sinal '+' significa um ou mais números de dígitos,
+// Se houver a letra 'g' depois disso, significa global, pesquisar em todos os lugares.
+
+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()*: Um número como argumento e retorna uma versão repetida de uma string.
+
+```js
+string.repeat(n)
+```
+
+```js
+let string = 'love'
+console.log(string.repeat(10)) // lovelovelovelovelovelovelovelovelovelove
+```
+
+## Verificando Tipos de Dados e Casting
+
+### Verificando Tipos de Dados
+
+Para verificar o tipo de uma variável nós usamos o método _typeOf_.
+
+**Exemplo:**
+
+```js
+// Diferente tipos de dados javascript
+// vamos declarar diferentes tipos de dados
+
+let primeiroNome = 'Asabeneh' // string
+let ultimoNome = 'Yetayeh' // string
+let pais = 'Finland' // string
+let cidade = 'Helsinki' // string
+let idade = 250 // número, não é minha idade real, não se preocupe com isso
+let profissao // undefined, porque o valor não foi definido.
+
+console.log(typeof 'Asabeneh') // string
+console.log(typeof primeiroNome) // string
+console.log(typeof 10) // number
+console.log(typeof 3.14) // number
+console.log(typeof true) // boolean
+console.log(typeof false) // boolean
+console.log(typeof NaN) // number
+console.log(typeof profissao) // undefined
+console.log(typeof undefined) // undefined
+console.log(typeof null) // object
+```
+
+### Mudando Tipo de Dado (Casting)
+
+- Casting: Convertendo um tipo de dados para outro. Usamos _parseInt()_, _parseFloat()_, _Number()_, _+ sign_ +, _str()_
+ Quando fazemos operações aritméticas, os números em forma de string devem ser primeiro convertidos em inteiros ou floats, caso contrário, ocorre um erro.
+
+#### String para Int
+
+Podemos converter números em forma de string para um número. Qualquer número dentro de aspas é um número em forma de string. Um exemplo de número em forma de string: '10', '5', etc.
+Podemos converter uma string para um número usando os seguintes métodos:
+
+- parseInt()
+- Number()
+- Plus sign(+)
+
+```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
+```
+
+#### String para Float
+
+Nós podemos converter uma string float número para um número float. Qualquer número float entre aspas é uma string float número. Exemplo:
+'9.81', '3.14', '1.44', etc.
+Podemos converter string float número usando os seguintes métodos:
+
+- parseFloat()
+- Number()
+- Plus sign(+)
+
+```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
+```
+
+#### Float para Int
+
+Podemos converter float números para inteiro.
+Vamos usar o seguinte método para converter float para int.
+
+- parseInt()
+
+```js
+let num = 9.81
+let numInt = parseInt(num)
+
+console.log(numInt) // 9
+```
+
+🌕 Você é incrível. Você acabou de completar o dia 2 e está dois passos a frente no seu caminho para o sucesso. Agora faça alguns exercícios para seu cérebro e músculos.
+
+## 💻 Dia 2: Exercícios
+
+### Exercícios: Level 1
+
+1. Declare uma variável chamada desafio e atribua a ela um valor inicial **'30 Dias de JavaScript'**.
+2. Imprimir uma string no console do browser usando __console.log()__ .
+3. Imprimir o __length__ da string no console do browser usando o __console.log()__.
+4. Troque todos os caracteres da string para letras maiúsculas usando o método __toUpperCase()__.
+5. Troque todos os caracteres da string para letras minúsculas usando o método __toLowerCase()__.
+6. Retirar (Slice) a primeira letra da string usando os métodos __substr()__ ou __substring()__.
+7. Dividir a frase *Days Of JavaScript* de *30 Days Of JavaScript*.
+8. Verificar se a string contém a palavra __Script__ usando o método __includes()__.
+9. Separar a __string__ em um __array__ usando o método __split()__.
+10. Separar a string 30 Dias de JavaScript com espaços usando o método __split()__.
+11. "Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon" __split__ a string com vírgulas e mude-a para um array.
+12. Mude 30 Dias de JavaScript para 30 Dias de Python usando o método __replace()__.
+13. Qual é o caractere no index 15 em "30 Dias de JavaScript' string? Use o método __charAt()__.
+14. Qual é o código do caractere de J em "30 Dias de JavaScript" string usando o método __charCodeAt()__.
+15. Use __indexOf__ para determinar a posição da primeira ocorrência de __a__ em 30 Dias de JavaScript.
+16. Use __lastIndexOf__ para determinar a posição da última ocorrência de __a__ em 30 Dias de JavaScript.
+17. Use __indexOf__ para encontrar a posição da primeira ocorrência da palavra __because__ na seguinte frase:__'You cannot end a sentence with because because because is a conjunction'__.
+18. Use __lastIndexOf__ para encontrar a posição da última ocorrência da palavra __because__ na seguinte frase:__'You cannot end a sentence with because because because is a conjunction'__.
+19. Use __search__ para encontrar a posição da primeira ocorrência da palavra __because__ na seguinte frase:__'You cannot end a sentence with because because because is a conjunction'__.
+20. Use __trim()__ para remover qualquer espaço adicional no início e no final da string .E.g " 30 Dias de JavaScript ".
+21. Use __startsWith()__ com a string *30 Dias De JavaScript* e faça o resultado ser verdadeiro.
+22. Use __endsWith()__ com a string *30 Dias De JavaScript* e faça o resultado ser verdadeiro.
+23. Use __match()__ para encontrar todos os __a__'s em 30 Dias De JavaScript.
+24. Use __concat()__ para unir "30 Dias de" e "JavaScript" para uma única string, "30 Dias de JavaScript".
+25. Use __repeat()__ para imprimir 30 Dias De JavaScript 2 vezes.
+
+### Exercícios: Level 2
+
+1. Usando o console.log() imprimir a seguinte citação:
+ ```sh
+ "Não há exercício melhor para o coração que ir lá em baixo e levantar as pessoas" by John Holmes nos ensina a ajudar outras pessoas.
+ ```
+
+2. Usando o console.log() imprimir a seguinte citação de Madre Teresa:
+ ```sh
+ "O amor não é paternalista e a caridade não tem a ver com pena, tem a ver com amor. Caridade e amor são a mesma coisa – com a caridade você dá amor, então não dê apenas dinheiro, mas estenda sua mão."
+ ```
+
+3. Verificar se typeOf "10" é exatamente igual a 10. Se não, faça ser exatamente igual.
+4. Verificar se parseFloat("9.8) é igual a 10. Se não, faça ser exatamente igual com 10.
+5. Verificar se "ão" é encontrado em ambos algodão e jargão.
+6. _Espero que este curso não tenha muitos jargões_. Verifique se _jargões_ está na frase.
+7. Gerar um número aleatório entre incluindo 0 e 100.
+8. Gerar um número aleatório entre incluindo 50 e 100.
+9. Gerar um número aleatório entre incluindo 0 e 255.
+10. Acesse os caracteres da string "JavaScript" usando um número aleatório.
+11. Use console.log() e imprimir os caracteres no seguinte padrão.
+ ```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. Use __substr__ para retirar da frase __because because because__ da seguinte frase: __'You cannot end a sentence with because because because is a conjunction'__.
+
+### Exercícios: Level 3
+
+1. "Amor é a melhor coisa neste mundo. Alguns encontraram seu amor e alguns ainda estão procurando pelo seu amor." Contar o número de palavras __amor__ nesta frase.
+
+2. Use __match()__ para contar os números de todos os __because__ na seguinte frase: __'You cannot end a sentence with because because because is a conjunction'__.
+
+3. Limpar o seguinte texto e encontrar a palavra mais repetida (dica, use replace e expressões regulares)
+ ```js
+ const frase = " %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. Calcular o total anual de uma pessoa extraindo os números do seguinte texto. __"Ele recebe 5000 euros de salário por mês, 10000 euros de bônus anual, 15000 euros de cursos onlines por mês.'__.
+
+🎉 PARABÉNS ! 🎉
+
+[<< Dia 1](../readMe.md) | [Dia 3 >>](../Dia_03_Booleanos_Operadores_Data/dia_03_booleanos_operadores_data.md)
diff --git a/Portuguese/Dia_03_Booleanos_Operadores_Data/03_day_starter/index.html b/Portuguese/Dia_03_Booleanos_Operadores_Data/03_day_starter/index.html
new file mode 100644
index 000000000..2a8e6a80f
--- /dev/null
+++ b/Portuguese/Dia_03_Booleanos_Operadores_Data/03_day_starter/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+ 30DaysOfJavaScript: 03 Day
+
+
+
+
30DaysOfJavaScript:03 Day
+
Booleans, undefined, null, date object
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Portuguese/Dia_03_Booleanos_Operadores_Data/03_day_starter/scripts/main.js b/Portuguese/Dia_03_Booleanos_Operadores_Data/03_day_starter/scripts/main.js
new file mode 100644
index 000000000..77629084e
--- /dev/null
+++ b/Portuguese/Dia_03_Booleanos_Operadores_Data/03_day_starter/scripts/main.js
@@ -0,0 +1 @@
+// this is your main.js script
\ No newline at end of file
diff --git a/Portuguese/Dia_03_Booleanos_Operadores_Data/Dia_03_booleanos_operadores_data.md b/Portuguese/Dia_03_Booleanos_Operadores_Data/Dia_03_booleanos_operadores_data.md
new file mode 100644
index 000000000..ad61f3dea
--- /dev/null
+++ b/Portuguese/Dia_03_Booleanos_Operadores_Data/Dia_03_booleanos_operadores_data.md
@@ -0,0 +1,633 @@
+
+
30 Dias De JavaScript: Boleanos, Operadores e Data
+
+[<< Day 2](../Dia_02_Tipos_Dados/dia_02_tipos_dados.md) | [Day 4 >>](../04_Day_Conditionals/04_day_conditionals.md)
+
+
+
+- [📔 Day 3](#-day-3)
+ - [Booleans](#booleans)
+ - [Truthy values](#truthy-values)
+ - [Falsy values](#falsy-values)
+ - [Undefined](#undefined)
+ - [Null](#null)
+ - [Operators](#operators)
+ - [Assignment operators](#assignment-operators)
+ - [Arithmetic Operators](#arithmetic-operators)
+ - [Comparison Operators](#comparison-operators)
+ - [Logical Operators](#logical-operators)
+ - [Increment Operator](#increment-operator)
+ - [Decrement Operator](#decrement-operator)
+ - [Ternary Operators](#ternary-operators)
+ - [Operator Precedence](#operator-precedence)
+ - [Window Methods](#window-methods)
+ - [Window alert() method](#window-alert-method)
+ - [Window prompt() method](#window-prompt-method)
+ - [Window confirm() method](#window-confirm-method)
+ - [Date Object](#date-object)
+ - [Creating a time object](#creating-a-time-object)
+ - [Getting full year](#getting-full-year)
+ - [Getting month](#getting-month)
+ - [Getting date](#getting-date)
+ - [Getting day](#getting-day)
+ - [Getting hours](#getting-hours)
+ - [Getting minutes](#getting-minutes)
+ - [Getting seconds](#getting-seconds)
+ - [Getting time](#getting-time)
+ - [💻 Day 3: Exercises](#-day-3-exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
+
+# 📔 Day 3
+
+## Booleans
+
+A boolean data type represents one of the two values:_true_ or _false_. Boolean value is either true or false. The use of these data types will be clear when you start the comparison operator. Any comparisons return a boolean value which is either true or false.
+
+**Example: Boolean Values**
+
+```js
+let isLightOn = true
+let isRaining = false
+let isHungry = false
+let isMarried = true
+let truValue = 4 > 3 // true
+let falseValue = 4 < 3 // false
+```
+
+We agreed that boolean values are either true or false.
+
+### Truthy values
+
+- All numbers(positive and negative) are truthy except zero
+- All strings are truthy except an empty string ('')
+- The boolean true
+
+### Falsy values
+
+- 0
+- 0n
+- null
+- undefined
+- NaN
+- the boolean false
+- '', "", ``, empty string
+
+It is good to remember those truthy values and falsy values. In later section, we will use them with conditions to make decisions.
+
+## Undefined
+
+If we declare a variable and if we do not assign a value, the value will be undefined. In addition to this, if a function is not returning the value, it will be undefined.
+
+```js
+let firstName
+console.log(firstName) //not defined, because it is not assigned to a value yet
+```
+
+## Null
+
+```js
+let empty = null
+console.log(empty) // -> null , means no value
+```
+
+## Operators
+
+### Assignment operators
+
+An equal sign in JavaScript is an assignment operator. It uses to assign a variable.
+
+```js
+let firstName = 'Asabeneh'
+let country = 'Finland'
+```
+
+Assignment Operators
+
+
+
+### Arithmetic Operators
+
+Arithmetic operators are mathematical operators.
+
+- Addition(+): a + b
+- Subtraction(-): a - b
+- Multiplication(*): a * b
+- Division(/): a / b
+- Modulus(%): a % b
+- Exponential(**): a ** b
+
+```js
+let numOne = 4
+let numTwo = 3
+let sum = numOne + numTwo
+let diff = numOne - numTwo
+let mult = numOne * numTwo
+let div = numOne / numTwo
+let remainder = numOne % numTwo
+let powerOf = numOne ** numTwo
+
+console.log(sum, diff, mult, div, remainder, powerOf) // 7,1,12,1.33,1, 64
+
+```
+
+```js
+const PI = 3.14
+let radius = 100 // length in meter
+
+//Let us calculate area of a circle
+const areaOfCircle = PI * radius * radius
+console.log(areaOfCircle) // 314 m
+
+
+const gravity = 9.81 // in m/s2
+let mass = 72 // in Kilogram
+
+// Let us calculate weight of an object
+const weight = mass * gravity
+console.log(weight) // 706.32 N(Newton)
+
+const boilingPoint = 100 // temperature in oC, boiling point of water
+const bodyTemp = 37 // body temperature in oC
+
+
+// Concatenating string with numbers using string interpolation
+/*
+ The boiling point of water is 100 oC.
+ Human body temperature is 37 oC.
+ The gravity of earth is 9.81 m/s2.
+ */
+console.log(
+ `The boiling point of water is ${boilingPoint} oC.\nHuman body temperature is ${bodyTemp} oC.\nThe gravity of earth is ${gravity} m / s2.`
+)
+```
+
+### Comparison Operators
+
+In programming we compare values, we use comparison operators to compare two values. We check if a value is greater or less or equal to other value.
+
+
+**Example: Comparison Operators**
+
+```js
+console.log(3 > 2) // true, because 3 is greater than 2
+console.log(3 >= 2) // true, because 3 is greater than 2
+console.log(3 < 2) // false, because 3 is greater than 2
+console.log(2 < 3) // true, because 2 is less than 3
+console.log(2 <= 3) // true, because 2 is less than 3
+console.log(3 == 2) // false, because 3 is not equal to 2
+console.log(3 != 2) // true, because 3 is not equal to 2
+console.log(3 == '3') // true, compare only value
+console.log(3 === '3') // false, compare both value and data type
+console.log(3 !== '3') // true, compare both value and data type
+console.log(3 != 3) // false, compare only value
+console.log(3 !== 3) // false, compare both value and data type
+console.log(0 == false) // true, equivalent
+console.log(0 === false) // false, not exactly the same
+console.log(0 == '') // true, equivalent
+console.log(0 == ' ') // true, equivalent
+console.log(0 === '') // false, not exactly the same
+console.log(1 == true) // true, equivalent
+console.log(1 === true) // false, not exactly the same
+console.log(undefined == null) // true
+console.log(undefined === null) // false
+console.log(NaN == NaN) // false, not equal
+console.log(NaN === NaN) // false
+console.log(typeof NaN) // number
+
+console.log('mango'.length == 'avocado'.length) // false
+console.log('mango'.length != 'avocado'.length) // true
+console.log('mango'.length < 'avocado'.length) // true
+console.log('milk'.length == 'meat'.length) // true
+console.log('milk'.length != 'meat'.length) // false
+console.log('tomato'.length == 'potato'.length) // true
+console.log('python'.length > 'dragon'.length) // false
+```
+
+Try to understand the above comparisons with some logic. Remembering without any logic might be difficult.
+JavaScript is somehow a wired kind of programming language. JavaScript code run and give you a result but unless you are good at it may not be the desired result.
+
+As rule of thumb, if a value is not true with == it will not be equal with ===. Using === is safer than using ==. The following [link](https://dorey.github.io/JavaScript-Equality-Table/) has an exhaustive list of comparison of data types.
+
+### Logical Operators
+
+The following symbols are the common logical operators:
+&&(ampersand) , ||(pipe) and !(negation).
+The && operator gets true only if the two operands are true.
+The || operator gets true either of the operand is true.
+The ! operator negates true to false and false to true.
+
+```js
+// && ampersand operator example
+
+const check = 4 > 3 && 10 > 5 // true && true -> true
+const check = 4 > 3 && 10 < 5 // true && false -> false
+const check = 4 < 3 && 10 < 5 // false && false -> false
+
+// || pipe or operator, example
+
+const check = 4 > 3 || 10 > 5 // true || true -> true
+const check = 4 > 3 || 10 < 5 // true || false -> true
+const check = 4 < 3 || 10 < 5 // false || false -> false
+
+//! Negation examples
+
+let check = 4 > 3 // true
+let check = !(4 > 3) // false
+let isLightOn = true
+let isLightOff = !isLightOn // false
+let isMarried = !false // true
+```
+
+### Increment Operator
+
+In JavaScript we use the increment operator to increase a value stored in a variable. The increment could be pre or post increment. Let us see each of them:
+
+1. Pre-increment
+
+```js
+let count = 0
+console.log(++count) // 1
+console.log(count) // 1
+```
+
+1. Post-increment
+
+```js
+let count = 0
+console.log(count++) // 0
+console.log(count) // 1
+```
+
+We use most of the time post-increment. At least you should remember how to use post-increment operator.
+
+### Decrement Operator
+
+In JavaScript we use the decrement operator to decrease a value stored in a variable. The decrement could be pre or post decrement. Let us see each of them:
+
+1. Pre-decrement
+
+```js
+let count = 0
+console.log(--count) // -1
+console.log(count) // -1
+```
+
+2. Post-decrement
+
+```js
+let count = 0
+console.log(count--) // 0
+console.log(count) // -1
+```
+
+### Ternary Operators
+
+Ternary operator allows to write a condition.
+Another way to write conditionals is using ternary operators. Look at the following examples:
+
+```js
+let isRaining = true
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+isRaining = false
+
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+```
+
+```sh
+You need a rain coat.
+No need for a rain coat.
+```
+
+```js
+let number = 5
+number > 0
+ ? console.log(`${number} is a positive number`)
+ : console.log(`${number} is a negative number`)
+number = -5
+
+number > 0
+ ? console.log(`${number} is a positive number`)
+ : console.log(`${number} is a negative number`)
+```
+
+```sh
+5 is a positive number
+-5 is a negative number
+```
+
+### Operator Precedence
+
+I would like to recommend you to read about operator precedence from this [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)
+
+## Window Methods
+
+### Window alert() method
+
+As you have seen at very beginning alert() method displays an alert box with a specified message and an OK button. It is a builtin method and it takes on argument.
+
+```js
+alert(message)
+```
+
+```js
+alert('Welcome to 30DaysOfJavaScript')
+```
+
+Do not use too much alert because it is destructing and annoying, use it just to test.
+
+### Window prompt() method
+
+The window prompt methods display a prompt box with an input on your browser to take input values and the input data can be stored in a variable. The prompt() method takes two arguments. The second argument is optional.
+
+```js
+prompt('required text', 'optional text')
+```
+
+```js
+let number = prompt('Enter number', 'number goes here')
+console.log(number)
+```
+
+### Window confirm() method
+
+The confirm() method displays a dialog box with a specified message, along with an OK and a Cancel button.
+A confirm box is often used to ask permission from a user to execute something. Window confirm() takes a string as an argument.
+Clicking the OK yields true value, whereas clicking the Cancel button yields false value.
+
+```js
+const agree = confirm('Are you sure you like to delete? ')
+console.log(agree) // result will be true or false based on what you click on the dialog box
+```
+
+These are not all the window methods we will have a separate section to go deep into window methods.
+
+## Date Object
+
+Time is an important thing. We like to know the time a certain activity or event. In JavaScript current time and date is created using JavaScript Date Object. The object we create using Date object provides many methods to work with date and time.The methods we use to get date and time information from a date object values are started with a word _get_ because it provide the information.
+_getFullYear(), getMonth(), getDate(), getDay(), getHours(), getMinutes, getSeconds(), getMilliseconds(), getTime(), getDay()_
+
+
+
+### Creating a time object
+
+Once we create time object. The time object will provide information about time. Let us create a time object
+
+```js
+const now = new Date()
+console.log(now) // Sat Jan 04 2020 00:56:41 GMT+0200 (Eastern European Standard Time)
+```
+
+We have created a time object and we can access any date time information from the object using the get methods we have mentioned on the table.
+
+### Getting full year
+
+Let's extract or get the full year from a time object.
+
+```js
+const now = new Date()
+console.log(now.getFullYear()) // 2020
+```
+
+### Getting month
+
+Let's extract or get the month from a time object.
+
+```js
+const now = new Date()
+console.log(now.getMonth()) // 0, because the month is January, month(0-11)
+```
+
+### Getting date
+
+Let's extract or get the date of the month from a time object.
+
+```js
+const now = new Date()
+console.log(now.getDate()) // 4, because the day of the month is 4th, day(1-31)
+```
+
+### Getting day
+
+Let's extract or get the day of the week from a time object.
+
+```js
+const now = new Date()
+console.log(now.getDay()) // 6, because the day is Saturday which is the 7th day
+// Sunday is 0, Monday is 1 and Saturday is 6
+// Getting the weekday as a number (0-6)
+```
+
+### Getting hours
+
+Let's extract or get the hours from a time object.
+
+```js
+const now = new Date()
+console.log(now.getHours()) // 0, because the time is 00:56:41
+```
+
+### Getting minutes
+
+Let's extract or get the minutes from a time object.
+
+```js
+const now = new Date()
+console.log(now.getMinutes()) // 56, because the time is 00:56:41
+```
+
+### Getting seconds
+
+Let's extract or get the seconds from a time object.
+
+```js
+const now = new Date()
+console.log(now.getSeconds()) // 41, because the time is 00:56:41
+```
+
+### Getting time
+
+This method give time in milliseconds starting from January 1, 1970. It is also know as Unix time. We can get the unix time in two ways:
+
+1. Using _getTime()_
+
+```js
+const now = new Date() //
+console.log(now.getTime()) // 1578092201341, this is the number of seconds passed from January 1, 1970 to January 4, 2020 00:56:41
+```
+
+1. Using _Date.now()_
+
+```js
+const allSeconds = Date.now() //
+console.log(allSeconds) // 1578092201341, this is the number of seconds passed from January 1, 1970 to January 4, 2020 00:56:41
+
+const timeInSeconds = new Date().getTime()
+console.log(allSeconds == timeInSeconds) // true
+```
+
+Let us format these values to a human readable time format.
+**Example:**
+
+```js
+const now = new Date()
+const year = now.getFullYear() // return year
+const month = now.getMonth() + 1 // return month(0 - 11)
+const date = now.getDate() // return date (1 - 31)
+const hours = now.getHours() // return number (0 - 23)
+const minutes = now.getMinutes() // return number (0 -59)
+
+console.log(`${date}/${month}/${year} ${hours}:${minutes}`) // 4/1/2020 0:56
+```
+
+🌕 You have boundless energy. You have just completed day 3 challenges and you are three steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
+
+## 💻 Day 3: Exercises
+
+### Exercises: Level 1
+
+1. Declare firstName, lastName, country, city, age, isMarried, year variable and assign value to it and use the typeof operator to check different data types.
+2. Check if type of '10' is equal to 10
+3. Check if parseInt('9.8') is equal to 10
+4. Boolean value is either true or false.
+ 1. Write three JavaScript statement which provide truthy value.
+ 2. Write three JavaScript statement which provide falsy value.
+
+5. Figure out the result of the following comparison expression first without using console.log(). After you decide the result confirm it using console.log()
+ 1. 4 > 3
+ 2. 4 >= 3
+ 3. 4 < 3
+ 4. 4 <= 3
+ 5. 4 == 4
+ 6. 4 === 4
+ 7. 4 != 4
+ 8. 4 !== 4
+ 9. 4 != '4'
+ 10. 4 == '4'
+ 11. 4 === '4'
+ 12. Find the length of python and jargon and make a falsy comparison statement.
+
+6. Figure out the result of the following expressions first without using console.log(). After you decide the result confirm it by using console.log()
+ 1. 4 > 3 && 10 < 12
+ 2. 4 > 3 && 10 > 12
+ 3. 4 > 3 || 10 < 12
+ 4. 4 > 3 || 10 > 12
+ 5. !(4 > 3)
+ 6. !(4 < 3)
+ 7. !(false)
+ 8. !(4 > 3 && 10 < 12)
+ 9. !(4 > 3 && 10 > 12)
+ 10. !(4 === '4')
+ 11. There is no 'on' in both dragon and python
+
+7. Use the Date object to do the following activities
+ 1. What is the year today?
+ 2. What is the month today as a number?
+ 3. What is the date today?
+ 4. What is the day today as a number?
+ 5. What is the hours now?
+ 6. What is the minutes now?
+ 7. Find out the numbers of seconds elapsed from January 1, 1970 to now.
+
+### Exercises: Level 2
+
+1. Write a script that prompt the user to enter base and height of the triangle and calculate an area of a triangle (area = 0.5 x b x h).
+
+ ```sh
+ Enter base: 20
+ Enter height: 10
+ The area of the triangle is 100
+ ```
+
+1. Write a script that prompt the user to enter side a, side b, and side c of the triangle and and calculate the perimeter of triangle (perimeter = a + b + c)
+
+ ```sh
+ Enter side a: 5
+ Enter side b: 4
+ Enter side c: 3
+ The perimeter of the triangle is 12
+ ```
+
+1. Get length and width using prompt and calculate an area of rectangle (area = length x width and the perimeter of rectangle (perimeter = 2 x (length + width))
+1. Get radius using prompt and calculate the area of a circle (area = pi x r x r) and circumference of a circle(c = 2 x pi x r) where pi = 3.14.
+1. Calculate the slope, x-intercept and y-intercept of y = 2x -2
+1. Slope is m = (y2-y1)/(x2-x1). Find the slope between point (2, 2) and point(6,10)
+1. Compare the slope of above two questions.
+1. Calculate the value of y (y = x2 + 6x + 9). Try to use different x values and figure out at what x value y is 0.
+1. Writ a script that prompt a user to enter hours and rate per hour. Calculate pay of the person?
+
+ ```sh
+ Enter hours: 40
+ Enter rate per hour: 28
+ Your weekly earning is 1120
+ ```
+
+1. If the length of your name is greater than 7 say, your name is long else say your name is short.
+1. Compare your first name length and your family name length and you should get this output.
+
+ ```js
+ let firstName = 'Asabeneh'
+ let lastName = 'Yetayeh'
+ ```
+
+ ```sh
+ Your first name, Asabeneh is longer than your family name, Yetayeh
+ ```
+
+1. Declare two variables _myAge_ and _yourAge_ and assign them initial values and myAge and yourAge.
+
+ ```js
+ let myAge = 250
+ let yourAge = 25
+ ```
+
+ ```sh
+ I am 225 years older than you.
+ ```
+
+1. Using prompt get the year the user was born and if the user is 18 or above allow the user to drive if not tell the user to wait a certain amount of years.
+
+ ```sh
+
+ Enter birth year: 1995
+ You are 25. You are old enough to drive
+
+ Enter birth year: 2005
+ You are 15. You will be allowed to drive after 3 years.
+ ```
+
+1. Write a script that prompt the user to enter number of years. Calculate the number of seconds a person can live. Assume some one lives just hundred years
+
+ ```sh
+ Enter number of years you live: 100
+ You lived 3153600000 seconds.
+ ```
+
+1. Create a human readable time format using the Date time object
+ 1. YYYY-MM-DD HH:mm
+ 2. DD-MM-YYYY HH:mm
+ 3. DD/MM/YYYY HH:mm
+
+### Exercises: Level 3
+
+1. Create a human readable time format using the Date time object. The hour and the minute should be all the time two digits(7 hours should be 07 and 5 minutes should be 05 )
+ 1. YYY-MM-DD HH:mm eg. 20120-01-02 07:05
+
+[<< Dia 2](../Dia_02_Tipos_Dados/dia_02_tipos_dados.md) | [Dia 4 >>](../04_Day_Conditionals/04_day_conditionals.md)
diff --git a/Portuguese/readMe.md b/Portuguese/readMe.md
new file mode 100644
index 000000000..f65cc97ce
--- /dev/null
+++ b/Portuguese/readMe.md
@@ -0,0 +1,674 @@
+# 30 Dias de JavaScript
+
+| # Dia | Tópicos |
+| ----- | :-------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 01 | [Introdução](./readMe.md) |
+| 02 | [Tipos de Dados](./02_Day_Data_types/02_day_data_types.md) |
+| 03 | [Booleanos, Operadores, Data](./03_Day_Booleans_operators_date/03_booleans_operators_date.md) |
+| 04 | [Condicionais](./04_Day_Conditionals/04_day_conditionals.md) |
+| 05 | [Arrays](./05_Day_Arrays/05_day_arrays.md) |
+| 06 | [Loops](./06_Day_Loops/06_day_loops.md) |
+| 07 | [Funções](./07_Day_Functions/07_day_functions.md) |
+| 08 | [Objetos](./08_Day_Objects/08_day_objects.md) |
+| 09 | [Higher Order Functions](./09_Day_Higher_order_functions/09_day_higher_order_functions.md) |
+| 10 | [Sets and Maps](./10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md) |
+| 11 | [Destructuring and Spreading](./11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md) |
+| 12 | [Expressões Regulares](./12_Day_Regular_expressions/12_day_regular_expressions.md) |
+| 13 | [Método Console Objeto](./13_Day_Console_object_methods/13_day_console_object_methods.md) |
+| 14 | [Tratamento de Errors](./14_Day_Error_handling/14_day_error_handling.md) |
+| 15 | [Classes](./15_Day_Classes/15_day_classes.md) |
+| 16 | [JSON](./16_Day_JSON/16_day_json.md) |
+| 17 | [Armazenamento na Web](./17_Day_Web_storages/17_day_web_storages.md) |
+| 18 | [Promises](./18_Day_Promises/18_day_promises.md) |
+| 19 | [Closure](./19_Day_Closures/19_day_closures.md) |
+| 20 | [Escrevendo Código Limpo](./20_Day_Writing_clean_codes/20_day_writing_clean_codes.md) |
+| 21 | [DOM](./21_Day_DOM/21_day_dom.md) |
+| 22 | [Manipulando DOM Objetos](./22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md) |
+| 23 | [Event Listeners](./23_Day_Event_listeners/23_day_event_listeners.md) |
+| 24 | [Mini Projeto: Sistema Solar](./24_Day_Project_solar_system/24_day_project_solar_system.md) |
+| 25 | [Mini Projeto: Visualização de Dados de Paises do mundo](./25_Day_World_countries_data_visualization_1/25_day_world_countries_data_visualization_1.md) |
+| 26 | [Mini Projeto: Visualização de Dados de Paises do mundo 2](./26_Day_World_countries_data_visualization_2/26_day_world_countries_data_visualization_2.md) |
+| 27 | [Mini Projeto: Portfólio](./27_Day_Mini_project_portfolio/27_day_mini_project_portfolio.md) |
+| 28 | [Mini Projeto: Leaderboard](./28_Day_Mini_project_leaderboard/28_day_mini_project_leaderboard.md) |
+| 29 | [Mini Projeto: Caracteres Animados](./29_Day_Mini_project_animating_characters/29_day_mini_project_animating_characters.md) |
+| 30 | [Projetos Finais](./30_Day_Mini_project_final/30_day_mini_project_final.md) |
+
+🧡🧡🧡 HAPPY CODING 🧡🧡🧡
+
+
+Dê suporte ao Autor para criar mais materiais educacionais
+
+
+
+
+[Dia 2 >>](./02_Day_Data_types/02_day_data_types.md)
+
+
+
+- [30 dias de JavaScript](#30-dias-de-javascript)
+- [📔 Dia 1](#-dia-1)
+ - [Introdução](#introdução)
+ - [Requisitos](#requisitos)
+ - [Setup](#setup)
+ - [Instalação Node.js](#instalação-nodejs)
+ - [Navegador](#navegador)
+ - [Instalando Google Chrome](#instalando-google-chrome)
+ - [Abrindo o Google Chrome Console](#abrindo-o-google-chrome-console)
+ - [Escrevendo Código no console do Navegador](#escrevendo-código-no-console-do-navegador)
+ - [Console.log](#consolelog)
+ - [Console.log com Múltiplos Argumentos](#console.log-com-múltiplos-argumentos)
+ - [Comentários](#comentários)
+ - [Sintaxe](#sintaxe)
+ - [Aritimética](#aritimética)
+ - [Editor de Código](#editor-de-código)
+ - [Instalando o Visual Studio Code](#instalando-o-visual-studio-code)
+ - [Como usar o Visual Studio Code](#como-usar-o-visual-studio-code)
+ - [Adicionando JavaScript Para uma Página na Web ](#adicionando-javaScript-para-uma-página-na-web )
+ - [Script em Linha](#inline-script)
+ - [Script Interno](#script-interno)
+ - [Script Externo](#script-externo)
+ - [Múltiplos Scripts Externos](#múltiplos-scripts-externos)
+ - [Introdução a tipo de Dados](#introdução-a-tipo-de-dados)
+ - [Números](#números)
+ - [Strings](#strings)
+ - [Booleanos](#booleans)
+ - [Undefined](#undefined)
+ - [Null](#null)
+ - [Verificando Tipos de Dados](#verificando-tipos-de-dados)
+ - [Comentários novamente](#comentários-novamente)
+ - [Variáveis](#variáveis)
+- [💻 Dia 1: Exercícios](#-dia-1-exercícios)
+
+# 📔 Dia 1
+
+## Introdução
+
+**Parabéns** Em decidir de participar do desafio 30DaysOfJavaScript. Neste desafio você aprenderá tudo que precisa para ser um programador JavaScript, e em general, todo o conceito de programação. No fim do desafio voce estará adquirindo o Certificado de conclusão do desafio 30DaysOfJavaScript. Em caso de precisar de ajuda ou se preferir ajudar outros você pode entrar no [Grupo Telegram](https://t.me/ThirtyDaysOfJavaScript).
+
+**30DaysOfJavaScript** desafio é um guia tanto para iniciantes e Avançados JavaScript Desenvolvedores, Bem vindo ao JavaScript. JavaScript é a linguagem da internet. Eu me divirto em usar e ensinar JavaScript e eu acredito que voce fará tambem.
+
+Neste passo a passo do desafio JavaScript, você aprenderá JavaScript, a mais popular linguagem de programação da história da humanindade.
+JavaScript é usado **_para adicionar interatividade aos websites, desenvolvimento de mobile apps, desktop aplicações, jogos_** e nos dias de hoje JavaScript pode ser usado para **_machine learning_** e **_AI_**.
+**_JavaScript (JS)_** Teve um aumento na popularidade nos últimos anos e segue como a linguagem de programação líder por seis anos consecutivos e é a linguagem de programação mais usada no GitHub
+
+## Requisitos
+
+Sem conhecimentos prévios de programação é exigido para seguir este desafio. Precisará apenas:
+1. Motivação
+2. Um computador
+3. Internet
+4. Um navegador
+5. Um editor de Código
+
+## Setup
+
+Eu acredito que voce tem a motivação e o forte desejo de ser um desenvolvedor, um computador e internet. Se voce tem isso, então você tem tudo para iniciar.
+
+## Instalação Node.js
+
+Você pode não precisar do Node.js agora mas você precisará mais tarde. Instalação do [node.js](https://nodejs.org/en/).
+
+
+
+Depois do download click duplo no ícone e intalar
+
+
+
+Nós podemos verificar se o Node está instalador na nossa máquina local abrindo nosso terminal do dispositivo ou prompt de comando.
+
+```sh
+asabeneh $ node -v
+v12.14.0
+```
+
+Enquanto fazia este tutorial eu estava usando a versão 12.14.0 do Node, mas agora a recomendada versão do Node.js para dowload é v14.17.6, pelo tempo que você usar este material pode haver versão mais atual do Node.js.
+
+### Navegador
+
+Existe muitos navegadores por ai, Entento, Eu fortemente recomento o Google Chrome.
+
+#### Instalando Google Chrome
+
+Instalar o [Google Chrome](https://www.google.com.br/chrome/) se você não tem um ainda. Nós podemos escrever um pequeno código de JavaScript no console do browser, mas nós não usamos o console do navegador para desenvolver aplicações.
+
+
+
+#### Abrindo o Google Chrome Console
+
+Você pode abrir o Google Chrome console por um ou outro clicando nos 3 pontos no topo do lado direito do navegador, selecionando _Mais ferramentas -> Ferramenta para desenvolvedores ou usando o atalho do teclado. Eu prefiro os atalhos.
+
+
+
+Para abrir o console do Chrome usando o atalho do teclado.
+
+```sh
+Mac
+Command+Option+J
+
+Windows/Linux:
+Ctl+Shift+J
+```
+
+
+
+Depois de você abrir o console do Google Chrome, tente explorar os botões marcados. Nós vamos passar a maior parte do tempo no Console. O Console é o lugar onde vai seu código de JavaScript. O Console do Google Chrome V8 engine muda seu codigo de JavaScript para código de máquina.
+Vamos escrever códigos de JavaScript no Google Chome console:
+
+
+
+#### Escrevendo Código no console do Navegador
+
+Nós podemos escrever qualquer código de JavaScript no console do Google Chrome ou qualquer outro console de navegador, para este desafio, nós vamos focar no Console do Google Chrome. Abra o Console usando:
+
+```sh
+Mac
+Command+Option+I
+
+Windows:
+Ctl+Shift+I
+```
+
+##### Console.log
+
+Para escrever nosso primeiro código em JavaScript, vamos usar uma função built-it **console.log()**. Nós passamos um argumento como dados de input, e a função mostra o output. Nós passamos `'Olá, Mundo!'` como dados de input ou argumento na função console.log().
+
+```js
+console.log('Olá, Mundo!')
+```
+
+##### Console.log com Múltiplos Argumentos
+
+A funçao **`console.log()`** pode receber múltiplos parâmetros separados por vírgulas. A sintaxe é similar ao seguinte modo:**`console.log(param1, param2, param3)`**
+
+
+
+```js
+console.log('Olá', 'Mundo', '!')
+console.log('Feliz', 'Ano', 'Novo', 2020)
+console.log('Bem vindo', 'aos', 30, 'Dias', 'de', 'JavaScript')
+```
+
+Como você pode ver pelo trecho de código acima, _`console.log()`_ pode receber múltiplos argumentos.
+
+Parabéns! Você escreveu seu primeiro código de JavaScript usando _`console.log()`_.
+
+##### Comentários
+
+Nós podemos adicionar comentários para nosso código. Comentários são importantes para facilitar a leitura do código e deixar observações. O JavaScript não executa as partes com comentário no nosso código. No JavaScript, qualquer linha de texto começando com // é um comentário, e tudo anexo como isto `//` tambem é um comentário.
+
+**Exemplo: Comentário de linha única**
+
+```js
+// Este é o primeiro comentário
+// Este é o segundo comentário
+// Eu sou um comentário de linha única
+```
+
+**Exemplo: Comentários Várias Linhas**
+
+```js
+/*
+ Isto é um comentário de várias linhas
+ Várias linhas de comentários.
+ JavaScript é a Linguagem da Web
+ */
+```
+##### Sintaxe
+
+Linguagens de programação são similares com a linguagem humana. Portugês ou qualquer outra linguagem usa palavras, frases, orações, períodos, e outras mais para criar uma mensagem com significado. A definição em Português de sintaxe é _ Estrutura essencial para que frases, orações e períodos façam sentido e sejam de fácil compreensão por parte do leitor_. A definição técnica é a estrutura de declarações em uma linguagem de computador. Linguagens de programação tem sintaxes. JavaScript é uma linguagem de programação como outras linguagens de programação tem sua própria sintaxe. Se nós nao escrevermos uma sintaxe que JavaScript entenda, diferentes tipos de errors aparecerá. Nós iremos explorar diferentes tipos de errors no JavaScript depois. Por enquanto, vamos ver sintaxes de errors.
+
+
+
+Eu fiz uma confusão proposital. Como resultado, criou vários errors. Na realidade, a sintaxe é muito informativa. Informa quais tipos de errors foi feito. lendo as mensagens do feedback de error, nós podemos corrigir a sintaxe e resolver o problema. O processo de identificar e remover errors de um programa é chamado de Debugging. Vamos resolver os errors:
+
+```js
+console.log('Olá, Mundo!')
+console.log('Olá, Mundo!')
+```
+
+Até agora, nós vimos como exibir texto usando o _`console.log()`_. Se estamos imprimindo texto ou string usando _`console.log()`_, o texto tem que estar dentro de uma aspa simples, aspas duplas, ou crase.
+
+**Exemplo:**
+
+```js
+console.log('Olá, Mundo!')
+console.log("Olá, Mundo!")
+console.log(`Hello, World!`)
+```
+
+#### Aritimética
+
+Agora, vamos praticar escrevendo mais códigos JavaScript usando _`console.log()`_ no console do Google Chrome para números e tipos de dados.
+Em adição ao texto, nós podemos tamem fazer calculos matemáticos usando javaSCript. Vamos fazer calculos simples a seguir.
+É possivel escrever códigos JavaScript no console do Google Chome diretamente sem o função **_`console.log()`_** Entretanto, está incluso nesta introdução porque maior parte deste desafio pode ocorrer no editor de texto onde o uso de funcões pode ser mantario. Você pode brincar diretamente com ins
+
+
+
+```js
+console.log(2 + 3) // Adição
+console.log(3 - 2) // Subtração
+console.log(2 * 3) // Muiltiplição
+console.log(3 / 2) // Divisão
+console.log(3 % 2) // Modulo - Resto da divisão
+console.log(3 ** 2) // Exponenciação 3 ** 2 == 3 * 3
+```
+
+### Editor de Código
+
+Nós podemos escrever nosso código no console do navegador. mas isso nao é usado para grandes projetos. No anbiente real de trabalho, desenvolvedores usam diferentes editores para escrever seus códigos. Neste desafio 30 dias de JavaScript, nós iremos utilizar o Visual Studio Code.
+
+#### Instalando o Visual Studio Code
+
+Visual Studio Code é editor de texto open-source muito popular. Eu poderia recomendar o [download Visual Studio Code](https://code.visualstudio.com/), mas se você está familiarizado com outro editor, sinta livre para seguir oque você tem.
+
+
+
+Se você instalou o Visual Studio Code, Vamos começar usando-o.
+
+#### Como Usar o Visual Studio Code
+
+Abra o Visual Studio Code clicando duas vezes com o mouse no ícone. Quando abrir, você terá esta interface. Tente interagir com os ícones rotulados.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Adicionando JavaScript Para uma Página na Web
+
+JavaScript pode ser adicionado para uma página na internet em três diferentes maneiras:
+
+- **_Script em linha_**
+- **_Script Interno_**
+- **_Script Externo_**
+- **_Múltiplos Scripts Externos_**
+
+As diferentes sessões mostra diferentes maneiras de adicionar códigos JavaScript para sua página na web.
+
+### Inline Script
+
+Crie uma pasta do projeto no seu desktop ou em qualquer localização, nomeie de 30DaysOfJS e crie um **_`index.html`_** documento na sua pasta do projeto.
+Então copie os seguintes códigos e abra-o no navegador, por exemplo [Chrome](https://www.google.com/chrome/).
+
+
+```html
+
+
+
+ 30DaysOfScript: Script em linha
+
+
+
+
+
+```
+Agora, você escreveu seu primeiro script em linha. Nós podemos criar uma mensagem pop up usando o _`alert()`_ função built-it
+
+### Script Interno
+
+O script interno pode ser escrito no _`head`_ ou _`body`_, mas é preferível colocar no body do documento HTML.
+
+```html
+
+
+
+ 30DaysOfScript: Script Interno
+
+
+
+
+```
+
+Isto é como nós escrevemos scripts internos na maioria das vezes. Escrevemos o código de JavaScript na sessão body é a mais preferida opção. Abra o console do navegador e veja o output do `console.log()`.
+
+```html
+
+
+
+ 30DaysOfScript: Internal Script
+
+
+
+
+
+
+```
+
+Abra o console do navegador e veja o output do `console.log()`.
+
+
+
+### Script Externo
+
+Similar com o script interno, o link do script externo pode estar no header ou body, mas é mais indicado colocar no body do documento.
+Primeiro, nós podemos criar scripts externos de JavaScript com a .js extensão. Todos os arquivos terminados com a .js extensão são JavaScript documentos. Crie uma pasta nomeada Introdução.js dentro do diretório do projeto e escreva o seguinte código e copie o link do arquivo .js no bottom do body.
+
+```js
+console.log('Welcome to 30DaysOfJavaScript')
+```
+
+Scripts Externo no _head_:
+
+```html
+
+
+
+ 30DaysOfJavaScript: Script Externo
+
+
+
+
+```
+
+Scripts Externo no _body_:
+
+```html
+
+
+
+ 30DaysOfJavaScript: Scripts Externo
+
+
+
+
+
+
+
+
+
+```
+
+Abra o console do navegador para ver o output do `console.log()`.
+
+### Múltiplos Scripts Externos
+
+Nós tambem podemos colocar o link de vários arquivos externos de JavaScript em uma página web.
+Crie um `helloworld.js` documento dentro da pasta 30DaysOfJS e escreva o seguinte código.
+
+```js
+console.log('Olá, Mundo!')
+```
+
+```html
+
+
+
+ Múltiplos Scripts Externo
+
+
+
+
+
+
+```
+
+_Seu arquivo main.js deve estar abaixo de todos os outros scripts_. E isto é muito importante de relembrar
+
+
+
+## Introdução a tipo de Dados
+
+Em JavaScript e tambem em outras linguagens de programação, existem vários tipos de dados. Os seguintes são tipos de dados primitivos do JavaScript: _String, Number, Boolean, undefined, Null_, and _Symbol_.
+
+### Números
+
+- Integers: Inteiros (Negativo, zero e positivos) números
+Examplo:
+ ... -3, -2, -1, 0, 1, 2, 3 ...
+- Float-point numbers: Números decimais.
+ ... -3.5, -2.25, -1.0, 0.0, 1.1, 2.2, 3.5 ...
+
+### Strings
+
+Uma coleção de um ou mais caracteres entre duas aspas simples, aspas duplas, ou crase.
+
+**Examplo:**
+
+```js
+'a'
+'Asabeneh'
+"Asabeneh"
+'Finland'
+'JavaScript is a beautiful programming language'
+'I love teaching'
+'I hope you are enjoying the first day'
+`We can also create a string using a backtick`
+'A string could be just as small as one character or as big as many pages'
+'Any data type under a single quote, double quote or backtick is a string'
+```
+
+### Booleans
+
+Um valor boleano ou é verdadeiro ou falso. Qualquer comparação retorna um valor booleano, que pode ser entre verdadeiro ou falso.
+
+Um tipo de dado boleanno é verdadeiro ou um valor falso
+
+**Examplo:**
+
+```js
+true // if the light is on, the value is true
+false // if the light is off, the value is false
+```
+
+### Undefined
+
+Em JavaScript, se nós não atribuirmos um valor a uma variável, o valor é undefined. Em adição a isto, se uma funcção não está retornando nada, ela retorna undefined
+
+```js
+let firstName
+console.log(firstName) // undefined, because it is not assigned to a value yet
+```
+
+### Null
+
+Null em JavaScript significa um valor vazio.
+
+```js
+let valorVazio = null
+```
+
+## Verificando Tipos de Dados
+
+Para verificar o tipo de dado de uma determinada variável, nós usamos o operador **typeof**. Veja o seguinte exemplo.
+
+```js
+console.log(typeof 'Asabeneh') // string
+console.log(typeof 5) // number
+console.log(typeof true) // boolean
+console.log(typeof null) // object type
+console.log(typeof undefined) // undefined
+```
+
+## Comentários novamente
+
+Lembre que comentando no JavaScript é similar à outras linguagens de programação. Comentários são importantes em fazer mais fácil a leitura do seu código.
+Existe dois modos de comentar:
+
+- _Comentando em linha única_
+- _Comentando em várias linhas_
+
+```js
+// Comentando o código com um único comentário
+// let firstName = 'Asabeneh'; Comentando em linha única_
+// let lastName = 'Yetayeh'; Comentando em linha única_
+```
+
+Comentando em várias linhas:
+
+```js
+/*
+ let location = 'Helsinki';
+ let age = 100;
+ let isMarried = true;
+ Isto é um comentário em linha única
+*/
+```
+
+## Variáveis
+
+Variáveis são _containers_ de dados. Variáveis são usadas para _armazenar_ dados na memória alocada. Quando variáveis são declaradas, uma memória alocada é reservada. Quando uma variável é atribuída para um valor (dados), espaço na memória irá ser preenchido com aqueles dados. Para declarar uma variável, nós usamos as palavras-chaves _var_, _let_, ou _const_.
+
+Para uma variável que muda com o tempo, nós usamos _let_. Se os dados não vão mudar, nós usamos _const_. Por exemplo, PI, nome de país, gravidade não muda, e nós podemos usar _const_. Nós não vamos usar var neste desafio e eu nao recomendo usa-lo. Nós vamos falar mais sobre var, let, e const em detalhes em outras sessões (scope). Por enquanto, a explicação acima é suficiente.
+
+Um nome de variável em JavaScript apenas segue a seguinte regra:
+
+- Um nome de variável não deverá começar com um número.
+- Um nome de variável não pode permitir caracteres especiais exceto o sinal do dólar e underscore.
+- Um nome de variável segue a convenção camelCase.
+- Um nomede variável não deve ter espaços entre as palavras.
+
+Os seguintes exemplos são de variáveis válidas em JavaScript.
+
+```js
+firstName
+lastName
+country
+city
+capitalCity
+age
+isMarried
+
+first_name
+last_name
+is_married
+capital_city
+
+num1
+num_1
+_num_1
+$num1
+year2020
+year_2020
+```
+
+A primeira e a segunda variável na lista segue a convenção camelCase de declaração no JavaScript. Neste material, nós vamos usar variáveis em camelCase (camelWithOneHump). Nós usamos CamelCase (CamelWithTwoHump) para declarar classes, nós vamos discutir sobre classes e objetos em outras sessões.
+
+Exemplo de variáveis invalidas:
+
+```js
+ first-name
+ 1_num
+ num_#_1
+```
+
+Vamos declarar variáveis com diferentes tipos de dados. Para declarar uma variável, nós precisamos usar as palavras-chaves _let_ ou _const_ antes de um nome de variável. Após o nome da variável, nós escrevemos um sinal de igual (operador de atribuição), e um valor (dados atribuidos).
+
+```js
+// Sintaxe
+let nameOfVariable = value
+```
+
+O nomeDaVariavel é o nome que armazena diferente tipos de dados. Veja abaixo exemplos para mais detalhes.
+
+**Exemplos de variáveis declaradas**
+
+```js
+// Declarando diferentes variáveis de diferentes tipos de dados
+let firstName = 'Asabeneh' // primeiro nome de uma pessoa
+let lastName = 'Yetayeh' // ultimo nome de uma pessoa
+let country = 'Finland' // país
+let city = 'Helsinki' // capital da cidade
+let age = 100 // Idade
+let isMarried = true
+
+console.log(firstName, lastName, country, city, age, isMarried)
+```
+
+```sh
+Asabeneh Yetayeh Finland Helsinki 100 true
+```
+
+```js
+// Declarando variáveis com o valor numérico
+let age = 100 // idade
+const gravity = 9.81 // gravidade na terra em m/s2
+const boilingPoint = 100 // ponto de ebulição da água, temperatura em °C
+const PI = 3.14 // constante geométrica
+console.log(gravity, boilingPoint, PI)
+```
+
+```sh
+9.81 100 3.14
+```
+
+```js
+// Variáveis tambem podem ser declaradas em uma linha separadas por uma vírgula, entretanto eu recomento usar a separação por linha para facilitar a leitura do código
+let name = 'Asabeneh', job = 'teacher', live = 'Finland'
+console.log(name, job, live)
+```
+
+```sh
+Asabeneh teacher Finland
+```
+
+Quando você executa o arquivo _index.html_ na pasta dia-1 você deve conseguir isto:
+
+
+
+🌕 Você é incrivel! Você acabou de completar o desafio do dia 1 e você está no seu caminho para o sucesso. Agora faça alguns exercícios para seu cérebro e músculos.
+
+# 💻 Dia 1: Exercícios
+
+1. Escreva um comentário de linha única que diga, _comentários faz seu código ser fácil de ler_
+2. Escreva outro comentário de linha única que diga, _Welcome to 30DaysOfJavaScript_
+3. Escreva um comentário de várias linhas que diga, _comentários faz seu código ser fácil de ler, fácil de reusar_ _e informátivo_
+4. Crie um arquivo variavel.js e declare variáveis e atribua uma string, boolean, undefined e null
+5. Crie um arquivo tiposdedados.js e use o JavaScript **_typeof_** operador para verificar diferentes tipos de dados. Verifique o tipo de dado de cada variável
+6. Declare quatro variáveis sem atribuir valores
+7. Declare quatro variáveis e atribuir valores
+8. Declare variáveis para armazenar seu primeiro nome, ultimo nome, estado civil, país e idade em multiplas linhas
+9. Declare variáveis para armazenar seu primeiro nome, ultimo nome, estado civil, país e idade em uma única linha
+10. Declare duas variáveis _minhaIdade_ e _suaIdade_ e atribua valores iniciais e mostre no console do navegador.
+
+```sh
+I am 25 years old.
+You are 30 years old.
+```
+
+🎉 PARABÉNS ! 🎉
+
+[Dia 2 >>](./Dia_02_Tipos_Dados/dia_02_tipos_dados.md)
diff --git a/RU/02_Day/02_day_data_types.md b/RU/02_Day/02_day_data_types.md
index e898f4fe6..bc7f863dd 100644
--- a/RU/02_Day/02_day_data_types.md
+++ b/RU/02_Day/02_day_data_types.md
@@ -142,7 +142,7 @@ console.log(userOne == userTwo); // false
```
Основное правило, мы не сравниваем непримитивные типы данных. Не сравнивайте массив, функцию или объект.
-Непримитивные значения называются ссылочными типами, поскольку они сравниваются по значению, а не по значению. Два объекта строго равны, если они ссылаются на один и тот же базовый объект.
+Непримитивные значения называются ссылочными типами, потому что они сравниваются по ссылке, а не по значению. Два объекта строго равны, если они ссылаются на один и тот же базовый объект.
```js
let nums = [1, 2, 3];
@@ -162,7 +162,7 @@ console.log(userOne == userTwo); // true
```
Если вам трудно понять разницу между примитивными типами данных и не примитивными типами данных, вы не единственный.
-Успокойтесь и просто перейдите к следующему разделу и попробуйте вернуться через некоторое время. Теперь давайте начнем типы данных по типу номера.
+Успокойтесь и просто перейдите к следующему разделу и попробуйте вернуться через некоторое время. Теперь давайте начнём типы данных по типу номера.
## Числа
@@ -208,12 +208,12 @@ 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
+const randNum = Math.random(); // создаёт случайное число от 0 до 0,999999
console.log(randNum);
// Давайте создадим случайное число от 0 до 10
-const num = Math.floor(Math.random() * 11); // создает случайное число от 0 до 10
+const num = Math.floor(Math.random() * 11); // создаёт случайное число от 0 до 10
console.log(num);
// Абсолютное значение
@@ -256,10 +256,10 @@ let randomNum = Math.random(); // генерирует от 0 до 0,999
let randomNum = Math.random(); // генерирует от 0 до 0,999
let numBtnZeroAndTen = randomNum * 11;
-console.log(numBtnZeroAndTen); // это дает: мин 0 и макс 10.99
+console.log(numBtnZeroAndTen); // это даёт: мин 0 и макс 10.99
let randomNumRoundToFloor = Math.floor(numBtnZeroAndTen);
-console.log(randomNumRoundToFloor); // это дает от 0 до 10
+console.log(randomNumRoundToFloor); // это даёт от 0 до 10
```
## Строки
@@ -306,7 +306,7 @@ Asabeneh Yetayeh
#### Конкатенация с использованием оператора сложения
-Конкатенация с использованием оператора сложения - старый способ. Этот способ объединения утомителен и подвержен ошибкам. Полезно знать, как объединить таким способом, но я настоятельно рекомендую использовать второй способ.
+Конкатенация с использованием оператора сложения - старый способ. Этот способ объединения утомителен и подвержен ошибкам. Полезно знать, как объединить таким способом, но я настоятельно рекомендую использовать шаблонные строки ES6.
```js
// Объявление разных переменных разных типов данных
@@ -350,7 +350,7 @@ console.log(paragraph);
#### Перенос последовательности в строке
-В JavaScript и других языках программирования, после некоторых символов есть перенос - последовательности. Давайте посмотрим на наиболее распространенные escape-символы:
+В JavaScript и других языках программирования, после некоторых символов есть перенос - последовательности. Давайте посмотрим на наиболее распространённые escape-символы:
- `\n` - Новая строка
- `\t` - Таб означает (8 пробелов)
@@ -375,7 +375,7 @@ console.log("The saying 'Seeing is Believing' is't correct in 2020");
#### Шаблонные литералы (Шаблонные строки)
-Чтобы создать строку шаблона, мы используем два обратных ключа. Мы можем вставить данные как выражение внутри строки шаблона. Чтобы ввести данные, мы заключаем выражение в фигурную скобку (`{}`), за которой следует знак `$`. Смотрите синтаксис ниже.
+Чтобы создать строку шаблона, мы используем два обратных ключа. Мы можем вставить данные как выражение внутри строки шаблона. Чтобы ввести данные, мы заключаем выражение в фигурную скобку (`{}`), предшествует которой знак `$`. Смотрите синтаксис ниже.
```js
// Синтаксис
@@ -440,7 +440,7 @@ console.log(`${a} is greater than ${b}: ${a > b}`);
console.log(firstName.length); // 8
```
-2. _Доступ к символам в строке_: мы можем получить доступ к каждому символу в строке, используя его индекс. В программировании отсчет начинается с 0. Первый индекс строки равен нулю, а последний индекс равен одному минус длина строки.
+2. _Доступ к символам в строке_: мы можем получить доступ к каждому символу в строке, используя его индекс. В программировании отсчёт начинается с 0. Первый индекс строки равен нулю, а последний индекс равен одному минус длина строки.

@@ -541,7 +541,7 @@ console.log(`${a} is greater than ${b}: ${a > b}`);
console.log(countries.split(", ")); // ["Finland", "Sweden", "Norway", "Denmark", "and Iceland"]
```
-8. `trim()`: Удаляет завершающий пробел в начале или конце строки.
+8. `trim()`: Удаляет пробелы в начале или конце строки.
```js
let string = " 30 Days Of JavaScript ";
@@ -658,7 +658,7 @@ console.log(`${a} is greater than ${b}: ${a > b}`);
console.log(string.lastIndexOf("JavaScript")); // 38
```
-15. `concat()`: он принимает много подстрок и создает конкатенацию.
+15. `concat()`: он принимает множество подстрок и конкатенирует их.
```js
string.concat(substring, substring, substring);
@@ -693,7 +693,7 @@ console.log(`${a} is greater than ${b}: ${a > b}`);
console.log(country.startsWith("land")); // false
```
-17. `endsWith`: он принимает подстроку в качестве аргумента и проверяет, начинается ли строка с указанной подстроки. Возвращает логическое значение (true или false).
+17. `endsWith`: он принимает подстроку в качестве аргумента и проверяет, заканчивается ли строка указанной подстрокой. Возвращает логическое значение (true или false).
```js
string.endsWith(substring);
@@ -755,14 +755,14 @@ console.log(`${a} is greater than ${b}: ${a > b}`);
console.log(string.match(pattern)); // ["love", "love", "love"]
```
- Давайте извлечем числа из текста, используя регулярное выражение. Это не раздел регулярных выражений, не паникуйте, мы рассмотрим регулярные выражения в другом разделе.
+ Давайте извлечём числа из текста, используя регулярное выражение. Это не раздел регулярных выражений, не паникуйте, мы рассмотрим регулярные выражения в другом разделе.
```js
let txt =
"In 2019, I run 30 Days of Python. Now, in 2020 I super exited to start this challenge";
let regEx = /\d+/;
- // d с перенос-символом означает, что d не является нормальным d, вместо этого действует цифра
+ // d с escape-символом означает, что d - не просто символ d, а обозначает цифру
// + означает одно или несколько цифр,
// если после этого есть g, значит глобальный, ищите везде.
@@ -785,7 +785,7 @@ console.log(`${a} is greater than ${b}: ${a > b}`);
### Проверка типов данных
-- Проверка типов данных: чтобы проверить тип данных определенного типа данных, мы используем `typeof` и также меняем один тип данных на другой.
+- Проверка типов данных: чтобы проверить тип данных определённого типа данных, мы используем `typeof` и также меняем один тип данных на другой.
**Пример:**
@@ -889,7 +889,7 @@ let numInt = parseInt(num);
console.log(numInt); // 9
```
-🌕 Ты обалденный. Вы только что завершили 2-й день испытаний, и вы в двух шагах от своего пути к успеху. Теперь сделайте несколько упражнений для вашего мозга и ваших мышц.
+🌕 Ты молодец. Ты только что завершил 2-й день испытаний, и ты в двух шагах от своего пути к успеху. Теперь сделай несколько упражнений для мозга и твоих мышц.
## 💻 День 2: Упражнения
@@ -905,19 +905,19 @@ console.log(numInt); // 9
8. Проверьте, содержит ли строка слово **Script**, используя метод `includes()`
9. Разбейте **строку** на **массив**, используя метод `split()`
10. Разбить строку 30 Days Of JavaScript в пространстве с помощью метода `split()`
-11. «Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon» **разбивают** строку на запятую и заменяют ее на массив.
+11. «Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon» **разбейте** строку где разделитель - запятая и замените её на массив.
12. Измените 30 Days Of JavaScript на 30 Days Of Python, используя метод `replace()`.
-13. Что такое символ в индексе 15 в строке «30 Days Of JavaScript», используйте метод `charAt()`.
-14. Что такое код символа J в строке «30 Days Of JavaScript» с использованием `charCodeAt()`
+13. Какой символ в индексе 15 в строке «30 Days Of JavaScript», используйте метод `charAt()`.
+14. Какой код символа J в строке «30 Days Of JavaScript» с использованием `charCodeAt()`
15. Используйте `indexOf`, чтобы определить позицию первого вхождения за 30 Days Of JavaScript
16. Используйте `lastIndexOf`, чтобы определить позицию последнего вхождения в 30 Days Of JavaScript.
17. Используйте `indexOf`, чтобы найти позицию первого вхождения слова **потому что** в следующем предложении: **«Вы не можете закончить предложение, потому что, потому что, потому что это соединение»**
18. Используйте `lastIndexOf`, чтобы найти позицию последнего вхождения слова **потому что** в следующем предложении: **«Вы не можете закончить предложение, потому что, потому что потому что это соединение»**
19. Используйте `search`, чтобы найти позицию первого вхождения слова **потому что** в следующем предложении: **«Вы не можете закончить предложение, потому что, потому что потому что это соединение»**
-20. Используйте `trim()`, чтобы удалить, если в начале и конце строки есть конечные пробелы. Например, «30 Days Of JavaScript».
-21. Используйте метод `launchWith()` со строкой _30 Days Of JavaScript_, чтобы сделать результат верным
-22. Используйте метод `setsWith()` со строкой _30 Days Of JavaScript_, чтобы сделать результат верным
-23. Используйте метод `match()`, чтобы найти все за 30 Days Of JavaScript
+20. Используйте `trim()`, чтобы удалить все пробелы в начале и конце строки. Например, «30 Days Of JavaScript».
+21. Используйте метод `startsWith()` со строкой _30 Days Of JavaScript_, чтобы сделать результат верным
+22. Используйте метод `endsWith()` со строкой _30 Days Of JavaScript_, чтобы сделать результат верным
+23. Используйте метод `match()`, чтобы найти все "а" в "30 Days Of JavaScript"
24. Используйте `concat()` и объедините «30 Days» и «JavaScript» в одну строку «30 Days Of JavaScript»
25. Используйте метод `repeat()`, чтобы напечатать 30 Days Of JavaScript 2 раза
@@ -937,10 +937,10 @@ console.log(numInt); // 9
3. Проверьте, точно ли `typeof` '10' равен 10. Если нет, сделайте его точно равным.
4. Убедитесь, что `parseFloat('9.8')` равен 10, если не равен точно 10.
-5. Проверьте, найдено ли 'on' как в Python, так и в жаргоне
-6. Я надеюсь, что этот курс не полон жаргона. Проверьте, находится ли _jargon_ в предложении.
+5. Проверьте, найдено ли 'он' как в Питон, так и в жаргоне
+6. Я надеюсь, что этот курс не полон жаргона. Проверьте, находится ли _жаргон_ в предложении.
7. Сгенерируйте случайное число от 0 до 100 включительно.
-8. Генерация случайного числа от 50 до 100 включительно.
+8. Сгенерируйте случайное число от 50 до 100 включительно.
9. Сгенерируйте случайное число от 0 до 255 включительно.
10. Получите доступ к символам строки «JavaScript», используя случайное число.
11. Используйте `console.log()` и управляющие символы для печати следующего шаблона.
@@ -957,9 +957,9 @@ console.log(numInt); // 9
### Упражнения: уровень 3
-1. «Любовь - лучшая вещь в этом мире. Некоторые нашли свою любовь, а некоторые все еще ищут свою любовь. Подсчитайте количество слов любви в этом предложении.
-2. Используйте `match()`, чтобы сосчитать число все потому, что в следующем предложении: **«Вы не можете закончить предложение, потому что, потому что, потому что это соединение»**
-3. Очистите следующий текст и найдите наиболее часто встречающееся слова (подсказка, используйте замену и регулярный экспресс).
+1. «Любовь - лучшая вещь в этом мире. Некоторые нашли свою любовь, а некоторые все ещё ищут свою любовь. Подсчитайте количество слов "любовь" в этом предложении.
+2. Используйте `match()`, чтобы сосчитать число все **"потому что"** в следующем предложении: **«Вы не можете закончить предложение, потому что, потому что, потому что это соединение»**
+3. Очистите следующий текст и найдите наиболее часто встречающееся слова (подсказка, используйте замену и регулярные выражения).
```js
const sentence =
diff --git a/RU/03_Day/03_booleans_operators_date.md b/RU/03_Day/03_booleans_operators_date.md
index 06b649caf..b59f9d76c 100644
--- a/RU/03_Day/03_booleans_operators_date.md
+++ b/RU/03_Day/03_booleans_operators_date.md
@@ -76,7 +76,7 @@ let falseValue = 4 < 3; // false
### Истинные значения
- Все числа (положительные и отрицательные) являются правдивыми, кроме нуля
-- Все строки правдивы
+- Все строки, кроме пустых, правдивы
- boolean истинное
### Ложные значения
@@ -89,11 +89,11 @@ let falseValue = 4 < 3; // false
- the boolean false
- '', "", ``, пустая строка
-Нужно хорощо помнить эти истинные и ложные значения. В следующем разделе мы будем использовать их с условиями для принятия решения.
+Нужно хорошо помнить эти истинные и ложные значения. В следующем разделе мы будем использовать их с условиями для принятия решения.
## Undefined
-Если мы объявим переменную и не назначим значение, оно будет неопределенным. В дополнение к этому, если функция не возвращает значение, оно будет неопределенным.
+Если мы объявим переменную и не назначим значение, оно будет неопределённым (undefined). В дополнение к этому, если функция не возвращает значение, оно будет неопределённым.
```js
let firstName;
@@ -128,7 +128,7 @@ let country = "Finland";
- Сложение (+): `a + b`
- Вычитание (-): `a - b`
-- Умножение (_): `a _ b`
+- Умножение (*): `a * b`
- Деление (/): `a / b`
- Остаток от деления % (%): `a % b`
- Возведение в степень (**): `a ** b`
@@ -218,8 +218,8 @@ console.log("tomato".length == "potato".length); // true
console.log("python".length > "dragon".length); // false
```
-Попытайтесь понять приведенные выше сравнения с некоторой логикой. Запоминать без какой-либо логики может быть сложно.
-JavaScript - это своего рода проводной язык программирования. Код JavaScript запускается и дает вам результат, но если вы не разбираетесь в нем, это может быть нежелательным результатом.
+Попытайтесь понять приведённые выше сравнения с некоторой логикой. Запоминать без какой-либо логики может быть сложно.
+JavaScript - это своего рода проводной язык программирования. Код JavaScript запускается и даёт вам результат, но если вы не разбираетесь в нем, это может быть нежелательным результатом.
По практическому правилу, если значение не верно с `==`, оно не будет равно `===`. Использование `===` более безопасно, чем использование `==`. Следующая [ссылка](https://dorey.github.io/JavaScript-Equality-Table/) имеет исчерпывающий список сравнения типов данных.
@@ -238,7 +238,7 @@ const check = 4 > 3 && 10 > 5; // true && true -> true
const check = 4 > 3 && 10 < 5; // true && false -> false
const check = 4 < 3 && 10 < 5; // false && false -> false
-//|| pipe or operator, example
+//|| Пример оператора труба
const check = 4 > 3 || 10 > 5; // true || true -> true
const check = 4 > 3 || 10 < 5; // true || false -> true
@@ -273,7 +273,7 @@ let isMarried = !false; // true
console.log(count); // 1
```
-Мы используем большую часть времени после приращения. По крайней мере, вы должны помнить, как использовать постинкрементный оператор.
+Мы используем большую часть времени пост-инкремент. По крайней мере, вы должны помнить, как использовать постинкрементный оператор.
### Оператор декремента
@@ -371,18 +371,18 @@ console.log(number);
Метод `confirm()` отображает диалоговое окно с указанным сообщением, а также кнопки "ОК" и "Отмена".
Окно подтверждения часто используется, чтобы запросить у пользователя разрешение на что-либо. Окно `confirm()` принимает строку в качестве аргумента.
-Нажатие "ОК" дает значение `true`, нажатие кнопки "Отмена" дает значение `false`.
+Нажатие "ОК" даёт значение `true`, нажатие кнопки "Отмена" даёт значение `false`.
```js
const agree = confirm("Are you sure you like to delete? ");
console.log(agree); // результат будет true или false в зависимости от того, что вы нажимаете в диалоговом окне
```
-These are not all the window methods we will have a separate section to go deep into window methods.
+Это не все оконные методы , в курсе представлены отдельные разделы для того чтобы погрузиться глубже в оконные методы.
## Объект Date
-Время это важная вещь. Нам нравится знать время определенного действия или события. В JavaScript текущее время и дата создаются с использованием JavaScript Date Object. Объект, который мы создаем с использованием объекта Date, предоставляет множество методов для работы с датой и временем. Методы, которые мы используем для получения информации о дате и времени из значений объекта даты, начинаются со слова _get_, поскольку они предоставляют информацию.
+Время это важная вещь. Нам нравится знать время определённого действия или события. В JavaScript текущее время и дата создаются с использованием JavaScript Date Object. Объект, который мы создаём с использованием объекта Date, предоставляет множество методов для работы с датой и временем. Методы, которые мы используем для получения информации о дате и времени из значений объекта даты, начинаются со слова _get_, поскольку они предоставляют информацию.
- `getFullYear()`,
- `getMonths()`,
@@ -399,7 +399,7 @@ These are not all the window methods we will have a separate section to go deep
### Создание объекта времени
-Однажды мы создаем объект времени. Объект времени предоставит информацию о времени. Давайте создадим объект времени
+Однажды мы создаём объект времени. Объект времени предоставит информацию о времени. Давайте создадим объект времени
```js
const now = new Date();
@@ -410,7 +410,7 @@ console.log(now); // Sat Jan 04 2020 00:56:41 GMT+0200 (Eastern European Standar
### Получение года
-Давайте извлечем или получим полный объект времени.
+Давайте извлечем или получим полный год из объекта времени.
```js
const now = new Date();
@@ -419,7 +419,7 @@ console.log(now.getFullYear()); // 2020
### Получение месяца
-Давайте извлечем или получим месяц из объекта времени.
+Давайте извлечём или получим месяц из объекта времени.
```js
const now = new Date();
@@ -428,7 +428,7 @@ console.log(now.getMonth()); // 0, потому, что месяц январь,
### Получение даты
-Давайте извлечем или получим дату месяца из объекта времени.
+Давайте извлечём или получим дату месяца из объекта времени.
```js
const now = new Date();
@@ -437,7 +437,7 @@ console.log(now.getDate()); // 4, потому что день месяца 4th,
### Получение дня
-Давайте извлечем или получим день недели из объекта времени.
+Давайте извлечём или получим день недели из объекта времени.
```js
const now = new Date();
@@ -474,7 +474,7 @@ console.log(now.getSeconds()); // 41, потому, что время 00:56:41
### Получение времени
-Этот метод дает время в миллисекундах, начиная с 1 января 1970 года. Он также известен как время Unix. Мы можем получить время Unix двумя способами:
+Этот метод даёт время в миллисекундах, начиная с 1 января 1970 года. Он также известен как время Unix. Мы можем получить время Unix двумя способами:
1. Используя `getTime()`
@@ -508,7 +508,7 @@ const minutes = now.getMinutes(); // вернет number (0 -59)
console.log(`${date}/${month}/${year} ${hours}:${minutes}`); // 4/1/2020 0:56
```
-🌕 У вас есть безграничная энергия! Вы только что выполнили 3-й день испытаний, и вы на три шага на пути к успеху. Теперь сделайте несколько упражнений для вашего мозга и ваших мышц.
+🌕 У вас безграничная энергия! Вы только что выполнили 3-й день испытаний, и вы на три шага на пути к успеху. Теперь сделайте несколько упражнений для вашего мозга и ваших мышц.
## 💻 День 3: Упражнения
@@ -549,23 +549,23 @@ console.log(`${date}/${month}/${year} ${hours}:${minutes}`); // 4/1/2020 0:56
8. !(4 > 3 && 10 < 12)
9. !(4 > 3 && 10 > 12)
10. !(4 === '4')
- 11. В обоих случаях нет 'on'
+ 11. Ни в dragon, ни в python не существует "on".
7. Используйте объект Date для выполнения следующих действий
- 1. Какой сегодня год?
- 2. Какой сегодня месяц, как число?
- 3. Какая сегодня дата?
- 4. Какой сегодня день, как число?
- 5. Сколько сейчас часов?
- 6. Какие минуты сейчас?
- 7. Узнайте количество секунд, прошедших с 1 января 1970 года по настоящее время.
+ 1. Какой сегодня год?
+ 2. Какой сегодня месяц, как число?
+ 3. Какая сегодня дата?
+ 4. Какой сегодня день, как число?
+ 5. Сколько сейчас часов?
+ 6. Какие минуты сейчас?
+ 7. Узнайте количество секунд, прошедших с 1 января 1970 года по настоящее время.
### Упражнения: уровень 2
-1. Напишите скрипт, который предложит пользователю ввести основание и высоту треугольника и рассчитать площадь треугольника. (прлощадь = 0.5 x b x h).
+1. Напишите скрипт, который предложит пользователю ввести основание и высоту треугольника и рассчитать площадь треугольника. (площадь = 0.5 x b x h).
```sh
- Введите основанеи: 20
+ Введите основание: 20
Введите высоту: 10
Площадь треугольника 50
```
@@ -579,13 +579,13 @@ console.log(`${date}/${month}/${year} ${hours}:${minutes}`); // 4/1/2020 0:56
Периметр треугольника 12
```
-3. Получите длину и ширину, используя подсказку, и вычислите площадь прямоугольника (площадь = длина х ширина и периметр прямоугольника (периметр = 2 х (длина + ширина))
-4. Получите радиус, используя подсказку, и вычислите площадь круга (площадь = pi x r x r) и окружность круга (c = 2 x pi x r), где pi = 3.14.
+3. Получите длину и ширину, используя prompt, и вычислите площадь прямоугольника (площадь = длина х ширина и периметр прямоугольника (периметр = 2 х (длина + ширина))
+4. Получите радиус, используя prompt, и вычислите площадь круга (площадь = pi x r x r) и окружность круга (c = 2 x pi x r), где pi = 3.14.
5. Рассчитайте наклон, x-пересечение и y-пересечение y = 2x -2
6. Наклон (m = y2-y1 / x2-x1). Найти наклон между точкой (2, 2) и точкой (6,10)
-7. Сравните наклон двух приведенных выше вопросов.
+7. Сравните наклон двух приведённых выше вопросов.
8. Рассчитайте значение y (y = x ^ 2 + 6x + 9). Попробуйте использовать разные значения х и выяснить, при каком значении х у 0.
-9. Напишите скрипт, который побудит пользователя вводить часы и ставку за час. Рассчитать зарплату человека?
+9. Напишите скрипт,который предлагает пользователю ввести часы и ставку за час. Рассчитать зарплату человека?
```sh
Введите часы: 40
@@ -602,7 +602,7 @@ console.log(`${date}/${month}/${year} ${hours}:${minutes}`); // 4/1/2020 0:56
```
```sh
- Твое имя, Asabeneh длиннее вашей фамилии, Yetayeh
+ Твоё имя, Asabeneh длиннее твоей фамилии, Yetayeh
```
12. Объявите две переменные _myAge_ и _yourAge_ и присвойте им начальные значения, myAge и yourAge.
@@ -616,20 +616,20 @@ console.log(`${date}/${month}/${year} ${hours}:${minutes}`); // 4/1/2020 0:56
Я на 225 лет старше тебя.
```
-13. Используя подсказку, укажите год рождения пользователя и, если ему исполнилось 18 лет, разрешите ему ехать, если он не скажет пользователю подождать определенное количество лет.
+13. Используя подсказку, укажите год рождения пользователя и, если ему исполнилось 18 лет, разрешите ему ехать, если он не скажет пользователю подождать определённое количество лет.
```sh
Введите год рождения: 1995
Вам 25. Вы достаточно взрослый, чтобы водить
Введите год рождения: 2005
- Вам 15. Вам будет разрешено водить после 3 лет.
+ Вам 15. Вам будет разрешено водить через 3 года.
```
-14. Напишите скрипт, который предложит пользователю ввести количество лет. Подсчитайте, сколько секунд человек может прожить. Предположим, кто-то живет всего сто лет
+14. Напишите скрипт, который предложит пользователю ввести количество лет. Подсчитайте, сколько секунд человек может прожить. Предположим, кто-то живёт всего сто лет
```sh
- Введите число, в котором вы живете: 100
+ Укажите количество прожитых лет: 100
Вы жили 3153600000 секунд.
```
diff --git a/RU/04_Day/04_day_conditionals.md b/RU/04_Day/04_day_conditionals.md
index e306cdfd4..fbb859ca5 100644
--- a/RU/04_Day/04_day_conditionals.md
+++ b/RU/04_Day/04_day_conditionals.md
@@ -176,7 +176,7 @@ if (weather === "дождливо") {
### Switch
Переключатель является альтернативой для `if else if else else`.
-Оператор `switch` начинается с ключевого слова `switch`, за которым следуют скобки и блок кода. Внутри блока кода у нас будут разные случаи. Case case запускается, если значение в скобках оператора `switch` совпадает с case vale. Перерыв должен закончиться, и он не снижается после того, как условие выполнено. Блок по умолчанию выполняется, если все случаи не удовлетворяют условию.
+Оператор `switch` начинается с ключевого слова `switch`, за которым следуют скобки и блок кода. Внутри блока кода у нас будут разные случаи (case). Блок case выполняется, если значение в скобках оператора `switch` совпадает со значением case. Операртор `break` служит для прерывания выполнения, чтобы выполнение кода не прекратилось после выполнения условия. Блок `default` выполняется, если все случаи не удовлетворяют условию.
```js
switch (caseValue) {
@@ -242,7 +242,7 @@ switch (day) {
### Тернарный оператор
-Другой способ написания условных выражений - использование тернарных операторов. Мы рассмотрели это в других разделах, но мы также должны упомянуть об этом здесь.
+Другой способ написания условных выражений - использование тернарных операторов. Мы уже рассматривали этот способ в других разделах, но нам следует также упомянуть о нем здесь.
```js
let isRaining = true;
@@ -257,7 +257,7 @@ isRaining
### Упражнения: уровень 1
-1. Получить пользовательский ввод с помощью `prompt("Введите свой возраст:")`. Если пользователю 18 лет или больше, оставьте отзыв: вы достаточно взрослый, чтобы ездить, но если нет, то 18 - отзывайте, чтобы ждать те годы, которые он должен был ждать.
+1. Получить пользовательский ввод с помощью `prompt("Введите свой возраст:")`. Если пользователю 18 лет или больше, вывести сообщение: вы достаточно взрослый, чтобы ездить, но если меньше 18 - выведете сообщение,в котором говорится что нужно подождать определённое количество лет, чтобы водить машину.
```sh
Введите свой возраст: 30
@@ -267,14 +267,14 @@ isRaining
Вам осталось 3 года до вождения.
```
-2. Сравните значения myAge и yourAge, используя _if… else_. На основе сравнения журнала для консоли, кто старше (я или вы). Используйте `prompt("Введите свой возраст:")`, чтобы получить возраст в качестве входных данных.
+2. Сравните значения myAge и yourAge с помощью if ... else. На основе сравнения выведите результат в консоль, указав, кто старше (я или вы). Используйте prompt("Enter your age:") для получения возраста в качестве входных данных.
```sh
Введите свой возраст: 30
Ты на 5 лет старше меня.
```
-3. Если a больше, чем b, вернуть «a больше, чем b», иначе «a меньше, чем b». Попробуй реализовать в пути
+3. Если a больше, чем b, вернуть «a больше, чем b», иначе «a меньше, чем b». Попробуйте реализовать это различными способами:
- используя if else
- тернарный оператор.
@@ -288,26 +288,25 @@ isRaining
4 больше 3
```
-4. Четные числа делятся на 2, а остаток равен нулю. Как проверить, является ли число четным или нет с помощью JavaScript?
+4. Чётные числа делятся на 2, а остаток равен нулю. Как проверить, является ли число чётным или нет с помощью JavaScript?
```sh
Введите число: 2
- 2 - четное число
+ 2 - чётное число
Введите число: 9
- 9 является нечетным числом.
+ 9 является нечётным числом.
```
### Упражнения: уровень 2
-1. Напишите код, который может дать оценку студентам в соответствии с их оценками:
+1. Напишите код, который может дать оценку студентам в соответствии с их баллами:
- 80-100, A
- - 70-89, B
+ - 70-79, B
- 60-69, C
- 50-59, D
- 0-49, F
-2. Проверьте, является ли сезон осенью, зимой, весной или летом.
- Если пользовательский ввод:
+2. Проверьте, является ли сезон: осенью, зимой, весной или летом. Если пользователь ввёл :
- сентябрь, октябрь или ноябрь, сезон осень.
- декабрь, январь или февраль, сезон зима.
- март, апрель или май, сезон весна
diff --git a/RU/README.md b/RU/README.md
index ecd2a4d14..b94e24914 100644
--- a/RU/README.md
+++ b/RU/README.md
@@ -13,10 +13,17 @@
@@ -72,7 +79,7 @@
В этом пошаговом руководстве вы изучите JavaScript, самый популярный язык программирования в истории человечества.
Вы используете JavaScript **_для добавления интерактивности на веб-сайты, для разработки мобильных приложений, настольных приложений, игр_**, и в настоящее время JavaScript можно использовать для **_машинного обучения_** и **_AI_**.
-**_JavaScript (JS)_** вырос в популярности в последние годы и был ведущим языком программирования в течение четырех лет подряд и является наиболее используемым языком программирования на Github.
+**_JavaScript (JS)_** вырос в популярности в последние годы и был ведущим языком программирования в течение четырёх лет подряд и является наиболее используемым языком программирования на Github.
## Требования
@@ -90,11 +97,11 @@
### Установка Node.js
-Возможно, вам это не нужно прямо сейчас, но может понадобиться позже. Устанавить [node.js](https://nodejs.org/en/).
+Возможно, вам это не нужно прямо сейчас, но может понадобиться позже. Установить [node.js](https://nodejs.org/en/).

-После загрузки дважды щелкните и установите
+После загрузки дважды щёлкните и установите

@@ -113,7 +120,7 @@ v12.14.0
#### Установка Google Chrome
-Установите [google chrome](https://www.google.com/chrome/), если у вас его еще нет. Мы можем написать небольшой код JavaScript в консоли браузера, но мы не используем консоль браузера для разработки приложений.
+Установите [google chrome](https://www.google.com/chrome/), если у вас его ещё нет. Мы можем написать небольшой код JavaScript в консоли браузера, но мы не используем консоль браузера для разработки приложений.

@@ -135,7 +142,7 @@ Ctl+Shift+I

-После того, как вы откроете консоль Google Chrome, попробуйте изучить отмеченные кнопки. Мы будем проводить большую часть времени на консоли. Консоль - это место, куда идет ваш код JavaScript. Движок Google Console V8 изменяет ваш код JavaScript на машинный код.
+После того, как вы откроете консоль Google Chrome, попробуйте изучить отмеченные кнопки. Мы будем проводить большую часть времени на консоли. Консоль - это место, куда идёт ваш код JavaScript. Движок Google Console V8 изменяет ваш код JavaScript на машинный код.
Давайте напишем код JavaScript на консоли Google Chrome:

@@ -172,7 +179,7 @@ console.log("HAPPY", "NEW", "YEAR", 2020);
console.log("Welcome", "to", 30, "Days", "Of", "JavaScript");
```
-Как вы можете видеть из приведенного выше фрагмента кода, `console.log()` может принимать несколько аргументов.
+Как вы можете видеть из приведённого выше фрагмента кода, `console.log()` может принимать несколько аргументов.
Поздравляем! Вы написали свой первый код JavaScript, используя `console.log()`.
@@ -180,7 +187,7 @@ console.log("Welcome", "to", 30, "Days", "Of", "JavaScript");
Мы добавляем комментарии к нашему коду. Комментарии очень важны, чтобы сделать код более читабельным и оставить комментарии в нашем коде. JavaScript не выполняет часть комментариев нашего кода. Любой текст, начинающийся с `//` в JavaScript, является комментарием или что-то в этом роде `/* */` является комментарием.
-**Пример: Однострочный комментарийt**
+**Пример: Однострочный комментарий**
```js
// Это первый комментарий
@@ -246,11 +253,11 @@ VS Code - это очень популярный текстовый редакт

-Если вы установили код VS Code, давайте начнем использовать его.
+Если вы установили код VS Code, давайте начнём использовать его.
#### Как использовать VS Code
-Откройте код VS Code, дважды щелкнув значок VS Code. Когда вы откроете его, вы получите такой интерфейс. Попробуйте взаимодействовать с помеченными значками.
+Откройте код VS Code, дважды щёлкнув значок VS Code. Когда вы откроете его, вы получите такой интерфейс. Попробуйте взаимодействовать с помеченными значками.

@@ -338,7 +345,7 @@ JavaScript можно добавить на веб-страницу тремя
### Внешний скрипт
-Подобно внутреннему сценарию, ссылка на внешний сценарий может быть в `head` или `body`, но предпочтительно помещать ее в `body`.
+Подобно внутреннему сценарию, ссылка на внешний сценарий может быть в `head` или `body`, но предпочтительно помещать её в `body`.
Во-первых, мы должны создать внешний файл JavaScript с расширением `.js`. Любой файл JavaScript заканчивается на `.js`. Создайте файл `introduction.js` внутри директории вашего проекта, напишите следующий код и подключите этот файл `.js` внизу `body`.
```js
@@ -437,7 +444,7 @@ console.log("Hello, World!");
#### Пример
```js
-true; // если свет включен, значение истинно
+true; // если свет включён, значение истинно
false; // если свет выключен, значение False
```
@@ -447,7 +454,7 @@ false; // если свет выключен, значение False
```js
let firstName;
-console.log(firstName); // не определено, потому что оно еще не присвоено значению
+console.log(firstName); // не определено, потому что оно ещё не присвоено значению
```
### Null
@@ -460,7 +467,7 @@ let emptyValue = null;
## Проверка типов данных
-Чтобы проверить тип данных определенного типа данных, мы используем оператор `typeof`. Смотрите следующий пример.
+Чтобы проверить тип данных определённого типа данных, мы используем оператор `typeof`. Смотрите следующий пример.
```js
console.log(typeof "Asabeneh"); // строка
@@ -498,7 +505,7 @@ console.log(typeof undefined); // undefined
## Переменные
-Переменные являются _контейнером_ данных. Переменные, используются для хранения данных в ячейке памяти. Когда переменная объявлена, место в памяти зарезервировано. Когда переменной присваивается значение (данные), пространство памяти будет заполнено этими данными. Чтобы объявить переменную, мы используем ключевые слова `var`, `let` или `const`. Мы поговорим подробнее о `var`, `let` и `const` в других разделах (область действия). Пока приведенного выше объяснения достаточно.
+Переменные являются _контейнером_ данных. Переменные, используются для хранения данных в ячейке памяти. Когда переменная объявлена, место в памяти зарезервировано. Когда переменной присваивается значение (данные), пространство памяти будет заполнено этими данными. Чтобы объявить переменную, мы используем ключевые слова `var`, `let` или `const`. Мы поговорим подробнее о `var`, `let` и `const` в других разделах (область действия). Пока приведённого выше объяснения достаточно.
Для переменной, которая изменяется в другое время, мы используем `let`. Если данные не меняются вообще, мы используем `const`. Например, PI, название страны, гравитация не меняются, и мы можем использовать `const`.
@@ -598,12 +605,12 @@ Asabeneh teacher Finland

-🌕 Ты великолепен. Вы только что выполнили задание первого дня, и вы на пути к величию. Теперь сделайте несколько упражнений для вашего мозга и ваших мышц.
+🌕 Ты великолепен. ТЫ только что выполнил задание первого дня, и ты на пути к величию. Теперь сделай несколько упражнений для мозга и мышц.
# 💻 День 1: Упражнения
1. Написать однострочный комментарий, который говорит: _comments can make code readable_
-2. Написать еще один комментарий, который говорит: _welcome to 30DaysOfJavaScript_
+2. Написать ещё один комментарий, который говорит: _welcome to 30DaysOfJavaScript_
3. Написать многострочный комментарий, который говорит: _comments can make code readable, easy to use and informative_
4. Создать файл _variable.js_, объявить переменные и назначить строковые, логические, undefined и null типы данных.
5. Создайте файл _datatypes.js_ и используйте оператор JavaScript `typeof` для проверки различных типов данных. Проверьте тип данных каждой переменной
diff --git a/Spanish/dia_02_tipos_de_datos.md b/Spanish/dia_02_tipos_de_datos.md
new file mode 100644
index 000000000..b86796709
--- /dev/null
+++ b/Spanish/dia_02_tipos_de_datos.md
@@ -0,0 +1,992 @@
+
+
+
+[<< Día 1](./readme.md) | [Day 3 >>](./dia_03_Booleanos_Operadores_Date/dia_03_Boleanos_Operadores_Date.md)
+
+
+
+- [📔 Día 2](#-Día-2)
+ - [Tipos de Datos](#tipos-de-datos)
+ - [Tipos de datos primitivos](#tipos-de-datos-primitivos)
+ - [Tipos de datos no primitivos](#tipos-de-datos-no-primitivos)
+ - [Números](#números)
+ - [Declaración de tipos de datos numéricos](#declaración-de-tipos-de-datos-numéricos)
+ - [Objeto matemático](#objeto-matemático)
+ - [Generador de números aleatorios](#generador-de-números-aleatorios)
+ - [Cadenas](#cadenas)
+ - [Concatenación de cadenas](#concatenación-de-cadenas)
+ - [Concatenar usando el operador de suma](#concatenar-usando-el-operador-de-suma)
+ - [Cadenas literales largas](#cadenas-literales-largas)
+ - [Secuencias de escape en cadenas](#secuencias-de-escape-en-cadenas)
+ - [Literales de plantilla](#literales-de-plantilla)
+ - [Métodos de cadena](#métodos-de-cadena)
+ - [Comprobación de tipos de datos y conversión](#comprobación-de-tipos-de-datos-y-conversión)
+ - [Comprobación de tipos de datos](#comprobación-de-tipos-de-datos)
+ - [Cambio del tipo de datos](#cambio-del-tipo-de-datos)
+ - [Cadena a Int](#cadena-a-int)
+ - [Cadena a Floatante](#cadena-a-floatante)
+ - [Flotante a Int](#flotante-a-int)
+ - [💻 Día 2: Ejercicios](#-día-2-ejercicios)
+ - [Ejercicio: Nivel 1](#ejercicio-nivel-1)
+ - [Ejercicio: Nivel 2](#ejercicio-nivel-2)
+ - [Ejercicios: Nivel 3](#ejercicios-nivel-3)
+
+# 📔 Día 2
+
+## Tipos de Datos
+
+En la sección anterior, mencionamos un poco sobre los tipos de datos. Los datos o valores tienen tipos de datos. Los tipos de datos describen las características de los datos. Los tipos de datos se pueden dividir en dos:
+
+1. Tipos de datos primitivos
+2. Tipos de datos que no son primitivos (referencias de objetos)
+
+### Tipos de datos primitivos
+
+Los tipos de datos primitivos en JavaScript incluyen:
+
+1. Números: enteros, flotantes
+2. Cadenas: cualquier dato entre comillas simples, comillas dobles o comillas invertidas
+3. Booleanos: valor verdadero o falso
+4. Nulo - valor vacío o sin valor
+5. Indefinido - una variable declarada sin un valor
+
+Los tipos de datos que no son primitivos en JavaScript incluyen:
+
+1. Objetos
+2. Funciones
+3. Matrices
+
+Ahora, veamos qué significan exactamente los tipos de datos primitivos y no primitivos.
+Los tipos de datos _primitivos_ son tipos de datos inmutables (no modificables). Una vez que se crea un tipo de datos primitivo, no podemos modificarlo.
+
+**Ejemplo:**
+
+```js
+let word = "JavaScript";
+```
+
+Si intentamos modificar la cadena almacenada en la variable _word_, JavaScript debería generar un error. Cualquier tipo de datos bajo comillas simples, comillas dobles o comillas invertidas son un tipo de datos de cadena.
+
+```js
+word[0] = "Y";
+```
+
+Esta expresión no cambia la cadena almacenada en la variable _word_. Entonces, podemos decir que las cadenas no son modificables o, en otras palabras, inmutables. Los tipos de datos primitivos se comparan por sus valores. Comparemos diferentes valores de datos. Vea el ejemplo a continuación:
+
+```js
+let numOne = 3;
+let numTwo = 3;
+
+console.log(numOne == numTwo); // Verdadero
+
+let js = "JavaScript";
+let py = "Python";
+
+console.log(js == py); // Falso
+
+let lightOn = true;
+let lightOff = false;
+
+console.log(lightOn == lightOff); // Falso
+```
+
+### Tipos de datos no primitivos
+
+Los tipos de datos _no primitivos_ son modificables o mutables. Podemos modificar el valor de los tipos de datos no primitivos después de su creación.
+Veamos creando una matriz. Una matriz es una lista de valores de datos entre corchetes. Las matrices pueden contener tipos de datos iguales o diferentes. Los valores de matriz están referenciados por su índice. En el índice de matriz de JavaScript comienza en cero. Es decir, el primer elemento de una matriz se encuentra en el índice cero, el segundo elemento en el índice uno y el tercer elemento en el índice dos, etc.
+
+```js
+let nums = [1, 2, 3];
+nums[0] = 10;
+
+console.log(nums); // [10, 2, 3]
+```
+
+Como puede ver, una matriz, que es un tipo de datos no primitivo, es mutable. Los tipos de datos no primitivos no se pueden comparar por valor. Incluso si dos tipos de datos no primitivos tienen las mismas propiedades y valores, no son estrictamente iguales.
+
+```js
+let nums = [1, 2, 3];
+let numberos = [1, 2, 3];
+
+console.log(nums == numbers); // Falso
+
+let usuarioUno = {
+ nombre: "Asabeneh",
+ papel: "teaching",
+ pais: "Finland",
+};
+
+let usuarioDos = {
+ nombre: "Asabeneh",
+ papel: "teaching",
+ pais: "Finland",
+};
+
+console.log(usuarioUno == usuarioDos); // Falso
+```
+
+Como regla general, no comparamos tipos de datos no primitivos. No compare matrices, funciones u objetos.
+Los valores no primitivos se conocen como tipos de referencia, porque se comparan por referencia en lugar de por valor. Dos objetos solo son estrictamente iguales si se refieren al mismo objeto subyacente.
+
+```js
+let nums = [1, 2, 3];
+let numberos = nums;
+
+console.log(nums == numbers); // Verdadero
+
+let usuarioUno = {
+ nombre: "Asabeneh",
+ papel: "teaching",
+ pais: "Finland",
+};
+
+let userTwo = userOne;
+
+console.log(usuarioUno == usuarioDos); // Verdadero
+```
+
+Si tiene dificultades comprendiendo la diferencia entre los tipos de datos primitivos y los tipos de datos no primitivos, no es el único. Cálmate y ve a la siguiente sección e intenta volver después de un tiempo. Ahora comencemos los tipos de datos por tipo de número.
+
+## Números
+
+Los números son números enteros y valores decimales que pueden hacer todas las operaciones aritméticas.
+Veamos algunos ejemplos de Números.
+
+### Declaración de tipos de datos numéricos
+
+```js
+let edad = 35;
+const gravedad = 9.81; // usamos const para valores que no cambian, constante gravitacional en m/s2
+let masa = 72; // masa en Kilogramo
+const PI = 3.14; // pi una constante geométrica
+
+// Más ejemplos
+const boilingPoint = 100; // temperatura en oC, punto de ebullición del agua que es una constante
+const bodyTemp = 37; // oC la temperatura corporal promedio del ser humano, que es una constante
+
+console.log(edad, gravedad, masa, PI, boilingPoint, bodyTemp);
+```
+
+### Objeto matemático
+
+En JavaScript, el objeto matemático proporciona muchos métodos para trabajar con números.
+
+```js
+const PI = Math.PI;
+
+console.log(PI); // 3.141592653589793
+
+// Redondeo al número más cercano
+// si es superior a 0,5 hacia arriba si es inferior a 0,5 redondeo hacia abajo
+
+console.log(Math.round(PI)); // 3 para redondear valores al número más cercano
+
+console.log(Math.round(9.81)); // 10
+
+console.log(Math.floor(PI)); // 3 redondeando hacia abajo
+
+console.log(Math.ceil(PI)); // 4 redondeando hacia arriba
+
+console.log(Math.min(-5, 3, 20, 4, 5, 10)); // -5, devuelve el valor mínimo
+
+console.log(Math.max(-5, 3, 20, 4, 5, 10)); // 20, devuelve el valor máximo
+
+const randNum = Math.random(); // crea un número aleatorio entre 0 y 0,999999
+console.log(randNum);
+
+// Vamos a crear un número aleatorio entre 0 y 10
+
+const num = Math.floor(Math.random() * 11); // crea un número aleatorio entre 0 y 10
+console.log(num);
+
+//Valor absoluto
+console.log(Math.abs(-10)); // 10
+
+//Raíz cuadrada
+console.log(Math.sqrt(100)); // 10
+
+console.log(Math.sqrt(2)); // 1.4142135623730951
+
+// Poder
+console.log(Math.pow(3, 2)); // 9
+
+console.log(Math.E); // 2.718
+
+// Logaritmo
+// Devuelve el logaritmo natural con base E de x, Math.log(x)
+console.log(Math.log(2)); // 0.6931471805599453
+console.log(Math.log(10)); // 2.302585092994046
+
+// Devuelve el logaritmo natural de 2 y 10 respectivamente
+console.log(Math.LN2); // 0.6931471805599453
+console.log(Math.LN10); // 2.302585092994046
+
+// Trigonometría
+Math.sin(0);
+Math.sin(60);
+
+Math.cos(0);
+Math.cos(60);
+```
+
+#### Generador de números aleatorios
+
+El objeto matemático de JavaScript tiene un generador de números de método random() que genera un número de 0 a 0.999999999...
+
+```js
+let randomNum = Math.random(); // genera 0 a 0.999...
+```
+
+Ahora, veamos cómo podemos usar el método random() para generar un número aleatorio entre 0 y 10:
+
+```js
+let randomNum = Math.random(); // 0 a 0.999
+let numBtnZeroAndTen = randomNum * 11;
+
+console.log(numBtnZeroAndTen); // esto da: min 0 y max 10.99
+
+let randomNumRoundToFloor = Math.floor(numBtnZeroAndTen);
+console.log(randomNumRoundToFloor); // esto da entre 0 y 10
+```
+
+## Cadenas
+
+Las cadenas son textos, que están debajo de **_single_** , **_double_**, **_back-tick_** comillas. Para declarar una cadena, necesitamos un nombre de variable, un operador de asignación, un valor entre comillas simples, comillas dobles o comillas invertidas.
+Veamos algunos ejemplos de cadenas:
+
+```js
+let espacio = " "; // una cadena de espacio vacío
+let primerNombre = "Asabeneh";
+let apellido = "Yetayeh";
+let pais = "Finland";
+let ciudad = "Helsinki";
+let idioma = "JavaScript";
+let trabajo = "teacher";
+let cita = "The saying,'Seeing is Believing' is not correct in 2020.";
+let quotConBackTick = `The saying,'Seeing is Believing' is not correct in 2020.`;
+```
+
+### Concatenación de cadenas
+
+La conexión de dos o más cadenas entre sí se llama concatenación.
+Usando las cadenas declaradas en la sección de Cadenas anterior:
+
+```js
+let nombreCompleto = primerNombre + espacio + apellido; // concatenación, fusionando dos cadenas juntas.
+console.log(nombreCompleto);
+```
+
+```sh
+Asabeneh Yetayeh
+```
+
+Podemos concatenar cadenas de diferentes formas.
+
+#### Concatenar usando el operador de suma
+
+Concatenar usando el operador de suma es una forma antigua. Esta forma de concatenar es tediosa y propensa a errores. Es bueno saber cómo concatenar de esta manera, pero recomiendo enfáticamente usar las cadenas de plantilla ES6 (explicadas más adelante).
+
+```js
+// Declarar diferentes variables de diferentes tipos de datos
+let espacio = " ";
+let primerNombre = "Asabeneh";
+let apellido = "Yetayeh";
+let pais = "Finland";
+let ciudad = "Helsinki";
+let idioma = "JavaScript";
+let trabajo = "teacher";
+let edad = 250;
+
+let nombreCompleto = primerNombre + espacio + apellido;
+let datosPersonaUno =
+ nombreCompleto + ". Yo tengo " + edad + ". Vivo en" + pais; // Adición de cadena ES5
+
+console.log(personInfoOne);
+```
+
+```sh
+Asabeneh Yetayeh. Yo tengo 250v Finland
+```
+
+#### Cadenas literales largas
+
+Una cadena puede ser un solo carácter, un párrafo o una página. Si la longitud de la cadena es demasiado grande, no cabe en una línea. Podemos usar el carácter de barra invertida (\\) al final de cada línea para indicar que la cadena continuará en la línea siguiente.
+**Ejemplo:**
+
+```js
+const parrafo =
+ "Mi nombre es Asabeneh Yetayeh. Vivo en Finlandia, Helsinki.\
+Soy profesora y me encanta enseñar. Enseño HTML, CSS, JavaScript, React, Redux, \
+Node.js, Python, Data Analysis y D3.js para cualquier persona interesada en aprender. \
+A fines de 2019, estaba pensando en expandir mi enseñanza y llegar a \
+a la audiencia global y comencé un desafío de Python del 20 de noviembre al 19 de diciembre.\
+Fue una de las experiencias más gratificantes e inspiradoras.\
+Ahora, estamos en 2020. Disfruto preparando el desafío 30DaysOfJavaScript y \
+Espero que tú también estés disfrutando.";
+
+console.log(parrafo);
+```
+
+#### Secuencias de escape en cadenas
+
+En JavaScript y otros lenguajes de programación \ seguido de algunos caracteres es una secuencia de escape. Veamos los caracteres de escape más comunes:
+
+-\n: nueva linea
+
+- \t: Tabulador, significa 8 espacios
+- \\\\: barra invertida
+- \\': Una frase (')
+- \\": comillas dobles (")
+
+```js
+console.log(
+ "Espero que todos estén disfrutando el desafío de 30 días de JavaScript.¿Y tú?"
+); // salto de línea
+console.log("Días\temasEjercicios");
+console.log("Día 1\t3\t5");
+console.log("Día 2\t3\t5");
+console.log("Día 3\t3\t5");
+console.log("Día 4\t3\t5");
+console.log("Este es un símbolo de barra invertida (\\)"); // Para escribir una barra invertida
+console.log(
+ 'En todos los lenguajes de programación comienza con "¡Hola, mundo!"'
+);
+console.log(
+ "En todos los lenguajes de programación comienza con '¡Hola, mundo!'"
+);
+console.log("El dicho 'Ver para creer' no es correcto en 2022");
+```
+
+Salida en consola:
+
+```sh
+Espero que todos estén disfrutando el desafío de 30 días de JavaScript.
+¿Y tú?
+
+Días temas Ejercicios
+Día 1 3 5
+Día 2 3 5
+Día 3 3 5
+Día 4 3 5
+Este es un símbolo de barra invertida (\)
+En todos los lenguajes de programación comienza con"¡Hola, mundo!"
+En todos los lenguajes de programación comienza con"¡Hola, mundo!"
+El dicho 'Ver para creer' no es correcto en 2022
+```
+
+#### Literales de plantilla
+
+Para crear una plantilla de cadenas(cadenas de plantilla), usamos dos tildes de retroceso. Podemos inyectar datos como expresiones dentro de una cadena de plantilla. Para inyectar datos, encerramos la expresión con un corchete ({}) precedido por un signo $. Consulte la sintaxis a continuación.
+
+```js
+//Sintaxis
+`Texto literal de cadena``Cadena de texto literal ${expresión}`;
+```
+
+**Ejemplo: 1**
+
+```js
+console.log(`La suma de 2 y 3 es 5`); // escribiendo estáticamente los datos
+let a = 2;
+let b = 3;
+console.log(`La suma de ${a} y ${b} es ${a + b}`); // inyectando los datos dinámicamente
+```
+
+**Ejemplo:2**
+
+```js
+let espacio = " ";
+let primerNombre = "Asabeneh";
+let apellido = "Yetayeh";
+let pais = "Finland";
+let ciudad = "Helsinki";
+let idioma = "JavaScript";
+let trabajo = "profesora";
+let edad = 250;
+let nombreCompleto = primerNombre + espacio + apellido;
+
+let personaInfoDos = `Soy ${nombreCompleto}. Tengo ${edad} años. Vivo en ${pais}.`; //ES6 - Método de interpolación de cadenas
+let personaInfoTres = `Soy ${nombreCompleto}. Vivo en ${ciudad}, ${pais}. Soy una ${trabajo}. Enseño ${idioma}.`;
+console.log(personaInfoDos);
+console.log(personaInfoTres);
+```
+
+```sh
+Soy Asabeneh Yetayeh. Tengo 250 años. Vivo en in Finland.
+Soy Asabeneh Yetayeh. Vivo en Helsinki, Finland. Soy una profesora. Enseño JavaScript.
+```
+
+Usando una plantilla de cadena o un método de interpolación de cadena, podemos agregar expresiones, que podrían ser un valor, o algunas operaciones (comparación, operaciones aritméticas, operación ternaria).
+
+```js
+let a = 2;
+let b = 3;
+console.log(`${a} es mayor que ${b}: ${a > b}`);
+```
+
+```sh
+2 es mayor que 3: false
+```
+
+### Métodos de cadena
+
+Todo en JavaScript es un objeto. Una cadena es un tipo de datos primitivo, lo que significa que no podemos modificarla una vez que se crea. El objeto de cadena tiene muchos métodos de cadena. Existen diferentes métodos de cadenas que nos pueden ayudar a trabajar con cadenas.
+
+1. _longitud_: el método de cadena _longitud_ devuelve el número de caracteres en una cadena incluido el espacio vacío.
+
+**Example:**
+
+```js
+let js = "JavaScript";
+console.log(js.length); // 10
+let primerNombre = "Asabeneh";
+console.log(primerNombre.length); // 8
+```
+
+2. _Acceder a los caracteres de una cadena_: Podemos acceder a cada carácter de una cadena usando su índice. En programación, el conteo comienza desde 0. El primer índice de la cadena es cero y el último índice es la longitud de la cadena menos uno.
+
+
+
+Accedamos a diferentes caracteres en la cadena '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()_: este método cambia la cadena a letras mayúsculas.
+
+```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()_: este método cambia la cadena a letras minúsculas.
+
+```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()_: Se necesitan dos argumentos, el índice inicial y el número de caracteres para dividir.
+
+```js
+let string = "JavaScript";
+console.log(string.substr(4, 6)); // Script
+
+let country = "Finland";
+console.log(country.substr(3, 4)); // land
+```
+
+6. _substring()_: Toma dos argumentos, el índice inicial y el índice final, pero no incluye el carácter en el índice final.
+
+```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()_: El método split divide una cadena en un lugar específico.
+
+```js
+let string = "30 Days Of JavaScript";
+
+console.log(string.split()); // Cambios en una matriz -> ["30 Days Of JavaScript"]
+console.log(string.split(" ")); // Dividir a una matriz en el espacio -> ["30", "Days", "Of", "JavaScript"]
+
+let firstName = "Asabeneh";
+
+console.log(firstName.split()); // Cambiar a una matriz - > ["Asabeneh"]
+console.log(firstName.split("")); // Dividir en una matriz en cada letra -> ["A", "s", "a", "b", "e", "n", "e", "h"]
+
+let countries = "Finland, Sweden, Norway, Denmark, and Iceland";
+
+console.log(countries.split(",")); // Dividir en cualquier matriz en coma -> ["Finland", " Sweden", " Norway", " Denmark", " and Iceland"]
+console.log(countries.split(", ")); // ["Finland", "Sweden", "Norway", "Denmark", "and Iceland"]
+```
+
+8. _trim()_: Elimina el espacio final al principio o al final de una cadena.
+
+```js
+let string = " 30 Days Of JavaScript ";
+
+console.log(string);
+console.log(string.trim(" "));
+
+let firstName = " Asabeneh ";
+
+console.log(firstName);
+console.log(firstName.trim()); // todavía elimina espacios al principio y al final de la cadena
+```
+
+```sh
+ 30 Days Of JavasCript
+30 Days Of JavasCript
+ Asabeneh
+Asabeneh
+```
+
+9. _includes()_: Toma un argumento de subcadena y verifica si existe un argumento de subcadena en la cadena. _includes()_ devuelve un valor booleano. Si existe una subcadena en una cadena, devuelve verdadero; de lo contrario, devuelve falso.
+
+```js
+let string = "30 Days Of JavaScript";
+
+console.log(string.includes("Days")); // verdadero
+console.log(string.includes("days")); // falso: ¡se distingue entre mayúsculas y minúsculas!
+console.log(string.includes("Script")); // verdadero
+console.log(string.includes("script")); // falso
+console.log(string.includes("java")); // falso
+console.log(string.includes("Java")); // verdadero
+
+let country = "Finland";
+
+console.log(country.includes("fin")); // falso
+console.log(country.includes("Fin")); // verdadero
+console.log(country.includes("land")); // verdadero
+console.log(country.includes("Land")); // falso
+```
+
+10. _replace()_: toma como parámetro la subcadena antigua y una nueva subcadena.
+
+```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()_: Toma índice y devuelve el valor en ese índice
+
+```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()_: Toma el índice y devuelve el código char (número ASCII) del valor en ese índice
+
+```js
+string.charCodeAt(index);
+```
+
+```js
+let string = "30 Days Of JavaScript";
+console.log(string.charCodeAt(3)); // D ASCII numbero es 68
+
+let lastIndex = string.length - 1;
+console.log(string.charCodeAt(lastIndex)); // t ASCII es 116
+```
+
+13. _indexOf()_: Toma una subcadena y si la subcadena existe en una cadena, devuelve la primera posición de la subcadena; si no existe, devuelve -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()_: Toma una subcadena y si la subcadena existe en una cadena, devuelve la última posición de la subcadena; si no existe, devuelve -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()_: toma muchas subcadenas y las une.
+
+```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_: toma una subcadena como argumento y verifica si la cadena comienza con esa subcadena especificada. Devuelve un valor booleano (verdadero o falso).
+
+```js
+//syntax
+string.startsWith(substring);
+```
+
+```js
+let string = "Love is the best to in this world";
+
+console.log(string.startsWith("Love")); // verdadero
+console.log(string.startsWith("love")); // falso
+console.log(string.startsWith("world")); // falso
+
+let country = "Finland";
+
+console.log(country.startsWith("Fin")); // verdadero
+console.log(country.startsWith("fin")); // falso
+console.log(country.startsWith("land")); // falso
+```
+
+17. _endsWith_: toma una subcadena como argumento y verifica si la cadena termina con esa subcadena especificada. Devuelve un valor booleano (verdadero o falso).
+
+```js
+string.endsWith(substring);
+```
+
+```js
+let string = "Love is the most powerful feeling in the world";
+
+console.log(string.endsWith("world")); // verdadero
+console.log(string.endsWith("love")); // falso
+console.log(string.endsWith("in the world")); // verdadero
+
+let country = "Finland";
+
+console.log(country.endsWith("land")); // verdadero
+console.log(country.endsWith("fin")); // falso
+console.log(country.endsWith("Fin")); // falso
+```
+
+18. _search_: toma una subcadena como argumento y devuelve el índice de la primera coincidencia. El valor de búsqueda puede ser una cadena o un patrón de expresión regular.
+
+```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_: toma una subcadena o un patrón de expresión regular como argumento y devuelve una matriz si hay una coincidencia; de lo contrario, devuelve un valor nulo. Veamos cómo se ve un patrón de expresión regular. Comienza con /signo y termina con /signo.
+
+```js
+let string = "love";
+let patternOne = /love/; // sin ninguna bandera
+let patternTwo = /love/gi; // g-significa buscar en todo el texto, i - no distingue entre mayúsculas y minúsculas
+```
+
+Coincidencia de sintaxis
+
+```js
+// sintaxis
+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"]
+```
+
+Extraigamos números del texto usando una expresión regular. Esta no es la sección de expresiones regulares, ¡no se asuste! Cubriremos las expresiones regulares más adelante.
+
+```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 con carácter de escape significa que d no es una d normal sino que actúa como un dígito
+// + significa uno o más dígitos,
+// si hay g después de eso, significa global, busque en todas partes.
+
+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()_: toma un número como argumento y devuelve la versión repetida de la cadena.
+
+```js
+string.repeat(n);
+```
+
+```js
+let string = "love";
+console.log(string.repeat(10)); // lovelovelovelovelovelovelovelovelovelove
+```
+
+## Comprobación de tipos de datos y conversión
+
+### Comprobación de tipos de datos
+
+Para comprobar el tipo de datos de una determinada variable utilizamos el método _typeof_.
+
+**Ejemplo:**
+
+```js
+// Diferentes tipos de datos javascript
+// Declaremos diferentes tipos de datos
+
+let firstName = 'Asabeneh' // cadena
+let lastName = 'Yetayeh' // cadena
+let pais = 'Finlandia'. // cadena
+let ciudad = 'Helsinki' // cadena
+let edad = 250 // numero, no es mi edad real, no te preocupes
+let trabajo // indefinido, porque no se asignó un valor
+
+console.log(typeof 'Asabeneh') // cadena
+console.log(typeof firstName) // cadena
+console.log(typeof 10) // numbero
+console.log(typeof 3.14) // numbero
+console.log(typeof true) // booleano
+console.log(typeof false) // booleano
+console.log(typeof NaN) // numbero
+console.log(typeof job) // indefinido
+console.log(typeof undefined) // indefinido
+console.log(typeof null) // objeto
+```
+
+### Cambio del tipo de datos
+
+- Casting: Conversión de un tipo de datos a otro tipo de datos. Usamos _parseInt()_, _parseFloat()_, _Number()_, _+ sign_, _str()_
+ Cuando hacemos operaciones aritméticas, los números de cadena deben convertirse primero en enteros o flotantes; de lo contrario, devuelve un error.
+
+#### Cadena a Int
+
+Podemos convertir el número de cadena en un número. Cualquier número dentro de una comilla es un número de cadena. Un ejemplo de un número de cadena: '10', '5', etc.
+Podemos convertir cadena a número usando los siguientes métodos:
+
+- parseInt()
+- Número()
+- Signo más (+)
+
+```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
+```
+
+#### Cadena a Floatante
+
+Podemos convertir un número flotante de cadena en un número flotante. Cualquier número flotante dentro de una comilla es un número flotante de cadena. Un ejemplo de un número flotante de cadena: '9.81', '3.14', '1.44', etc.
+Podemos convertir cadenas flotantes en números usando los siguientes métodos:
+
+- parseFloat()
+- Número()
+- Signo más (+)
+
+```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
+```
+
+#### Flotante a Int
+
+Podemos convertir números flotantes a enteros.
+Usamos el siguiente método para convertir float a int:
+
+- parseInt()
+
+```js
+let num = 9.81;
+let numInt = parseInt(num);
+
+console.log(numInt); // 9
+```
+
+🌕 Usted es maravilloso. Acabas de completar los desafíos del día 2 y estás dos pasos adelante en tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y tus músculos.
+
+## 💻 Día 2: Ejercicios
+
+### Ejercicio: Nivel 1
+
+1. Declare una variable llamada desafío y asígnele un valor inicial **'30 días de JavaScript'**.
+2. Imprima la cadena en la consola del navegador usando **console.log()**
+3. Imprima la **longitud** de la cadena en la consola del navegador usando _console.log()_
+4. Cambie todos los caracteres de cadena a letras mayúsculas usando el método **toUpperCase()**
+5. Cambie todos los caracteres de la cadena a letras minúsculas usando el método **toLowerCase()**
+6. Corta (segmenta) la primera palabra de la cadena usando el método **substr()** o **substring()**
+7. Corta la frase _Days Of JavaScript_ de _30 Days Of JavaScript_.
+8. Verifique si la cadena contiene una palabra **Script** usando el método **includes()**
+9. Divide la **cadena** en un **array** usando el método **split()**
+10. Divida la cadena 30 días de JavaScript en el espacio usando el método **split()**
+11. 'Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon' **divide** la cadena en la coma y cámbiala a una matriz.
+12. Cambie 30 días de JavaScript a 30 días de Python usando el método **replace()**.
+13. ¿Qué es el carácter en el índice 15 en la cadena '30 días de JavaScript'? Utilice el método **charAt()**.
+14. ¿Cuál es el código de carácter de J en la cadena '30 días de JavaScript' usando **charCodeAt()**
+15. Use **indexOf** para determinar la posición de la primera aparición de **a** en 30 días de JavaScript
+16. Utilice **lastIndexOf** para determinar la posición de la última aparición de **a** en 30 días de JavaScript.
+17. Usa **indexOf** para encontrar la posición de la primera aparición de la palabra **porque** en la siguiente oración:**'No puedes terminar una oración con porque porque porque es una conjunción'**
+18. Usa **lastIndexOf** para encontrar la posición de la última aparición de la palabra **porque** en la siguiente oración:**'No puedes terminar una oración con porque porque porque es una conjunción'**
+19. Usa **buscar** para encontrar la posición de la primera aparición de la palabra **porque** en la siguiente oración:**'No puedes terminar una oración con porque porque porque es una conjunción'**
+20. Use **trim()** para eliminar cualquier espacio en blanco final al principio y al final de una cadena. Por ejemplo, '30 días de JavaScript'.
+21. Use el método **startsWith()** con la cadena _30 días de JavaScript_ y haga que el resultado sea verdadero
+22. Use el método **endsWith()** con la cadena _30 días de JavaScript_ y haga que el resultado sea verdadero
+23. Usa el método **match()** para encontrar todos los **a** en 30 días de JavaScript
+24. Use **concat()** y fusione '30 días de' y 'JavaScript' en una sola cadena, '30 días de JavaScript'
+25. Use el método **repeat()** para imprimir 30 días de JavaScript 2 veces
+
+### Ejercicio: Nivel 2
+
+1. Usando console.log() imprima la siguiente declaración:
+
+ ```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. Usando console.log() imprima la siguiente cita de la Madre 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. Compruebe si typeof '10' es exactamente igual a 10. Si no, hágalo exactamente igual.
+4. Compruebe si parseFloat('9.8') es igual a 10, si no, hágalo exactamente igual a 10.
+5. Verifique si 'on' se encuentra tanto en Python como en la jerga
+6. _Espero que este curso no esté lleno de jerga_. Compruebe si _jargon_ está en la oración.
+7. Genere un número aleatorio entre 0 y 100 inclusive.
+8. Genere un número aleatorio entre 50 y 100 inclusive.
+9. Genere un número aleatorio entre 0 y 255 inclusive.
+10. Acceda a los caracteres de la cadena 'JavaScript' utilizando un número aleatorio.
+11. Use console.log() y caracteres de escape para imprimir el siguiente patrón.
+
+ ```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. Usa **substr** para separar la frase **porque porque porque** de la siguiente oración:**'No puedes terminar una oración con porque porque porque es una conjunción'**
+
+### Ejercicios: Nivel 3
+
+1. 'El amor es lo mejor que hay en este mundo. Algunos encontraron su amor y algunos todavía están buscando su amor. Cuente el número de palabras **amor** en esta oración.
+2. Usa **match()** para contar el número de todos los **porque** en la siguiente oración:**'No puedes terminar una oración con porque porque porque es una conjunción'**
+3. Limpia el siguiente texto y encuentra la palabra más frecuente (pista, usa replace y expresiones regulares).
+
+ ```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. Calcula el ingreso anual total de la persona extrayendo los números del siguiente texto. 'Él gana 5000 euros de salario por mes, bono anual de 10000 euros, cursos en línea de 15000 euros por mes.'
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 1](./readme.md) | [Day 3 >>](./dia_03_Booleanos_Operadores_Date/dia_03_Boleanos_Operadores_Date.md)
diff --git a/Spanish/dia_03_Booleanos_Operadores_Date/dia_03_Boleanos_Operadores_Date.md b/Spanish/dia_03_Booleanos_Operadores_Date/dia_03_Boleanos_Operadores_Date.md
new file mode 100644
index 000000000..dc3e405d8
--- /dev/null
+++ b/Spanish/dia_03_Booleanos_Operadores_Date/dia_03_Boleanos_Operadores_Date.md
@@ -0,0 +1,632 @@
+
+
30 Días De JavaScript: Booleanos, Operadores, Date
+
+[<< Día 2](../dia_02_tipos_de_datos.md) | [Día 4 >>](../dia_04_Condicionales/dia_04_Condicionales.md)
+
+
+
+- [📔 Día 3](#-day-3)
+ - [Booleanos](#booleanos)
+ - [Valores verdaderos](#valores-verdaderos)
+ - [Valores falsos](#valores-falsos)
+ - [Undefined](#undefined)
+ - [Null](#null)
+ - [Operadores](#operadores)
+ - [Operadores de Asignación](#operadores-de-asignación)
+ - [Operadores Aritméticos](#operadores-aritméticos)
+ - [Operadores de Comparación](#operadores-de-comparación)
+ - [Operadores Lógicos](#operadores-lógicos)
+ - [Operadores de Incremento](#operadores-de-incremento)
+ - [Operadores de Decremento](#operadores-de-decremento)
+ - [Operadores Ternarios](#operadores-ternarios)
+ - [Precedencia de Operadores](#precedencia-de-operadores)
+ - [Métodos Window](#métodos-window)
+ - [Método Window alert()](#método-window-alert)
+ - [Método Window prompt() ](#método-window-prompt)
+ - [Método Window confirm() ](#método-window-confirm)
+ - [Objeto Date](#objeto-date)
+ - [Crear un objeto de tiempo](#crear-un-objeto-de-tiempo)
+ - [Obtener el año completo](#obtener-el-año-completo)
+ - [Obtener mes](#obtener-mes)
+ - [Obtener fecha](#obtener-fecha)
+ - [Obtener día](#obtener-día)
+ - [Obtener horas](#obtener-horas)
+ - [Obtener minutos](#obtener-minutos)
+ - [Obtener segundos](#obtener-segundos)
+ - [Obtener tiempo](#obtener-tiempo)
+ - [💻 Día 3: Ejercicios](#💻-día-3-ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+ - [Ejercicios: Nivel 2](#ejercicios-nivel-2)
+ - [Ejercicios: Nivel 3](#ejercicios-nivel-3)
+
+# 📔 Day 3
+
+## Booleanos
+
+Un tipo de dato booleano representa uno de los dos valores: _true_ o _false_. El valor booleano es true (verdadero) o false (falso) El uso de estos tipos de datos quedará claro cuando veas operadores de comparación. Cualquier comparación devuelve un valor booleano que es true o false.
+
+**Ejemplos: Valores Booleanos**
+
+```js
+let isLightOn = true;
+let isRaining = false;
+let isHungry = false;
+let isMarried = true;
+let truValue = 4 > 3; // true
+let falseValue = 4 < 3; // false
+```
+
+Acordamos que los valores booleanos son true o false.
+
+### Valores verdaderos
+
+- Todos los números (positivos y negativos) son verdaderos excepto cero
+- Todos las string (cadenas) son verdaderos excepto un string vacío ('')
+- El booleano true
+
+### Valores falsos
+
+- 0
+- 0n
+- null
+- undefined
+- NaN
+- El booleano false
+- '', "", ``, string vacío
+
+Es bueno recordar esos valores verdaderos y falsos. En una sección posterior, los usaremos con condiciones para tomar decisiones.
+
+## Undefined
+
+Si declaramos una variable y no le asignamos un valor, el valor será undefined (indefinido). Además de esto, si una función no devuelve el valor, será undefined.
+
+```js
+let firstName;
+console.log(firstName); //no definido, porque aún no está asignado un valor
+```
+
+## Null
+
+```js
+let empty = null;
+console.log(empty); // -> null (nulo) , significa que no tiene valor
+```
+
+## Operadores
+
+### Operadores de Asignación
+
+Un signo igual en JavaScript es un operador de asignación. Se utiliza para asignar una variable.
+
+```js
+let firstName = "Asabeneh";
+let country = "Finland";
+```
+
+Operadores de asignación
+
+
+
+### Operadores Aritméticos
+
+Los operadores aritméticos son operadores matemáticos.
+
+- Suma(+): a + b
+- Resta(-): a - b
+- Multiplicación(\*): a \* b
+- División(/): a / b
+- Módulo(%): a % b
+- Exponencial(**): a ** b
+
+```js
+let numOne = 4;
+let numTwo = 3;
+let sum = numOne + numTwo;
+let diff = numOne - numTwo;
+let mult = numOne * numTwo;
+let div = numOne / numTwo;
+let remainder = numOne % numTwo;
+let powerOf = numOne ** numTwo;
+
+console.log(sum, diff, mult, div, remainder, powerOf); // 7,1,12,1.33,1, 64
+```
+
+```js
+const PI = 3.14;
+let radius = 100; // longitud en metros
+
+//Calculemos el área de un circulo
+const areaOfCircle = PI * radius * radius;
+console.log(areaOfCircle); // 314 m
+
+const gravity = 9.81; // en m/s2
+let mass = 72; // en Kilogram
+
+// Calculemos el peso de un objeto.
+const weight = mass * gravity;
+console.log(weight); // 706.32 N(Newton)
+
+const boilingPoint = 100; // temperatura en °C, punto de ebullición del agua
+const bodyTemp = 37; // temperatura corporal en °C
+
+// Concatenación de string con números usando interpolación de strings
+/*
+ El punto de ebullición del agua es de 100 °C.
+ La temperatura del cuerpo humano es de 37 oC.
+ La gravedad de la tierra es de 9.81 m/s2.
+ */
+console.log(
+ `El punto de ebullición del agua es de ${boilingPoint} °C.\nLa temperatura del cuerpo humano es de ${bodyTemp} °C.\nLa gravedad de la tierra es de ${gravity} m / s2.`
+);
+```
+
+### Operadores de Comparación
+
+En programación comparamos valores, usamos operadores de comparación para comparar dos valores. Comprobamos si un valor es mayor, menor o igual a otro valor.
+
+
+**Ejemplos: Operadores de Comparación**
+
+```js
+console.log(3 > 2); // true, porque 3 es mayor que 2
+console.log(3 >= 2); // true, porque 3 es mayor que 2
+console.log(3 < 2); // false, porque 3 es mayor que 2
+console.log(2 < 3); // true, porque 2 es menor que 3
+console.log(2 <= 3); // true, porque 2 es menor que 3
+console.log(3 == 2); // false, porque 3 no es igual a 2
+console.log(3 != 2); // true, porque 3 no es igual a 2
+console.log(3 == "3"); // true, compara solamente el valor
+console.log(3 === "3"); // false, compara tanto el valor como el tipo de dato
+console.log(3 !== "3"); // true, compara tanto el valor como el tipo de dato
+console.log(3 != 3); // false, compara solo valor
+console.log(3 !== 3); // false, compara tanto el valor como el tipo de dato
+console.log(0 == false); // true, equivalente
+console.log(0 === false); // false, No exactamente igual
+console.log(0 == ""); // true, equivalente
+console.log(0 == " "); // true, equivalente
+console.log(0 === ""); // false, No exactamente igual
+console.log(1 == true); // true, equivalente
+console.log(1 === true); // false, No exactamente igual
+console.log(undefined == null); // true
+console.log(undefined === null); // false
+console.log(NaN == NaN); // false, diferente
+console.log(NaN === NaN); // false
+console.log(typeof NaN); // tipo número
+
+console.log("mango".length == "avocado".length); // false
+console.log("mango".length != "avocado".length); // true
+console.log("mango".length < "avocado".length); // true
+console.log("milk".length == "meat".length); // true
+console.log("milk".length != "meat".length); // false
+console.log("tomato".length == "potato".length); // true
+console.log("python".length > "dragon".length); // false
+```
+
+Trate de entender las comparaciones anteriores con algo de lógica. Recuerde que ninguna lógica puede ser difícil.
+JavaScript es de alguna manera un lenguaje extraño de programación. El código JavaScript se ejecuta y le da un resultado, pero a menos que sea bueno en él, puede que no sea el resultado deseado.
+
+Como regla general, si un valor no es verdadero con == no será igual con ===. Usar === es más seguro que usar ==. El siguiente [link](https://dorey.github.io/JavaScript-Equality-Table/) tiene una lista exhaustiva de comparaciones de tipos de datos.
+
+### Operadores Lógicos
+
+Los siguientes símbolos son los operadores lógicos más comunes:
+&&(ampersand) , ||(pipe) and !(negation).
+El operador && se vuelve verdadero sólo si los dos operandos son verdaderos.
+El operador || se vuelve verdadero cualquiera de los operandos es verdadero.
+El operador ! niega true a false y false a true.
+
+```js
+// && ejemplo de operador ampersand
+
+const check = 4 > 3 && 10 > 5; // true && true -> true
+const check = 4 > 3 && 10 < 5; // true && false -> false
+const check = 4 < 3 && 10 < 5; // false && false -> false
+
+// || ejemplo de operador pipe
+
+const check = 4 > 3 || 10 > 5; // true || true -> true
+const check = 4 > 3 || 10 < 5; // true || false -> true
+const check = 4 < 3 || 10 < 5; // false || false -> false
+
+//! ejemplos de negación
+
+let check = 4 > 3; // true
+let check = !(4 > 3); // false
+let isLightOn = true;
+let isLightOff = !isLightOn; // false
+let isMarried = !false; // true
+```
+
+### Operadores de Incremento
+
+En JavaScript usamos el operador de incremento para aumentar un valor almacenado en una variable. El incremento podría ser antes o después del incremento. Veamos cada uno de ellos:
+
+1. Pre-incremento
+
+```js
+let count = 0;
+console.log(++count); // 1
+console.log(count); // 1
+```
+
+1. Post-incremento
+
+```js
+let count = 0;
+console.log(count++); // 0
+console.log(count); // 1
+```
+
+Usamos la mayor parte del tiempo post-incremento. Pero debes recordar cómo usar el operador de incremento posterior.
+
+### Operadores de Decremento
+
+En JavaScript usamos el operador de decremento para disminuir un valor almacenado en una variable. El decremento puede ser previo o posterior al decremento. Veamos cada uno de ellos:
+
+1. Pre-decremento
+
+```js
+let count = 0;
+console.log(--count); // -1
+console.log(count); // -1
+```
+
+2. Post-decremento
+
+```js
+let count = 0;
+console.log(count--); // 0
+console.log(count); // -1
+```
+
+### Operadores Ternarios
+
+El operador ternario permite escribir una condición.
+Otra forma de escribir condicionales es usando operadores ternarios. Mira los siguientes ejemplos:
+
+```js
+let isRaining = true;
+isRaining
+ ? console.log("Necesitas un impermeable.")
+ : console.log("No necesitas un impermeable.");
+isRaining = false;
+
+isRaining
+ ? console.log("Necesitas un impermeable.")
+ : console.log("No necesitas un impermeable.");
+```
+
+```sh
+Necesitas un impermeable.
+No necesitas un impermeable.
+```
+
+```js
+let number = 5;
+number > 0
+ ? console.log(`${number} is a positive number`)
+ : console.log(`${number} is a negative number`);
+number = -5;
+
+number > 0
+ ? console.log(`${number} is a positive number`)
+ : console.log(`${number} is a negative number`);
+```
+
+```sh
+5 es un número positivo
+-5 es un número negativo
+```
+
+### Precedencia de Operadores
+
+Me gustaría recomendarle que lea sobre la precedencia de operadores en el siguiente [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)
+
+## Métodos Window
+
+### Método Window alert()
+
+Cómo ha visto al principio, el método alert() muestra un cuadro de alerta con un mensaje específico y un botón Aceptar. Es un método incorporado y toma un argumento.
+
+```js
+alert(message);
+```
+
+```js
+alert("Bienvenido a 30DaysOfJavaScript");
+```
+
+No uses demasiada alert (alertas) porque molesta, úsala solo para probar.
+
+### Método Window prompt()
+
+Los métodos window prompt (entrada) muestran un cuadro de solicitud con una entrada en su navegador para tomar valores de entrada y los datos de entrada se pueden almacenar en una variable. El método prompt() toma dos argumentos. El segundo argumento es opcional.
+
+```js
+prompt("texto requerido", "texto opcional");
+```
+
+```js
+let number = prompt("Ingrese un número", "El número va aquí");
+console.log(number);
+```
+
+### Método Window confirm()
+
+El método confirm() muestra un cuadro de diálogo con un mensaje específico, junto con un botón Aceptar y Cancelar. Un cuadro de confirmación se usa a menudo para pedir permiso a un usuario para ejecutar algo. Window confirm() toma una cadena como argumento. Al hacer clic en Aceptar se obtiene un valor true, mientras que al hacer clic en el botón Cancelar se obtiene un valor false.
+
+```js
+const agree = confirm("¿Estás seguro de que quieres eliminar? ");
+console.log(agree); // el resultado será true o false según el click en el cuadro de diálogo
+```
+
+Estos no son todos los métodos de window, tendremos una sección separada para profundizar en los métodos de window.
+
+## Objeto Date
+
+El tiempo es una cosa importante. Nos gusta saber la hora de una determinada actividad o evento. En JavaScript, la hora y la fecha actuales se crean utilizando el objeto Date de JavaScript. El objeto que creamos usando el objeto Date proporciona muchos métodos para trabajar con fecha y hora. Los métodos que usamos para obtener información de fecha y hora de los valores de un objeto Date comienzan con una palabra _get_ porque proporciona la información.
+_getFullYear(), getMonth(), getDate(), getDay(), getHours(), getMinutes, getSeconds(), getMilliseconds(), getTime(), getDay()_
+
+
+
+### Crear un objeto de tiempo
+
+Una vez que creamos el objeto de tiempo. El objeto de tiempo proporcionará información sobre el tiempo. Vamos a crear un objeto de tiempo
+
+```js
+const now = new Date();
+console.log(now); // Sáb 04 de enero de 2020 00:56:41 GMT+0200 (hora estándar de Europa del Este
+```
+
+Hemos creado un objeto de tiempo y podemos acceder a cualquier información de fecha y hora del objeto utilizando los métodos de obtención que hemos mencionado en la tabla.
+
+### Obtener el año completo
+
+Extraigamos u obtengamos el año completo de un objeto de tiempo.
+
+```js
+const now = new Date();
+console.log(now.getFullYear()); // 2020
+```
+
+### Obtener mes
+
+Extraigamos u obtengamos el mes de un objeto de tiempo.
+
+```js
+const now = new Date();
+console.log(now.getMonth()); // 0, porque el mes es enero, meses(0-11)
+```
+
+### Obtener fecha
+
+Extraigamos u obtengamos la fecha del mes de un objeto de tiempo.
+
+```js
+const now = new Date();
+console.log(now.getDate()); // 4, porque es el 4to dia del mes, día (1-31)
+```
+
+### Obtener día
+
+Extraigamos u obtengamos el día de la semana de un objeto de tiempo.
+
+```js
+const now = new Date();
+console.log(now.getDay()); // 6, porque el día es sábado que es el día 7
+// El domingo es 0, el lunes es 1 y el sábado es 6
+// Obtener el día de la semana como un número (0-6)
+```
+
+### Obtener horas
+
+Extraigamos u obtengamos las horas de un objeto de tiempo.
+
+```js
+const now = new Date();
+console.log(now.getHours()); // 0, porque el tiempo es 00:56:41
+```
+
+### Obtener minutos
+
+Extraigamos u obtengamos los minutos de un objeto de tiempo.
+
+```js
+const now = new Date();
+console.log(now.getMinutes()); // 56, porque el tiempo es 00:56:41
+```
+
+### Obtener segundos
+
+Extraigamos u obtengamos los segundos de un objeto de tiempo.
+
+```js
+const now = new Date();
+console.log(now.getSeconds()); // 41, porque el tiempo es 00:56:41
+```
+
+### Obtener tiempo
+
+Este método da tiempo en milisegundos a partir del 1 de enero de 1970. También se conoce como tiempo Unix. Podemos obtener el tiempo de Unix de dos maneras:
+
+1. Usando _getTime()_
+
+```js
+const now = new Date(); //
+console.log(now.getTime()); // 1578092201341, este es el número de segundos que han pasado desde el 1ero de Enero de 1970 al 4 de Enero del 2020 00:56:41
+```
+
+2. Usando _Date.now()_
+
+```js
+const allSeconds = Date.now(); //
+console.log(allSeconds); // 1578092201341, este es el número de segundos que han pasado desde el 1ero de Enero de 1970 al 4 de Enero del 2020 00:56:41
+
+const timeInSeconds = new Date().getTime();
+console.log(allSeconds == timeInSeconds); // true
+```
+
+Vamos a formatear estos valores a un formato de tiempo legible por humanos.
+**Ejemplo:**
+
+```js
+const now = new Date();
+const year = now.getFullYear(); // return años
+const month = now.getMonth() + 1; // return meses(0 - 11)
+const date = now.getDate(); // return días (1 - 31)
+const hours = now.getHours(); // return horas (0 - 23)
+const minutes = now.getMinutes(); // return minutos (0 -59)
+
+console.log(`${date}/${month}/${year} ${hours}:${minutes}`); // 4/1/2020 0:56
+```
+
+🌕 Tienes una energía ilimitada. Acabas de completar los desafíos del día 3 y estás a tres pasos de tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y tus músculos.
+
+## 💻 Día 3: Ejercicios
+
+### Ejercicios: Nivel 1
+
+1. Declare las siguientes variables; firstName, lastName, country, city, age, isMarried, year y asignar un valor, use el operador typeof para verificar diferentes tipos de datos.
+2. Verifique si typeof '10' es igual a 10
+3. Verifique si parseInt('9.8') es igual a 10
+4. Verifique cualquier valor booleano true o false.
+
+ 1. Escriba tres declaraciones de JavaScript que proporcionen un valor verdadero.
+ 2. Escriba tres declaraciones de JavaScript que proporcionen un valor falso.
+
+5. Calcule primero el resultado de la siguiente expresión de comparación sin usar console.log(). Después de decidir el resultado, confirmelo usando console.log()
+
+ 1. 4 > 3
+ 2. 4 >= 3
+ 3. 4 < 3
+ 4. 4 <= 3
+ 5. 4 == 4
+ 6. 4 === 4
+ 7. 4 != 4
+ 8. 4 !== 4
+ 9. 4 != '4'
+ 10. 4 == '4'
+ 11. 4 === '4'
+ 12. Encuentre la longitud de Python y jargon y haga una declaración de comparación falsa.
+
+6. Calcule primero el resultado de las siguientes expresiones sin usar console.log(). Después de decidir el resultado, confirmelo usando console.log()
+
+ 1. 4 > 3 && 10 < 12
+ 2. 4 > 3 && 10 > 12
+ 3. 4 > 3 || 10 < 12
+ 4. 4 > 3 || 10 > 12
+ 5. !(4 > 3)
+ 6. !(4 < 3)
+ 7. !(false)
+ 8. !(4 > 3 && 10 < 12)
+ 9. !(4 > 3 && 10 > 12)
+ 10. !(4 === '4')
+ 11. No hay 'on' tanto en dragon como en python
+
+7. Utilice el objeto Date para realizar las siguientes actividades
+ 1. ¿Qué año es hoy?
+ 2. ¿Qué mes es hoy con un número?
+ 3. ¿Qué fecha es hoy?
+ 4. ¿Qué día es hoy con un número?
+ 5. ¿Cuál es la hora actual?
+ 6. ¿Cuántos minutos hay actualmente?
+ 7. Averigüe el número de segundos transcurridos desde el 1 de enero de 1970 hasta ahora.
+
+### Ejercicios: Nivel 2
+
+1. Escriba un script que solicite al usuario que ingrese la base y la altura del triángulo y calcule el área de un triángulo (área = 0,5 x b x h).
+
+ ```sh
+ Ingrese base: 20
+ Ingrese altura: 10
+ El área del triángulo es: 100
+ ```
+
+1. Escriba un script que solicite al usuario que ingrese el lado a, el lado b y el lado c del triángulo y calcule el perímetro del triángulo (perímetro = a + b + c)
+
+ ```sh
+ Ingrese lado a: 5
+ Ingrese lado b: 4
+ Ingrese lado c: 3
+ El perimetro del triangulo es: 12
+ ```
+
+1. Obtenga el largo y el ancho usando prompt y calcule el área del rectángulo (área = largo x ancho y el perímetro del rectángulo (perímetro = 2 x (largo + ancho))
+1. Obtenga el radio usando prompt y calcule el área de un círculo (área = pi x r x r) y la circunferencia de un círculo (c = 2 x pi x r) donde pi = 3.14.
+1. Calcule la pendiente, la intersección X y la intersección Y de y = 2x -2
+1. La pendiente es m = (y2-y1)/(x2-x1). Encuentra la pendiente entre el punto (2, 2) y el punto (6,10)
+1. Compare la pendiente de las dos preguntas anteriores.
+1. Calcula el valor de y (y = x2 + 6x + 9). Trate de usar diferentes valores de x y averigüe en qué valor de x y es 0.
+1. Escriba un script con prompt que solicite al usuario que ingrese las horas y la tarifa por hora. ¿Calcular el salario de la persona?
+
+ ```sh
+ Ingrese horas: 40
+ Introduce la tarifa por hora: 28
+ Su ganancia semanal es 1120
+ ```
+
+1. Si la longitud de su nombre es mayor que 7, diga que su nombre es largo; de lo contrario, diga que su nombre es corto.
+1. Compare la longitud de su nombre y la longitud de su apellido y debería obtener este resultado.
+
+ ```js
+ let firstName = "Asabeneh";
+ let lastName = "Yetayeh";
+ ```
+
+ ```sh
+ Tu primer nombre, Asabeneh, es más largo que tu apellido, Yetayeh.
+ ```
+
+1. Declare dos variables _myAge_ y _yourAge_ y asignarles los valores iniciales y myAge y yourAge.
+
+ ```js
+ let myAge = 250;
+ let yourAge = 25;
+ ```
+
+ ```sh
+ Soy 225 años mayor que tú.
+ ```
+
+1. Usando prompt, obtenga el año en que nació el usuario y, si el usuario tiene 18 años o más, permita que el usuario conduzca, si no dígale que espere una cierta cantidad de años.
+
+ ```sh
+
+ Introduzca el año de nacimiento: 1995
+ Tienes 25 años. Tienes la edad suficiente para conducir.
+
+ Introduzca el año de nacimiento: 2005
+ Tienes 15 años. Podrás conducir después de 3 años.
+ ```
+
+1. Escriba un script que solicite por prompt al usuario que ingrese el número de años. Calcular el número de segundos que puede vivir una persona. Supongamos que alguien vive solo cien años
+
+ ```sh
+ Ingrese el número de años de vida: 100
+ Viviste 3153600000 segundos.
+ ```
+
+1. Cree un formato de hora legible por humanos usando el objeto Date.
+ 1. YYYY-MM-DD HH:mm
+ 2. DD-MM-YYYY HH:mm
+ 3. DD/MM/YYYY HH:mm
+
+### Ejercicios: Nivel 3
+
+1. Cree un formato de hora legible por humanos usando el objeto Date. La hora y el minuto deben ser siempre dos dígitos (7 horas deben ser 07 y 5 minutos deben ser 05)
+ 1. YYY-MM-DD HH:mm eg. 20120-01-02 07:05
+
+[<< Día 2](../dia_02_tipos_de_datos.md) | [Día 4 >>](../dia_04_Condicionales/dia_04_Condicionales.md)
diff --git a/Spanish/dia_04_Condicionales/dia_04_Condicionales.md b/Spanish/dia_04_Condicionales/dia_04_Condicionales.md
new file mode 100644
index 000000000..57131824d
--- /dev/null
+++ b/Spanish/dia_04_Condicionales/dia_04_Condicionales.md
@@ -0,0 +1,376 @@
+
+
+[<< Día 3](../dia_03_Booleanos_Operadores_Date/dia_03_Boleanos_Operadores_Date.md) | [Día 5 >>](../dia_05_Arreglos/dia_05_arreglos.md)
+
+
+
+- [📔 Día 4](#📔-día-4)
+ - [Condicionales](#condicionales)
+ - [If](#if)
+ - [If Else](#if-else)
+ - [If Else if Else](#if-else-if-else)
+ - [Switch](#switch)
+ - [Operadores Ternarios](#operadores-ternarios)
+ - [💻 Ejercicios](#💻-ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+ - [Ejercicios: Nivel 2](#ejercicios-nivel-2)
+ - [Ejercicios: Nivel 3](#ejercicios-nivel-3)
+
+# 📔 Día 4
+
+## Condicionales
+
+Las declaraciones condicionales se utilizan para tomar decisiones basadas en diferentes condiciones. De forma predeterminada, las declaraciones en el script de JavaScript se ejecutan secuencialmente de arriba a abajo. Si la lógica de procesamiento lo requiere, el flujo secuencial de ejecución se puede alterar de dos formas:
+
+- Ejecución condicional: se ejecutará un bloque de una o más sentencias si cierta expresión es true
+- Ejecución repetitiva: un bloque de una o más sentencias se ejecutará de forma repetitiva siempre que cierta expresión sea verdadera. En esta sección, cubriremos las declaraciones _if_, _else_ y _else if_. Los operadores lógicos y de comparación que aprendimos en las secciones anteriores serán útiles aquí.
+
+Las condiciones se pueden implementar de las siguientes maneras:
+
+- if
+- if else
+- if else if else
+- switch
+- operador ternario
+
+### If
+
+En JavaScript y otros lenguajes de programación, la palabra clave _if_ se usa para verificar si una condición es true y ejecutar el bloque de código. Para crear una condición if, necesitamos la palabra clave _if_, la condición va dentro de paréntesis y el bloque de código va dentro de llaves ({}).
+
+```js
+// sintaxis
+if (condition) {
+ //esta parte del código se ejecuta cuando es true
+}
+```
+
+**Example:**
+
+```js
+let num = 3;
+if (num > 0) {
+ console.log(`${num} es un número positivo`);
+}
+// 3 es un número positivo
+```
+
+Como puede ver en el ejemplo de condición anterior, 3 es mayor que 0, por lo que es un número positivo. La condición era true y se ejecutó el bloque de código. Sin embargo, si la condición es falsa, no veremos ningún resultado.
+
+```js
+let isRaining = true;
+if (isRaining) {
+ console.log("Recuerda llevar tu impermeable.");
+}
+```
+
+Lo mismo ocurre con la segunda condición, si isRaining es false, el bloque if no se ejecutará y no veremos ninguna respuesta. Para ver el resultado de una condición false, debemos tener otro bloque, que será _else_.
+
+### If Else
+
+Si la condición es true, se ejecutará el primer bloque, si no, se ejecutará la condición else.
+
+```js
+// sintaxis
+if (condition) {
+ // esta parte del código se ejecuta para la condición de verdad
+} else {
+ // esta parte del código se ejecuta para una condición falsa
+}
+```
+
+```js
+let num = 3;
+if (num > 0) {
+ console.log(`${num} es un número positivo`);
+} else {
+ console.log(`${num} es un número negativo`);
+}
+// 3 es un número positivo
+
+num = -3;
+if (num > 0) {
+ console.log(`${num} es un número positivo`);
+} else {
+ console.log(`${num} es un número negativo`);
+}
+// -3 es un número negativo
+```
+
+```js
+let isRaining = true;
+if (isRaining) {
+ console.log("Necesitas un impermeable.");
+} else {
+ console.log("No hay necesidad de un impermeable.");
+}
+// Necesitas un impermeable.
+
+isRaining = false;
+if (isRaining) {
+ console.log("Necesitas un impermeable.");
+} else {
+ console.log("No hay necesidad de un impermeable.");
+}
+// No hay necesidad de un impermeable.
+```
+
+La última condición es falsa, por lo que se ejecutó el bloque else. ¿Qué pasa si tenemos más de dos condiciones? En ese caso, usaremos las condiciones _else if_.
+
+### If Else if Else
+
+En nuestra vida, tomamos decisiones diariamente. Tomamos decisiones no comprobando una o dos condiciones, sino que tomamos decisiones basadas en múltiples condiciones. Al igual que nuestra vida diaria, la programación también está llena de condiciones. Usamos _else if_ cuando tenemos múltiples condiciones.
+
+```js
+// sintaxis
+if (condition) {
+ // código
+} else if (condition) {
+ // código
+} else {
+ // código
+}
+```
+
+**Ejemplo:**
+
+```js
+let a = 0;
+if (a > 0) {
+ console.log(`${a} es un número positivo`);
+} else if (a < 0) {
+ console.log(`${a} es un número negativo`);
+} else if (a == 0) {
+ console.log(`${a} es cero`);
+} else {
+ console.log(`${a} no es un número`);
+}
+```
+
+```js
+// if else if else
+let weather = "sunny";
+if (weather === "rainy") {
+ console.log("Necesitas un impermeable.");
+} else if (weather === "cloudy") {
+ console.log("Puede que haga frío, necesitas una chaqueta.");
+} else if (weather === "sunny") {
+ console.log("Sal tranquilo.");
+} else {
+ console.log("No hay necesidad de un impermeable.");
+}
+```
+
+### Switch
+
+Switch es una alternativa para **if else if else else**.
+La instrucción switch comienza con una palabra clave _switch_ seguida de un paréntesis y un bloque de código. Dentro del bloque de código tendremos diferentes casos. El bloque de casos se ejecuta si el valor en el paréntesis de la declaración de cambio coincide con el valor del caso. La declaración de break es para terminar la ejecución. Esto para que la ejecución del código se detenga después de que se cumpla la condición. El bloque default se ejecuta si todos los casos no cumplen la condición.
+
+```js
+switch (caseValue) {
+ case 1:
+ // código
+ break;
+ case 2:
+ // código
+ break;
+ case 3:
+ // código
+ break;
+ default:
+ // código
+}
+```
+
+```js
+let weather = "cloudy";
+switch (weather) {
+ case "rainy":
+ console.log("Necesitas un impermeable.");
+ break;
+ case "cloudy":
+ console.log("Puede que haga frío, necesitas una chaqueta.");
+ break;
+ case "sunny":
+ console.log("Sal tranquilo.");
+ break;
+ default:
+ console.log("No hay necesidad de un impermeable.");
+}
+
+// Más Ejemplos switch
+let dayUserInput = prompt("¿Qué día es hoy?");
+let day = dayUserInput.toLowerCase();
+
+switch (day) {
+ case "lunes":
+ console.log("Hoy es Lunes");
+ break;
+ case "martes":
+ console.log("Hoy es Martes");
+ break;
+ case "miércoles":
+ console.log("Hoy es Miércoles");
+ break;
+ case "jueves":
+ console.log("Hoy es Jueves");
+ break;
+ case "viernes":
+ console.log("Hoy es Viernes");
+ break;
+ case "sábado":
+ console.log("Hoy es Sábado");
+ break;
+ case "domingo":
+ console.log("Hoy es Domingo");
+ break;
+ default:
+ console.log("No es un día de semana.");
+}
+```
+
+// Ejemplos de condiciones en los casos
+
+```js
+let num = prompt("Ingrese un número");
+switch (true) {
+ case num > 0:
+ console.log("El número es positivo");
+ break;
+ case num == 0:
+ console.log("El número es cero");
+ break;
+ case num < 0:
+ console.log("El número es negativo");
+ break;
+ default:
+ console.log("El valor ingresado no era un número");
+}
+```
+
+### Operadores Ternarios
+
+Otra forma de escribir condicionales es usando operadores ternarios. Hemos cubierto esto en otras secciones, pero también deberíamos mencionarlo aquí.
+
+```js
+let isRaining = true;
+isRaining
+ ? console.log("Necesitas un impermeable.")
+ : console.log("No hay necesidad de un impermeable.");
+```
+
+🌕 Tienes una energía ilimitada. Acabas de completar los desafíos del día 4 y llevas cuatro pasos de tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y tus músculos.
+
+## 💻 Ejercicios
+
+### Ejercicios: Nivel 1
+
+1. Obtenga la entrada del usuario usando el aviso ("Ingrese su edad:"). Si el usuario tiene 18 años o más, muestre el mensaje: 'Tiene la edad suficiente para conducir', pero si no tiene 18 años, brinde otro mensaje que indique que debe esperar la cantidad de años que necesita para cumplir 18.
+
+ ```sh
+ Ingrese su edad: 30
+ Tiene la edad suficiente para conducir.
+
+ Ingrese su edad:15
+ Te faltan 3 años para conducir.
+ ```
+
+1. Compara los valores de myAge y yourAge usando if... else. Según la comparación, registre el resultado en la consola indicando quién es mayor (tú o yo). Utilice prompt(“Ingrese su edad:”) para obtener la edad como entrada.
+
+ ```sh
+ Ingrese su edad: 30
+ Eres 5 años mayor que yo.
+ ```
+
+1. Si a es mayor que b, devuelve 'a es mayor que b'; de lo contrario, 'a es menor que b'. Trate de implementarlo de maneras diferentes
+
+ - Usando if else
+ - operador ternario.
+
+ ```js
+ let a = 4;
+ let b = 3;
+ ```
+
+ ```sh
+ 4 es mayor que 3
+ ```
+
+1. Los números pares son divisibles por 2 y el resto es cero. ¿Cómo verificar si un número es par o no usando JavaScript?
+
+ ```sh
+ Ingrese un número: 2
+ 2 es un número par
+
+ Ingrese un número: 9
+ 9 es un número impar
+ ```
+
+### Ejercicios: Nivel 2
+
+1. Escriba un código que pueda calificar a los estudiantes de acuerdo con sus puntajes:
+ - 80-100, A
+ - 70-89, B
+ - 60-69, C
+ - 50-59, D
+ - 0-49, F
+1. Consulta si la temporada es Otoño, Invierno, Primavera o Verano.
+ Si la entrada del usuario es :
+
+ - Septiembre, Octubre o Noviembre, la temporada es Otoño.
+ - Diciembre, Enero o Febrero, la temporada es Invierno.
+ - Marzo, Abril o Mayo, la temporada es Primavera
+ - Junio, Julio o Agosto, la temporada es Verano
+
+1. Compruebe si un día es un día de fin de semana o un día laborable. Su script tomará el día como entrada.
+
+```sh
+ ¿Qué día es hoy? Sábado
+ El sábado es fin de semana.
+
+ ¿Qué día es hoy? sábAdo
+ El sábado es fin de semana.
+
+ ¿Qué día es hoy? Viernes
+ El viernes es un día laborable.
+
+ ¿Qué día es hoy? ViErNes
+ El viernes es un día laborable.
+```
+
+### Ejercicios: Nivel 3
+
+1. Escribe un programa que diga el número de días en un mes.
+
+```sh
+ Introduce un mes: Enero
+ Enero tiene 31 días.
+
+ Introduce un mes: ENERO
+ enero tiene 31 dias
+
+ Introduce un mes: Febrero
+ Febrero tiene 28 días.
+
+ Introduce un mes: FEbrero
+ Febrero tiene 28 días.
+```
+
+1. Escribe un programa que diga el número de días en un mes, ahora considera un año bisiesto.
+
+🎉 FELICITACIONES ! 🎉
+
+[<< Día 3](../dia_03_Booleanos_Operadores_Date/dia_03_Boleanos_Operadores_Date.md) | [Día 5 >>](../dia_05_Arreglos/dia_05_arreglos.md)
diff --git a/Spanish/dia_05_Arreglos/dia_05_arreglos.md b/Spanish/dia_05_Arreglos/dia_05_arreglos.md
new file mode 100644
index 000000000..7d72fda4d
--- /dev/null
+++ b/Spanish/dia_05_Arreglos/dia_05_arreglos.md
@@ -0,0 +1,781 @@
+
+
+[<< Día 4](../dia_04_Condicionales/dia_04_Condicionales.md) | [Día 6 >>](../dia_06_Bucles/dia_06_bucles.md)
+
+
+
+- [📔 Día 5](#📔-día-5)
+ - [Arrays](#arrays)
+ - [Como crear un array vacío](#como-crear-un-array-vacío)
+ - [Como crear un array con valores](#como-crear-un-array-con-valores)
+ - [Creando un array usando split](#creando-un-array-usando-split)
+ - [Acceder a los elementos de un array usando el index](#acceder-a-los-elementos-de-un-array-usando-el-index)
+ - [Modificar elementos de array](#modificar-elementos-de-array)
+ - [Métodos para manipular arrays](#métodos-para-manipular-arrays)
+ - [Constructor de arrays](#constructor-de-arrays)
+ - [Creando valores estáticos con fill](#creando-valores-estáticos-con-fill)
+ - [Concatenación de arrays usando concat](#concatenación-de-arrays-usando-concat)
+ - [Obtener la longitud de array](#obtener-la-longitud-de-array)
+ - [Obtener el index de un elemento en un array](#obtener-el-index-de-un-elemento-en-un-array)
+ - [Obtener el último index de un elemento en un array](#obtener-el-último-index-de-un-elemento-en-un-array)
+ - [Comprobar un array](#comprobar-un-array)
+ - [Convertir array a string](#convertir-array-a-string)
+ - [Unir elementos de un array](#unir-elementos-de-un-array)
+ - [Cortar elementos de un array](#cortar-elementos-de-un-array)
+ - [Método splice en un array](#método-splice-en-un-array)
+ - [Agregar elementos a un array usando push](#agregar-elementos-a-un-array-usando-push)
+ - [Eliminar el último elemento usando pop](#eliminar-el-último-elemento-usando-pop)
+ - [Eliminar elemento al principio](#eliminar-elemento-al-principio)
+ - [Añade un elemento al inicio](#añade-un-elemento-al-inicio)
+ - [Invertir orden de un array](#invertir-orden-de-un-array)
+ - [Ordenar elementos en un array](#ordenar-elementos-en-un-array)
+ - [Array de arrays](#array-de-arrays)
+ - [💻 Ejercicios](#💻-ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+ - [Ejercicios: Nivel 2](#ejercicios-nivel-2)
+ - [Ejercicios: Nivel 3](#ejercicios-nivel-3)
+
+# 📔 Día 5
+
+## Arrays
+
+A diferencia de las variables, un array (matriz ó arreglo) puede almacenar _múltiples valores_.Cada valor en un array tiene un _index_ y cada index (índice) tiene _una referencia en una dirección de memoria_. Se puede acceder a cada valor usando sus _index_. El index de un array comienza desde _cero_, y el index del último elemento es menor a uno desde la longitud del array.
+
+Un array es una colección de diferentes tipos de datos que están ordenados y son cambiables (modificables). Un array permite almacenar elementos duplicados y diferentes tipos de datos. Un array puede estar vacío o puede tener diferentes valores de diferentes tipos de datos.
+
+### Como crear un array vacío
+
+En JavaScript, podemos crear una array de diferentes maneras. Veamos diferentes formas de crear un array.
+Es muy común usar _const_ en lugar de _let_ para declarar una variable array. Si está utilizando const, significa que no volverás a utilizar ese nombre de variable.
+
+- Usando el constructor de arrays
+
+```js
+// sintaxis
+const arr = Array();
+// or
+// let arr = new Array()
+console.log(arr); // []
+```
+
+- Usando corchetes([])
+
+```js
+// sintaxis
+// Esto es lo más recomendable para crear una lista vacía
+const arr = [];
+console.log(arr);
+```
+
+### Como crear un array con valores
+
+Array con valores iniciales. Usamos _length_ para encontrar la longitud del array.
+
+```js
+const numbers = [0, 3.14, 9.81, 37, 98.6, 100]; // array de números
+const fruits = ["banana", "orange", "mango", "lemon"]; // array de strings, Fruits
+const vegetables = ["Tomato", "Potato", "Cabbage", "Onion", "Carrot"]; // array de strings, vegetables
+const animalProducts = ["milk", "meat", "butter", "yoghurt"]; // array de strings, products
+const webTechs = ["HTML", "CSS", "JS", "React", "Redux", "Node", "MongDB"]; // array web, technology
+const countries = ["Finland", "Denmark", "Sweden", "Norway", "Iceland"]; // array de strings, country
+
+// Imprimimos el array y su longitud
+
+console.log("Numbers:", numbers);
+console.log("Number of numbers:", numbers.length);
+
+console.log("Fruits:", fruits);
+console.log("Number of fruits:", fruits.length);
+
+console.log("Vegetables:", vegetables);
+console.log("Number of vegetables:", vegetables.length);
+
+console.log("Animal products:", animalProducts);
+console.log("Number of animal products:", animalProducts.length);
+
+console.log("Web technologies:", webTechs);
+console.log("Number of web technologies:", webTechs.length);
+
+console.log("Countries:", countries);
+console.log("Number of countries:", countries.length);
+```
+
+```sh
+Numbers: [0, 3.14, 9.81, 37, 98.6, 100]
+Number of numbers: 6
+Fruits: ['banana', 'orange', 'mango', 'lemon']
+Number of fruits: 4
+Vegetables: ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
+Number of vegetables: 5
+Animal products: ['milk', 'meat', 'butter', 'yoghurt']
+Number of animal products: 4
+Web technologies: ['HTML', 'CSS', 'JS', 'React', 'Redux', 'Node', 'MongDB']
+Number of web technologies: 7
+Countries: ['Finland', 'Estonia', 'Denmark', 'Sweden', 'Norway']
+Number of countries: 5
+```
+
+- Array puede tener elementos de diferentes tipos de datos
+
+```js
+const arr = [
+ "Asabeneh",
+ 250,
+ true,
+ { country: "Finland", city: "Helsinki" },
+ { skills: ["HTML", "CSS", "JS", "React", "Python"] },
+]; // arr contiene diferentes tipos de datos
+console.log(arr);
+```
+
+### Creando un array usando split
+
+Como hemos visto en la sección anterior, podemos dividir un string en diferentes posiciones y podemos cambiar a un array. Veamos los ejemplos a continuación
+
+```js
+let js = "JavaScript";
+const charsInJavaScript = js.split("");
+
+console.log(charsInJavaScript); // ["J", "a", "v", "a", "S", "c", "r", "i", "p", "t"]
+
+let companiesString = "Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon";
+const companies = companiesString.split(",");
+
+console.log(companies); // ["Facebook", " Google", " Microsoft", " Apple", " IBM", " Oracle", " Amazon"]
+let txt =
+ "I love teaching and empowering people. I teach HTML, CSS, JS, React, Python.";
+const words = txt.split(" ");
+
+console.log(words);
+// el texto tiene caracteres especiales piensa cómo puedes obtener solo las palabras
+// ["I", "love", "teaching", "and", "empowering", "people.", "I", "teach", "HTML,", "CSS,", "JS,", "React,", "Python"]
+```
+
+### Acceder a los elementos de un array usando el index
+
+Accedemos a cada elemento en un array usando su index. El index de un array comienza desde 0. La siguiente imagen muestra claramente el index de cada elemento en un array
+
+
+
+```js
+const fruits = ["banana", "orange", "mango", "lemon"];
+let firstFruit = fruits[0]; // estamos accediendo al primer elemento usando su index
+
+console.log(firstFruit); // banana
+
+secondFruit = fruits[1];
+console.log(secondFruit); // orange
+
+let lastFruit = fruits[3];
+console.log(lastFruit); // lemon
+// El último index se puede calcular de la siguiente manera
+
+let lastIndex = fruits.length - 1;
+lastFruit = fruits[lastIndex];
+
+console.log(lastFruit); // lemon
+```
+
+```js
+const numbers = [0, 3.14, 9.81, 37, 98.6, 100]; // set of numbers
+
+console.log(numbers.length); // => para saber el tamaño de la array, que es 6
+console.log(numbers); // -> [0, 3.14, 9.81, 37, 98.6, 100]
+console.log(numbers[0]); // -> 0
+console.log(numbers[5]); // -> 100
+
+let lastIndex = numbers.length - 1;
+console.log(numbers[lastIndex]); // -> 100
+```
+
+```js
+const webTechs = [
+ "HTML",
+ "CSS",
+ "JavaScript",
+ "React",
+ "Redux",
+ "Node",
+ "MongoDB",
+]; // Lista de tecnologías web
+
+console.log(webTechs); // Todos los elementos del array
+console.log(webTechs.length); // => para saber el tamaño de la array, que es 7
+console.log(webTechs[0]); // -> HTML
+console.log(webTechs[6]); // -> MongoDB
+
+let lastIndex = webTechs.length - 1;
+console.log(webTechs[lastIndex]); // -> MongoDB
+```
+
+```js
+const countries = [
+ "Albania",
+ "Bolivia",
+ "Canada",
+ "Denmark",
+ "Ethiopia",
+ "Finland",
+ "Germany",
+ "Hungary",
+ "Ireland",
+ "Japan",
+ "Kenya",
+]; // Lista de países
+
+console.log(countries); // -> Todas los países del array
+console.log(countries[0]); // -> Albania
+console.log(countries[10]); // -> Kenya
+
+let lastIndex = countries.length - 1;
+console.log(countries[lastIndex]); // -> Kenya
+```
+
+```js
+const shoppingCart = [
+ "Milk",
+ "Mango",
+ "Tomato",
+ "Potato",
+ "Avocado",
+ "Meat",
+ "Eggs",
+ "Sugar",
+]; // Lista de productos alimenticios
+
+console.log(shoppingCart); // -> todo el carrito de compras en array
+console.log(shoppingCart[0]); // -> Milk
+console.log(shoppingCart[7]); // -> Sugar
+
+let lastIndex = shoppingCart.length - 1;
+console.log(shoppingCart[lastIndex]); // -> Sugar
+```
+
+### Modificar elementos de array
+
+Un array es mutable (modificable). Una vez que un array es creado, podemos modificar el contenido de los elementos del array.
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+numbers[0] = 10; // cambiando 1 en el índice 0 a 10
+numbers[1] = 20; // cambiando 2 en el índice 1 a 20
+
+console.log(numbers); // [10, 20, 3, 4, 5]
+
+const countries = [
+ "Albania",
+ "Bolivia",
+ "Canada",
+ "Denmark",
+ "Ethiopia",
+ "Finland",
+ "Germany",
+ "Hungary",
+ "Ireland",
+ "Japan",
+ "Kenya",
+];
+
+countries[0] = "Afghanistan"; // Sustitución de Albania por Afganistán
+let lastIndex = countries.length - 1;
+countries[lastIndex] = "Korea"; // Sustitución de Kenia por Corea
+console.log(countries);
+```
+
+```sh
+["Afghanistan", "Bolivia", "Canada", "Denmark", "Ethiopia", "Finland", "Germany", "Hungary", "Ireland", "Japan", "Korea"]
+```
+
+### Métodos para manipular arrays
+
+Existen diferentes métodos para manipular un array. Estos son algunos de los métodos disponibles para manejar arrays:_Array, length, concat, indexOf, slice, splice, join, toString, includes, lastIndexOf, isArray, fill, push, pop, shift, unshift_
+
+#### Constructor de arrays
+
+Array:Para crear un array.
+
+```js
+const arr = Array(); // crea un array vacío
+console.log(arr);
+
+const eightEmptyValues = Array(8); // crea ocho valores vacíos
+console.log(eightEmptyValues); // [empty x 8]
+```
+
+#### Creando valores estáticos con fill
+
+fill: Rellena todos los elementos del array con un valor estático.
+
+```js
+const arr = Array(); // crea un array vacío
+console.log(arr);
+
+const eightXvalues = Array(8).fill("X"); // crea ocho valores de elementos llenos de 'X'
+console.log(eightXvalues); // ['X', 'X','X','X','X','X','X','X']
+
+const eight0values = Array(8).fill(0); // crea ocho valores de elementos llenos de '0'
+console.log(eight0values); // [0, 0, 0, 0, 0, 0, 0, 0]
+
+const four4values = Array(4).fill(4); // crea 4 valores de elementos llenos de '4'
+console.log(four4values); // [4, 4, 4, 4]
+```
+
+#### Concatenación de arrays usando concat
+
+concat:Para concatenar dos arrays.
+
+```js
+const firstList = [1, 2, 3];
+const secondList = [4, 5, 6];
+const thirdList = firstList.concat(secondList);
+
+console.log(thirdList); // [1, 2, 3, 4, 5, 6]
+```
+
+```js
+const fruits = ["banana", "orange", "mango", "lemon"]; // array de fruits
+const vegetables = ["Tomato", "Potato", "Cabbage", "Onion", "Carrot"]; // array de vegetables
+const fruitsAndVegetables = fruits.concat(vegetables); // concatena los dos arrays
+
+console.log(fruitsAndVegetables);
+```
+
+```sh
+["banana", "orange", "mango", "lemon", "Tomato", "Potato", "Cabbage", "Onion", "Carrot"]
+```
+
+#### Obtener la longitud de array
+
+Length:Para saber el tamaño del array
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+console.log(numbers.length); // -> 5 es el tamaño del array
+```
+
+#### Obtener el index de un elemento en un array
+
+indexOf:Para verificar si un elemento existe en un array. Si existe, devuelve el index, de lo contrario devuelve -1.
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+
+console.log(numbers.indexOf(5)); // -> 4
+console.log(numbers.indexOf(0)); // -> -1
+console.log(numbers.indexOf(1)); // -> 0
+console.log(numbers.indexOf(6)); // -> -1
+```
+
+Comprobar si un elemento existe en un array.
+
+- Comprobar elementos en una lista
+
+```js
+// vamos a comprobar si existe banana en el array
+
+const fruits = ["banana", "orange", "mango", "lemon"];
+let index = fruits.indexOf("banana"); // 0
+
+if (index === -1) {
+ console.log("Esta fruta no existe en el array.");
+} else {
+ console.log("Esta fruta existe en el array.");
+}
+// Esta fruta existe en el array.
+
+// we can use also ternary here
+index === -1
+ ? console.log("Esta fruta no existe en el array.")
+ : console.log("Esta fruta existe en el array.");
+
+// let us check if an avocado exist in the array
+let indexOfAvocado = fruits.indexOf("avocado"); // -1, if the element not found index is -1
+if (indexOfAvocado === -1) {
+ console.log("Esta fruta no existe en el array.");
+} else {
+ console.log("Esta fruta existe en el array.");
+}
+// Esta fruta no existe en el array.
+```
+
+#### Obtener el último index de un elemento en un array
+
+lastIndexOf: Da la posición del último elemento en el array. Si existe, devuelve el index, de lo contrario, devuelve -1.
+
+```js
+const numbers = [1, 2, 3, 4, 5, 3, 1, 2];
+
+console.log(numbers.lastIndexOf(2)); // 7
+console.log(numbers.lastIndexOf(0)); // -1
+console.log(numbers.lastIndexOf(1)); // 6
+console.log(numbers.lastIndexOf(4)); // 3
+console.log(numbers.lastIndexOf(6)); // -1
+```
+
+includes:Para verificar si un elemento existe en un array. Si existe, devuelve true, de lo contrario devuelve false.
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+
+console.log(numbers.includes(5)); // true
+console.log(numbers.includes(0)); // false
+console.log(numbers.includes(1)); // true
+console.log(numbers.includes(6)); // false
+
+const webTechs = [
+ "HTML",
+ "CSS",
+ "JavaScript",
+ "React",
+ "Redux",
+ "Node",
+ "MongoDB",
+]; // Lista de tecnologías web
+
+console.log(webTechs.includes("Node")); // true
+console.log(webTechs.includes("C")); // false
+```
+
+#### Comprobar un array
+
+Array.isArray:Para verificar si el tipo de dato en un array
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+console.log(Array.isArray(numbers)); // true
+
+const number = 100;
+console.log(Array.isArray(number)); // false
+```
+
+#### Convertir array a string
+
+toString:Convierte un array a string
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+console.log(numbers.toString()); // 1,2,3,4,5
+
+const names = ["Asabeneh", "Mathias", "Elias", "Brook"];
+console.log(names.toString()); // Asabeneh,Mathias,Elias,Brook
+```
+
+#### Unir elementos de un array
+
+join: Se usa para unir los elementos del array, el argumento que pasamos en el método join se unirá en array y regresará como una cadena. De forma predeterminada, se une con una coma, pero podemos pasar diferentes parámetros de string que se pueden unir entre los elementos.
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+console.log(numbers.join()); // 1,2,3,4,5
+
+const names = ["Asabeneh", "Mathias", "Elias", "Brook"];
+
+console.log(names.join()); // Asabeneh,Mathias,Elias,Brook
+console.log(names.join("")); //AsabenehMathiasEliasBrook
+console.log(names.join(" ")); //Asabeneh Mathias Elias Brook
+console.log(names.join(", ")); //Asabeneh, Mathias, Elias, Brook
+console.log(names.join(" # ")); //Asabeneh # Mathias # Elias # Brook
+
+const webTechs = [
+ "HTML",
+ "CSS",
+ "JavaScript",
+ "React",
+ "Redux",
+ "Node",
+ "MongoDB",
+]; // Lista de tecnologías web
+
+console.log(webTechs.join()); // "HTML,CSS,JavaScript,React,Redux,Node,MongoDB"
+console.log(webTechs.join(" # ")); // "HTML # CSS # JavaScript # React # Redux # Node # MongoDB"
+```
+
+#### Cortar elementos de un array
+
+Slice: Para cortar varios elementos en el rango. Toma dos parámetros: posición inicial y final. Puede no incluir la posición final
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+
+console.log(numbers.slice()); // -> copia todos los elementos
+console.log(numbers.slice(0)); // -> copia todos los elementos
+console.log(numbers.slice(0, numbers.length)); // copia todos los elementos
+console.log(numbers.slice(1, 4)); // -> [2,3,4] // no incluye la posición final
+```
+
+#### Método splice en un array
+
+Splice: Toma tres parámetros: posición inicial, número de elementos a eliminar y cantidad de elementos que se agregarán.
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+numbers.splice();
+console.log(numbers); // -> elimina todos los elementos
+```
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+numbers.splice(0, 1);
+console.log(numbers); // elimina el primer elemento
+```
+
+```js
+const numbers = [1, 2, 3, 4, 5, 6];
+numbers.splice(3, 3, 7, 8, 9);
+console.log(numbers.splice(3, 3, 7, 8, 9)); // -> [1, 2, 3, 7, 8, 9] //elimina tres elementos y reemplaza tres elementos
+```
+
+#### Agregar elementos a un array usando push
+
+Push: agrega elementos al final. Para agregar un elemento al final de un array existente, usamos el método push.
+
+```js
+// syntax
+const arr = ["item1", "item2", "item3"];
+arr.push("new item");
+console.log(arr);
+// ['item1', 'item2','item3','new item']
+```
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+numbers.push(6);
+console.log(numbers); // -> [1,2,3,4,5,6]
+
+numbers.pop(); // -> eliminar un elemento del final
+console.log(numbers); // -> [1,2,3,4,5]
+```
+
+```js
+let fruits = ["banana", "orange", "mango", "lemon"];
+fruits.push("apple");
+console.log(fruits); // ['banana', 'orange', 'mango', 'lemon', 'apple']
+
+fruits.push("lime");
+console.log(fruits); // ['banana', 'orange', 'mango', 'lemon', 'apple', 'lime']
+```
+
+#### Eliminar el último elemento usando pop
+
+pop: Elimina el elemento final.
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+numbers.pop(); // -> eliminar un elemento del final
+console.log(numbers); // -> [1,2,3,4]
+```
+
+#### Eliminar elemento al principio
+
+shift: Eliminación de un elemento de un array al comienzo de un array.
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+numbers.shift(); // -> elimina un elemento del principio
+console.log(numbers); // -> [2,3,4,5]
+```
+
+#### Añade un elemento al inicio
+
+unshift: Agrega un elemento al inicio del array
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+numbers.unshift(0); // -> Añadir un elemento al inicio
+console.log(numbers); // -> [0,1,2,3,4,5]
+```
+
+#### Invertir orden de un array
+
+reverse: invertir el orden de un array.
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+numbers.reverse(); // -> reverse array order
+console.log(numbers); // [5, 4, 3, 2, 1]
+
+numbers.reverse();
+console.log(numbers); // [1, 2, 3, 4, 5]
+```
+
+#### Ordenar elementos en un array
+
+sort: Ordena los elementos de un array en orden ascendente. Sort toma una función call back, Veremos cómo usamos sort con una función call back en las próximas secciones.
+
+```js
+const webTechs = [
+ "HTML",
+ "CSS",
+ "JavaScript",
+ "React",
+ "Redux",
+ "Node",
+ "MongoDB",
+];
+
+webTechs.sort();
+console.log(webTechs); // ["CSS", "HTML", "JavaScript", "MongoDB", "Node", "React", "Redux"]
+
+webTechs.reverse(); // after sorting we can reverse it
+console.log(webTechs); // ["Redux", "React", "Node", "MongoDB", "JavaScript", "HTML", "CSS"]
+```
+
+### Array de arrays
+
+Un array puede almacenar diferentes tipos de datos, incluido un array en sí mismo. Vamos a crear un array de arrays
+
+```js
+const firstNums = [1, 2, 3];
+const secondNums = [1, 4, 9];
+
+const arrayOfArray = [
+ [1, 2, 3],
+ [1, 2, 3],
+];
+console.log(arrayOfArray[0]); // [1, 2, 3]
+
+const frontEnd = ["HTML", "CSS", "JS", "React", "Redux"];
+const backEnd = ["Node", "Express", "MongoDB"];
+const fullStack = [frontEnd, backEnd];
+console.log(fullStack); // [["HTML", "CSS", "JS", "React", "Redux"], ["Node", "Express", "MongoDB"]]
+console.log(fullStack.length); // 2
+console.log(fullStack[0]); // ["HTML", "CSS", "JS", "React", "Redux"]
+console.log(fullStack[1]); // ["Node", "Express", "MongoDB"]
+```
+
+🌕 Tienes una energía ilimitada. Acabas de completar los desafíos del día 5 y llevas cinco pasos de tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y tus músculos.
+
+## 💻 Ejercicios
+
+### Ejercicios: Nivel 1
+
+```js
+const countries = [
+ "Albania",
+ "Bolivia",
+ "Canada",
+ "Denmark",
+ "Ethiopia",
+ "Finland",
+ "Germany",
+ "Hungary",
+ "Ireland",
+ "Japan",
+ "Kenya",
+];
+
+const webTechs = [
+ "HTML",
+ "CSS",
+ "JavaScript",
+ "React",
+ "Redux",
+ "Node",
+ "MongoDB",
+];
+```
+
+1. Declara un array _vacío_.
+2. Declara un array com mas de 5 elementos.
+3. Encuentra la longitud de tu array.
+4. Obtenga el primer elemento, el elemento del medio y el último elemento de un array.
+5. Declara un array llamado _mixedDataTypes_, coloque diferentes tipos de datos en el array y encuentre la longitud del array. El tamaño del array debe ser mayor que 5.
+6. Declare un variable array de nombre _itCompanies_ y asignarles valores iniciales Facebook, Google, Microsoft, Apple, IBM, Oracle y Amazon.
+7. Imprima el array usando _console.log()_.
+8. Imprima el número de empresas en el array.
+9. Imprime la primer empresa , la intermedia y la última empresa
+10. Imprime cada empresa.
+11. Cambie el nombre de cada empresa a mayúsculas uno por uno e imprímalos.
+12. Imprime el array como una oración: Facebook, Google, Microsoft, Apple, IBM, Oracle y Amazon son grandes empresas de TI.
+13. Compruebe si existe una determinada empresa en el array itCompanies. Si existe, retorna la empresa; de lo contrario, retorna la empresa _no existe_
+14. Filtre las empresas que tienen más de una 'o' sin el método _filter()_
+15. Ordene el array usando el método _sort()_
+16. Invierte la array usando el método _reverse()_
+17. Cortar las primeras 3 empresas del array
+18. Cortar las últimas 3 empresas del array
+19. Cortar la empresa o empresas intermedias de TI del array
+20. Eliminar la primera empresa de TI del array
+21. Eliminar la empresa o empresas intermedias de TI del array
+22. Elimine la última empresa de TI del array
+23. Eliminar todas las empresas de TI
+
+### Ejercicios: Nivel 2
+
+1. Cree un archivo de countries.js separado y almacene el array de países en este archivo, cree un archivo separado web_techs.js y almacene el array de webTechs en este archivo. Acceda a ambos archivos en el archivo main.js
+1. Primero elimine todos los signos de puntuación y cambie de string a array y cuente el número de palabras en el array
+
+ ```js
+ let text =
+ "I love teaching and empowering people. I teach HTML, CSS, JS, React, Python.";
+ console.log(words);
+ console.log(words.length);
+ ```
+
+ ```sh
+ ["I", "love", "teaching", "and", "empowering", "people", "I", "teach", "HTML", "CSS", "JS", "React", "Python"]
+
+ 13
+ ```
+
+1. En el siguiente carrito de compras agregue, elimine, edite artículos
+
+ ```js
+ const shoppingCart = ["Milk", "Coffee", "Tea", "Honey"];
+ ```
+
+ - Agregue 'Meat' al comienzo de su carrito de compras si aún no se ha agregado
+ - Agregue 'Sugar' al final de su carrito de compras si aún no se ha agregado
+ - Elimine 'Honey' si es alérgico a la miel (honey)
+ - Modificar Tea a 'Green Tea'
+
+1. En el array de países, verifique si 'Ethiopia' existe en el array si existe, imprima 'ETHIOPIA'. Si no existe agregar a la lista de países.
+1. En el array webTechs, verifique si Sass existe en el array y si existe, imprima 'Sass es un preproceso de CSS'. Si no existe, agregue Sass al array e imprima el array.
+1. Concatene las siguientes dos variables y guardelas en una variable fullStack.
+
+ ```js
+ const frontEnd = ["HTML", "CSS", "JS", "React", "Redux"];
+ const backEnd = ["Node", "Express", "MongoDB"];
+
+ console.log(fullStack);
+ ```
+
+ ```sh
+ ["HTML", "CSS", "JS", "React", "Redux", "Node", "Express", "MongoDB"]
+ ```
+
+### Ejercicios: Nivel 3
+
+1. El siguiente es un array de 10 edades de estudiantes:
+
+ ```js
+ const ages = [19, 22, 19, 24, 20, 25, 26, 24, 25, 24]
+ ```
+
+ - Ordene el array y encuentre la edad mínima y máxima
+ - Encuentre la edad media (un elemento intermedio o dos elementos intermedios divididos por dos)
+ - Encuentre la edad promedio (todos los elementos divididos por el número de elementos)
+ - Encuentre el rango de las edades (max menos min)
+ - Compare el valor de (mín - promedio) y (máx - promedio), use el método _abs()_
+
+ 1.Cortar los diez primeros países de la [array de países](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js)
+
+1. Encuentre el país o países de en medio en el [array de países](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js)
+1. Divide el array de países en dos arrays iguales si es par. Si el array de países no es par, agregue un país más para la primera mitad.
+
+🎉 ¡Felicitaciones! 🎉
+
+[<< Día 4](../dia_04_Condicionales/dia_04_Condicionales.md) | [Día 6 >>](../dia_06_Bucles/dia_06_bucles.md)
diff --git a/Spanish/dia_06_Bucles/dia_06_bucles.md b/Spanish/dia_06_Bucles/dia_06_bucles.md
new file mode 100644
index 000000000..70d3c9ba9
--- /dev/null
+++ b/Spanish/dia_06_Bucles/dia_06_bucles.md
@@ -0,0 +1,481 @@
+
+
+[<< Día 5](../dia_05_Arreglos/dia_05_arreglos.md) | [ Día 7 >>](../dia_07_Funciones/dia_07_funciones.md)
+
+
+
+- [📔 Día 6](#📔-día-6)
+ - [Bucles](#bucles)
+ - [Bucle for](#bucle-for)
+ - [Bucle while](#bucle-while)
+ - [Bucle do while](#bucle-do-while)
+ - [Bucle for of](#bucle-for-of)
+ - [break](#break)
+ - [continue](#continue)
+ - [💻 Ejercicios: Día 6](#💻-ejerciciosdía-6)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+ - [Ejercicios: Nivel 2](#ejercicios-nivel-2)
+ - [Ejercicios: Nivel 3](#ejercicios-nivel-3)
+
+# 📔 Día 6
+
+## Bucles
+
+La mayoría de las actividades que hacemos en la vida están llenas de repeticiones. Imagina que tienes que imprimir de 0 a 100 usando console.log(). Para implementar esta simple tarea, puede tomar de 2 a 5 minutos, este tipo de tarea tediosa y repetitiva se puede llevar a cabo usando un bucle. Si prefieres ver los videos, puedes revisar el [video tutorials](https://www.youtube.com/channel/UCM4xOopkYiPwJqyKsSqL9mw)
+
+En los lenguajes de programación para realizar tareas repetitivas utilizamos diferentes tipos de bucles. Los siguientes ejemplos son los bucles de uso común en JavaScript y otros lenguajes de programación.
+
+### Bucle for
+
+```js
+// Estructura del bucle for
+for(inicialización, condición, incremento/decremento){
+ // el código va aquí
+}
+```
+
+```js
+for (let i = 0; i <= 5; i++) {
+ console.log(i);
+}
+
+// 0 1 2 3 4 5
+```
+
+```js
+for (let i = 5; i >= 0; i--) {
+ console.log(i);
+}
+
+// 5 4 3 2 1 0
+```
+
+```js
+for (let i = 0; i <= 5; i++) {
+ console.log(`${i} * ${i} = ${i * i}`);
+}
+```
+
+```sh
+0 * 0 = 0
+1 * 1 = 1
+2 * 2 = 4
+3 * 3 = 9
+4 * 4 = 16
+5 * 5 = 25
+```
+
+```js
+const countries = ["Finland", "Sweden", "Denmark", "Norway", "Iceland"];
+const newArr = [];
+for (let i = 0; i < countries.length; i++) {
+ newArr.push(countries[i].toUpperCase());
+}
+
+// ["FINLAND", "SWEDEN", "DENMARK", "NORWAY", "ICELAND"]
+```
+
+Agregar todos los elementos en un array
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+let sum = 0;
+for (let i = 0; i < numbers.length; i++) {
+ sum = sum + numbers[i]; // can be shorten, sum += numbers[i]
+}
+
+console.log(sum); // 15
+```
+
+Crea un nuevo array basado en el array existente
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+const newArr = [];
+let sum = 0;
+for (let i = 0; i < numbers.length; i++) {
+ newArr.push(numbers[i] ** 2);
+}
+
+console.log(newArr); // [1, 4, 9, 16, 25]
+```
+
+```js
+const countries = ["Finland", "Sweden", "Norway", "Denmark", "Iceland"];
+const newArr = [];
+for (let i = 0; i < countries.length; i++) {
+ newArr.push(countries[i].toUpperCase());
+}
+
+console.log(newArr); // ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
+```
+
+### Bucle while
+
+```js
+let i = 0;
+while (i <= 5) {
+ console.log(i);
+ i++;
+}
+
+// 0 1 2 3 4 5
+```
+
+### Bucle do while
+
+```js
+let i = 0;
+do {
+ console.log(i);
+ i++;
+} while (i <= 5);
+
+// 0 1 2 3 4 5
+```
+
+### Bucle for of
+
+Usamos el bucle for of para arrays. Es una forma muy práctica de iterar a través de un array, si no estamos interesados en el index de cada elemento del array.
+
+```js
+for (const element of arr) {
+ // el código va aquí
+}
+```
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+
+for (const num of numbers) {
+ console.log(num);
+}
+
+// 1 2 3 4 5
+
+for (const num of numbers) {
+ console.log(num * num);
+}
+
+// 1 4 9 16 25
+
+// sumando todos los números del array
+let sum = 0;
+for (const num of numbers) {
+ sum = sum + num;
+ // también se puede acortar así, sum += num
+ // después de esto usaremos la sintaxis más corta (+=, -=, *=, /= etc)
+}
+console.log(sum); // 15
+
+const webTechs = [
+ "HTML",
+ "CSS",
+ "JavaScript",
+ "React",
+ "Redux",
+ "Node",
+ "MongoDB",
+];
+
+for (const tech of webTechs) {
+ console.log(tech.toUpperCase());
+}
+
+// HTML CSS JAVASCRIPT REACT NODE MONGODB
+
+for (const tech of webTechs) {
+ console.log(tech[0]); // obtiene solo la primera letra de cada elemento, H C J R N M
+}
+```
+
+```js
+const countries = ["Finland", "Sweden", "Norway", "Denmark", "Iceland"];
+const newArr = [];
+for (const country of countries) {
+ newArr.push(country.toUpperCase());
+}
+
+console.log(newArr); // ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
+```
+
+### break
+
+Break se utiliza para interrumpir un bucle.
+
+```js
+for (let i = 0; i <= 5; i++) {
+ if (i == 3) {
+ break;
+ }
+ console.log(i);
+}
+
+// 0 1 2
+```
+
+El código anterior se detiene si se encuentran 3 en el proceso de iteración.
+
+### continue
+
+Usamos la palabra clave _continue_ para omitir ciertas iteraciones.
+
+```js
+for (let i = 0; i <= 5; i++) {
+ if (i == 3) {
+ continue;
+ }
+ console.log(i);
+}
+
+// 0 1 2 4 5
+```
+
+🌕 Tienes una energía ilimitada. Acabas de completar los desafíos del día 6 y llevas seis pasos de tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y tus músculos.
+
+## 💻 Ejercicios:Día 6
+
+### Ejercicios: Nivel 1
+
+```js
+const countries = [
+ "Albania",
+ "Bolivia",
+ "Canada",
+ "Denmark",
+ "Ethiopia",
+ "Finland",
+ "Germany",
+ "Hungary",
+ "Ireland",
+ "Japan",
+ "Kenya",
+];
+
+const webTechs = [
+ "HTML",
+ "CSS",
+ "JavaScript",
+ "React",
+ "Redux",
+ "Node",
+ "MongoDB",
+];
+
+const mernStack = ["MongoDB", "Express", "React", "Node"];
+```
+
+1. Itera de 0 a 10 usando el bucle for, haga lo mismo usando los bucles while y do while
+2. Itera 10 to 0 usando el bucle for, haga lo mismo usando los bucles while y do while
+3. Itera de 0 a n usando el bucle for
+4. Escribe un bucle que haga el siguiente patrón usando console.log():
+
+ ```js
+ #
+ ##
+ ###
+ ####
+ #####
+ ######
+ #######
+ ```
+
+5. Usa un bucle para imprimir el siguiente patrón:
+
+ ```sh
+ 0 x 0 = 0
+ 1 x 1 = 1
+ 2 x 2 = 4
+ 3 x 3 = 9
+ 4 x 4 = 16
+ 5 x 5 = 25
+ 6 x 6 = 36
+ 7 x 7 = 49
+ 8 x 8 = 64
+ 9 x 9 = 81
+ 10 x 10 = 100
+ ```
+
+6. Usando un bucle imprime el siguiente patrón:
+
+ ```sh
+ i i^2 i^3
+ 0 0 0
+ 1 1 1
+ 2 4 8
+ 3 9 27
+ 4 16 64
+ 5 25 125
+ 6 36 216
+ 7 49 343
+ 8 64 512
+ 9 81 729
+ 10 100 1000
+ ```
+
+7. Usa el bucle for para iterar de 0 a 100 e imprima solo números pares
+8. Usa el bucle for para iterar de 0 a 100 e imprima solo números impares
+9. Usa el bucle for para iterar de 0 a 100 e imprima los solo números primos
+10. Usa el bucle for para iterar de 0 a 100 e imprima la suma de todos los números.
+
+ ```sh
+ La suma de todos los números de 0 a 100 es 5050.
+ ```
+
+11. Usa el bucle para iterar de 0 a 100 e imprimir la suma de todos los pares y la suma de todos los impares.
+
+ ```sh
+ La suma de todos los pares de 0 a 100 es 2550. Y la suma de todos los impares de 0 a 100 es 2500.
+ ```
+
+12. Usa el bucle para iterar de 0 a 100 e imprimir la suma de todos los pares y la suma de todos los impares. Imprimir suma de pares y suma de impares como un array
+
+ ```sh
+ [2550, 2500]
+ ```
+
+13. Desarrolla un pequeño script que genera una matriz de 5 números aleatorios
+14. Desarrolla un pequeño script que genera una matriz de 5 números aleatorios. Los números debe ser únicos
+15. Desarrolla un pequeño script que genera un id aleatorio de seis caracteres:
+
+ ```sh
+ 5j2khz
+ ```
+
+### Ejercicios: Nivel 2
+
+1. Desarrolla un pequeño script que genera un id con cualquier número de caracteres aleatorios:
+
+ ```sh
+ fe3jo1gl124g
+ ```
+
+ ```sh
+ xkqci4utda1lmbelpkm03rba
+ ```
+
+1. Escribe un script que genere un número hexadecimal aleatorio.
+
+ ```sh
+ '#ee33df'
+ ```
+
+1. Escribe un script que genere un número de color rgb aleatorio.
+
+ ```sh
+ rgb(240,180,80)
+ ```
+
+1. Usando el array countries anterior, crea un array como el siguiente.
+
+ ```sh
+ ["ALBANIA", "BOLIVIA", "CANADA", "DENMARK", "ETHIOPIA", "FINLAND", "GERMANY", "HUNGARY", "IRELAND", "JAPAN", "KENYA"]
+ ```
+
+1. Usando el array countries anterior, crea un array para saber la longitud de cada país.
+
+ ```sh
+ [7, 7, 6, 7, 8, 7, 7, 7, 7, 5, 5]
+ ```
+
+1. Utiliza el array countries para crear la siguiente array de arrays
+
+ ```sh
+ [
+ ['Albania', 'ALB', 7],
+ ['Bolivia', 'BOL', 7],
+ ['Canada', 'CAN', 6],
+ ['Denmark', 'DEN', 7],
+ ['Ethiopia', 'ETH', 8],
+ ['Finland', 'FIN', 7],
+ ['Germany', 'GER', 7],
+ ['Hungary', 'HUN', 7],
+ ['Ireland', 'IRE', 7],
+ ['Iceland', 'ICE', 7],
+ ['Japan', 'JAP', 5],
+ ['Kenya', 'KEN', 5]
+ ]
+ ```
+
+1. En el array countries anterior, verifica si hay un país que contenga la palabra 'land'. Si hay países que contienen 'land', imprimelo cono array. Si no hay ningún país que contenga la palabra'land', imprima 'Todos estos países no tienen la palabra land'.
+
+ ```sh
+ ['Finland','Ireland', 'Iceland']
+ ```
+
+1. En el array countries anterior, verifica si hay un país que termina con una subcadena (substring) 'ia'. Si hay países que terminan con 'ia', imprimelo como un array. Si no hay ningún país que contenga la palabra 'ia', imprime 'Estos países no terminan con ia'.
+
+ ```sh
+ ['Albania', 'Bolivia','Ethiopia']
+ ```
+
+1. Usando el array countries anterior, encuentre el país que contiene la mayor cantidad de caracteres.
+
+ ```sh
+ Ethiopia
+ ```
+
+1. Usando el array countries anterior, encuentre el país que contiene sólo 5 caracteres.
+
+ ```sh
+ ['Japan', 'Kenya']
+ ```
+
+1. Encuentra la palabra más larga en el array webTechs
+1. Utiliza el array de webTechs para crear la el siguiente array de arrays:
+
+ ```sh
+ [["HTML", 4], ["CSS", 3],["JavaScript", 10],["React", 5],["Redux", 5],["Node", 4],["MongoDB", 7]]
+ ```
+
+1. Una aplicación creada con MongoDB, Express, React y Node se denomina MERN stack app. Crea el acrónimo MERN usando el array mernStack
+1. Iterar a través del array, ["HTML", "CSS", "JS", "React", "Redux", "Node", "Express", "MongoDB"] usando el bucle for o el bucle for of e imprime los elementos.
+1. Este es un array de frutas, ['banana', 'orange', 'mango', 'lemon'] invierte el orden usando un bucle sin usar el método reverse().
+1. Imprime todos los elementos del array como se muestra a continuación:
+
+ ```js
+ const fullStack = [
+ ["HTML", "CSS", "JS", "React"],
+ ["Node", "Express", "MongoDB"],
+ ];
+ ```
+
+ ```sh
+ HTML
+ CSS
+ JS
+ REACT
+ NODE
+ EXPRESS
+ MONGODB
+ ```
+
+### Ejercicios: Nivel 3
+
+1. Copia el array countries (Evita mutaciones)
+1. Los arrays son mutables. Crea una copia del array que no modifique el original. Ordena la copia del array y guárdala en una variable sortedCountries
+1. Ordena el array webTechs y el array mernStack
+1. Extrae todos los países que contengan la palabra 'land' del [array countries](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) e imprimela como un array
+1. Encuentra el país que contiene la mayor cantidad de caracteres en el [array countries](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js)
+1. Extrae todos los países que contienen la palabra 'land' del [array countries](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) e imprimela como un array
+1. Extrae todos los países que contengan solo cuatro caracters del [array countries](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) e impremela como un array
+1. Extrae todos los paíse que contengan dos o más palabras del [array countries](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) e imprimela como un array
+1. Invertir el [array countries](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) y poner en mayúscula cada país y almacenalo en un array
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 5](../dia_05_Arreglos/dia_05_arreglos.md) | [Día 7 >>](../dia_07_Funciones/dia_07_funciones.md)
diff --git a/Spanish/dia_07_Funciones/dia_07_funciones.md b/Spanish/dia_07_Funciones/dia_07_funciones.md
new file mode 100644
index 000000000..b3ffa4a4a
--- /dev/null
+++ b/Spanish/dia_07_Funciones/dia_07_funciones.md
@@ -0,0 +1,702 @@
+
+
+[<< Día 6](../dia_06_Bucles/dia_06_bucles.md) | [Día 8 >>](../dia_08_Objetos/dia_08_objetos.md)
+
+
+
+- [📔 Día 7](#📔-día-7)
+ - [Funciones](#funciones)
+ - [Función declarativa](#función-declarativa)
+ - [Función sin parámetros y return](#función-sin-parámetros-y-return)
+ - [Función que retorna un valor](#función-que-retorna-un-valor)
+ - [Función con un parámetro](#función-con-un-parámetro)
+ - [Función con dos parámetros](#función-con-dos-parámetros)
+ - [Función con muchos parámetros](#función-con-muchos-parámetros)
+ - [Función con número ilimitado de parámetros](#función-con-número-ilimitado-de-parámetros)
+ - [Número ilimitado de parámetros en una función regular](#número-ilimitado-de-parámetros-en-una-función-regular)
+ - [Número ilimitado de parámetros en una función flecha](#número-ilimitado-de-parámetros-en-una-función-flecha)
+ - [Función anónima](#función-anónima)
+ - [Función de expresión](#función-de-expresión)
+ - [Funciones de autoinvocación](#función-de-autoinvocación)
+ - [Función flecha](#función-flecha)
+ - [Función con parámetros por defecto](#función-con-parámetros-por-defecto)
+ - [Función declarativa versus función flecha](#función-declarativa-versus-función-flecha)
+ - [💻 Ejercicios](#💻-ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+ - [Ejercicios: Nivel 2](#ejercicios-nivel-2)
+ - [Ejercicios: Nivel 3](#ejercicios-nivel-3)
+
+# 📔 Día 7
+
+## Funciones
+
+Hasta ahora hemos visto muchas funciones JavaScript integradas. En esta sección, nos centraremos en las funciones personalizadas. ¿Qué es una función? Antes de comenzar a hacer funciones, comprendamos ¿Qué es una función? y ¿Por qué necesitamos una función?
+
+Una función es un bloque reutilizable de código o declaraciones de programación diseñadas para realizar una determinada tarea.
+
+Una función se declara mediante la palabra clave function seguida de un nombre, seguido de paréntesis (). Un paréntesis puede tomar un parámetro. Si una función toma un parámetro, se llamará con un argumento. Una función también puede tomar un parámetro predeterminado. Para almacenar datos en una función, una función debe devolver ciertos tipos de datos. Para obtener el valor llamamos o invocamos a la función.
+
+La función hace código:
+
+- limpio y fácil de leer
+- reutilizable
+- fácil de probar
+
+Una función se puede declarar o crear de un par de maneras:
+
+- _Función declarativa_
+- _Función de expresión_
+- _Función anonima_
+- _Función flecha_
+
+### Función declarativa
+
+Veamos cómo declaramos una función y cómo llamar a una función.
+
+```js
+//declaramos una función sin un parámetro
+function functionName() {
+ // el código va aquí
+}
+functionName(); // llamando a la función por su nombre con paréntesis
+```
+
+### Función sin parámetros y return
+
+La función se puede declarar sin un parámetro.
+
+**Ejemplo:**
+
+```js
+// función sin parámetros. La función eleva al cuadrado un número
+function square() {
+ let num = 2;
+ let sq = num * num;
+ console.log(sq);
+}
+
+square(); // 4
+
+// función sin parámetro
+function addTwoNumbers() {
+ let numOne = 10;
+ let numTwo = 20;
+ let sum = numOne + numTwo;
+
+ console.log(sum);
+}
+
+addTwoNumbers(); // una función tiene que ser llamada por su nombre para ser ejecutada
+```
+
+```js
+function printFullName() {
+ let firstName = "Asabeneh";
+ let lastName = "Yetayeh";
+ let space = " ";
+ let fullName = firstName + space + lastName;
+ console.log(fullName);
+}
+
+printFullName(); // llamando a una función
+```
+
+### Función que retorna un valor
+
+La función también puede devolver valores, si una función no devuelve valores, el valor de la función no está definido. Escribamos las funciones anteriores con return. A partir de ahora, retornaremos el valor a una función en lugar de imprimirlo.
+
+```js
+function printFullName() {
+ let firstName = "Asabeneh";
+ let lastName = "Yetayeh";
+ let space = " ";
+ let fullName = firstName + space + lastName;
+ return fullName;
+}
+console.log(printFullName());
+```
+
+```js
+function addTwoNumbers() {
+ let numOne = 2;
+ let numTwo = 3;
+ let total = numOne + numTwo;
+ return total;
+}
+
+console.log(addTwoNumbers());
+```
+
+### Función con un parámetro
+
+En una función podemos pasar diferentes tipos de datos(number, string, boolean, object, function) como un parámetro.
+
+```js
+// función con un parámetro
+function functionName(parm1) {
+ //el código va aquí
+}
+functionName(parm1); // durante la llamada o la invocación es necesario un argumento
+
+function areaOfCircle(r) {
+ let area = Math.PI * r * r;
+ return area;
+}
+
+console.log(areaOfCircle(10)); // debe ser llamado con un argumento
+
+function square(number) {
+ return number * number;
+}
+
+console.log(square(10));
+```
+
+### Función con dos parámetros
+
+```js
+// función con dos parámetros
+function functionName(parm1, parm2) {
+ //el código va aquí
+}
+functionName(parm1, parm2); // durante la llamada o invocación se necesitan dos argumentos
+// la función sin parámetros no recibe entrada, así que hagamos una función con parámetros
+function sumTwoNumbers(numOne, numTwo) {
+ let sum = numOne + numTwo;
+ console.log(sum);
+}
+sumTwoNumbers(10, 20); // llamando a la función
+// si una función no es retorna esta no almacena datos, por lo que debe retornar
+
+function sumTwoNumbers(numOne, numTwo) {
+ let sum = numOne + numTwo;
+ return sum;
+}
+
+console.log(sumTwoNumbers(10, 20));
+function printFullName(firstName, lastName) {
+ return `${firstName} ${lastName}`;
+}
+console.log(printFullName("Asabeneh", "Yetayeh"));
+```
+
+### Función con muchos parámetros
+
+```js
+// función con múltiples parámetros
+function functionName(parm1, parm2, parm3,...){
+ //el código va aquí
+}
+functionName(parm1,parm2,parm3,...) // durante la llamada o la invocación necesita tres argumentos
+
+
+// esta función toma un array como un parámetro y suma los números en el array
+function sumArrayValues(arr) {
+ let sum = 0;
+ for (let i = 0; i < arr.length; i++) {
+ sum = sum + arr[i];
+ }
+ return sum;
+}
+const numbers = [1, 2, 3, 4, 5];
+ //llamada a la función
+console.log(sumArrayValues(numbers));
+
+
+ const areaOfCircle = (radius) => {
+ let area = Math.PI * radius * radius;
+ return area;
+ }
+console.log(areaOfCircle(10))
+
+```
+
+### Función con número ilimitado de parámetros
+
+A veces no sabemos cuántos argumentos va a pasar el usuario. Por lo tanto, debemos saber cómo escribir una función que pueda tomar un número ilimitado de argumentos. La forma en que lo hacemos tiene una diferencia significativa entre una función declarativa (función regular) y una función flecha. Veamos ejemplos tanto en la función declarativa como en la función flecha.
+
+#### Número ilimitado de parámetros en una función regular
+
+Una función declarativa proporciona una función con alcance de argumentos array como objeto. Se puede acceder a cualquier cosa que pasemos como argumento en la función desde el objeto de argumentos dentro de las funciones. Veamos un ejemplo
+
+```js
+// Accedemos a los argumentos del objeto
+
+function sumAllNums() {
+ console.log(arguments)
+}
+
+sumAllNums(1, 2, 3, 4)
+// Arguments(4) [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]
+
+```
+
+```js
+// declaración
+
+function sumAllNums() {
+ let sum = 0
+ for (let i = 0; i < arguments.length; i++) {
+ sum += arguments[i]
+ }
+ return sum
+}
+
+console.log(sumAllNums(1, 2, 3, 4)) // 10
+console.log(sumAllNums(10, 20, 13, 40, 10)) // 93
+console.log(sumAllNums(15, 20, 30, 25, 10, 33, 40)) // 173
+```
+
+#### Número ilimitado de parámetros en una función flecha
+
+La función flecha no tiene el objeto de alcance de los argumentos
+Para implementar una función que toma un número ilimitado de argumentos en una función de flecha, usamos el operador de propagación seguido de cualquier nombre de parámetro. Se puede acceder a cualquier elemento que hayamos pasado como argumento en la función como array en la función de flecha. Veamos un ejemplo
+
+```js
+// Accedemos a los argumentos del objeto
+
+const sumAllNums = (...args) => {
+ // console.log(arguments), objeto de argumentos no encontrado en la función flecha
+ // en su lugar, usamos un parámetro seguido de un operador de propagación (...)
+ console.log(args)
+}
+
+sumAllNums(1, 2, 3, 4)
+// [1, 2, 3, 4]
+
+```
+
+```js
+// declaración
+
+const sumAllNums = (...args) => {
+ let sum = 0
+ for (const element of args) {
+ sum += element
+ }
+ return sum
+}
+
+console.log(sumAllNums(1, 2, 3, 4)) // 10
+console.log(sumAllNums(10, 20, 13, 40, 10)) // 93
+console.log(sumAllNums(15, 20, 30, 25, 10, 33, 40)) // 173
+```
+
+### Función anónima
+
+Función anónima o sin nombre
+
+```js
+const anonymousFun = function () {
+ console.log("Soy una función anónima y mi valor se almacena en anonymousFun");
+};
+```
+
+### Función de expresión
+
+Las funciones de expresión son funciones anónimas. Después creamos una función sin nombre y la asignamos a una variable. Para retornar un valor de la función debemos llamar a la variable. Mira el ejemplo de abajo.
+
+```js
+// Function expression
+const square = function (n) {
+ return n * n;
+};
+
+console.log(square(2)); // -> 4
+```
+
+### Función de autoinvocación
+
+Las funciones de autoinvocación son funciones anónimas que no necesitan ser llamadas para devolver un valor.
+
+```js
+(function (n) {
+ console.log(n * n);
+})(2); // 4, pero en lugar de solo imprimir si queremos regresar y almacenar los datos, hacemos lo que se muestra a continuación
+
+let squaredNum = (function (n) {
+ return n * n;
+})(10);
+
+console.log(squaredNum);
+```
+
+### Función flecha
+
+La función flecha es una alternativa para escribir una función, sin embargo, la función declarativa y la función flecha tienen algunas diferencias menores.
+
+La función flecha usa una flecha en lugar de la palabra clave _function_ para declarar una función. Veamos tanto la función declarativa como la función flecha.
+
+```js
+// Así es como escribimos una función normal o declarativa
+// Cambiemos esta función de declarativa a una función flecha
+function square(n) {
+ return n * n;
+}
+
+console.log(square(2)); // 4
+
+const square = (n) => {
+ return n * n;
+};
+
+console.log(square(2)); // -> 4
+
+// si tenemos solo una línea en el bloque de código, se puede escribir de la siguiente manera, return explícito
+const square = (n) => n * n; // -> 4
+```
+
+```js
+const changeToUpperCase = (arr) => {
+ const newArr = [];
+ for (const element of arr) {
+ newArr.push(element.toUpperCase());
+ }
+ return newArr;
+};
+
+const countries = ["Finland", "Sweden", "Norway", "Denmark", "Iceland"];
+console.log(changeToUpperCase(countries));
+
+// ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
+```
+
+```js
+const printFullName = (firstName, lastName) => {
+ return `${firstName} ${lastName}`;
+};
+
+console.log(printFullName("Asabeneh", "Yetayeh"));
+```
+
+La función anterior solo tiene la declaración de return, por lo tanto, podemos retornar explícitamente de la siguiente manera.
+
+```js
+const printFullName = (firstName, lastName) => `${firstName} ${lastName}`;
+
+console.log(printFullName("Asabeneh", "Yetayeh"));
+```
+
+### Función con parámetros por defecto
+
+A veces, pasamos valores predeterminados a los parámetros, cuando invocamos la función, si no pasamos un argumento, se usará el valor predeterminado. Tanto la función declarativa como la función flecha pueden tener un valor o valores predeterminados.
+
+```js
+// sintaxis
+// Declarando una función
+function functionName(param = value) {
+ //código
+}
+
+// Llamando una función
+functionName();
+functionName(arg);
+```
+
+**Example:**
+
+```js
+function greetings(name = "Peter") {
+ let message = `${name}, welcome to 30 Days Of JavaScript!`;
+ return message;
+}
+
+console.log(greetings());
+console.log(greetings("Asabeneh"));
+```
+
+```js
+function generateFullName(firstName = "Asabeneh", lastName = "Yetayeh") {
+ let space = " ";
+ let fullName = firstName + space + lastName;
+ return fullName;
+}
+
+console.log(generateFullName());
+console.log(generateFullName("David", "Smith"));
+```
+
+```js
+function calculateAge(birthYear, currentYear = 2019) {
+ let age = currentYear - birthYear;
+ return age;
+}
+
+console.log("Age: ", calculateAge(1819));
+```
+
+```js
+function weightOfObject(mass, gravity = 9.81) {
+ let weight = mass * gravity + " N"; // el valor tiene que ser cambiado a string primero
+ return weight;
+}
+
+console.log("Weight of an object in Newton: ", weightOfObject(100)); // 9.81 es la gravedad en la superficie de la tierra
+console.log("Weight of an object in Newton: ", weightOfObject(100, 1.62)); // gravedad en la superficie de la luna
+```
+
+Veamos cómo escribimos las funciones anteriores con funciones flecha.
+
+```js
+// sintaxis
+// declarando una función
+const functionName = (param = value) => {
+ //código
+};
+
+// Llamando a la función
+functionName();
+functionName(arg);
+```
+
+**Example:**
+
+```js
+const greetings = (name = "Peter") => {
+ let message = name + ", welcome to 30 Days Of JavaScript!";
+ return message;
+};
+
+console.log(greetings());
+console.log(greetings("Asabeneh"));
+```
+
+```js
+const generateFullName = (firstName = "Asabeneh", lastName = "Yetayeh") => {
+ let space = " ";
+ let fullName = firstName + space + lastName;
+ return fullName;
+};
+
+console.log(generateFullName());
+console.log(generateFullName("David", "Smith"));
+```
+
+```js
+const calculateAge = (birthYear, currentYear = 2019) => currentYear - birthYear;
+console.log("Age: ", calculateAge(1819));
+```
+
+```js
+const weightOfObject = (mass, gravity = 9.81) => mass * gravity + " N";
+
+console.log("Weight of an object in Newton: ", weightOfObject(100)); // 9.81 es la gravedad en la superficie de la tierra
+console.log("Weight of an object in Newton: ", weightOfObject(100, 1.62)); // gravedad en la superficie de la luna
+```
+
+### Función declarativa versus función flecha
+
+Será cubierto en otra sección.
+
+🌕 Tienes una energía ilimitada. Acabas de completar los desafíos del día 7 y llevas siete pasos de tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y tus músculos.
+
+## 💻 Ejercicios
+
+### Ejercicios: Nivel 1
+
+1. Declare una función _fullName_ e imprima su nombre completo.
+2. Declare una función _fullName_ y ahora toma firstName, lastName como parámetro y retorna su nombre completo.
+3. Declare una función _addNumbers_ que toma dos parámetros y retorna la suma de ambos.
+4. El área de un rectángulo se calcula de la siguiente manera: _area = length x width_. Escribe una función _areaOfRectangle_ que calcule el área de un rectángulo.
+5. El perímetro de un rectángulo se calcula de la siguiente manera: _perimeter= 2x(length + width)_. Escribe una función _perimeterOfRectangle_ que calcule el perímetro de un rectángulo.
+6. El volumen de un prisma rectangular se calcula de la siguiente manera: _volume = length x width x height_. Escribe una función _volumeOfRectPrism_ que calcule el volumen de un prisma.
+7. El área de un círculo se calcula de la siguiente manera: _area = π x r x r_. Escribe una función _areaOfCircle_ que calcule el área de un círculo.
+8. La circunferencia de un círculo se calcula de la siguiente manera: _circumference = 2πr_. Escribe una función _circumOfCircle_ que calcule la circunferencia de un círculo.
+9. La densidad de una sustancia se calcula de la siguiente manera:_density= mass/volume_. Escribe una función _density_ que calcule la densidad de una sustancia.
+10. La velocidad se calcula dividiendo el total de la distancia recorrida por un objeto en movimiento entre el tiempo total. Escribe una función que calcule la velocidad de un objeto en movimiento, _speed_.
+11. El peso de una sustancia se calcula de la siguiente manera: _weight = mass x gravity_. Escribe una función _weight_ que calcule el peso de una sustancia.
+12. La temperatura en °C se puede convertir a °F usando esta fórmula: _°F = (°C x 9/5) + 32_. Escribe una función _convertCelsiusToFahrenheit_ que convierta °C a °F.
+13. El índice de masa corporal (IMC) se calcula de la siguiente manera: _imc = peso en Kg / (altura x altura) en m2_. Escribe una función que calcule _imc_. El IMC se utiliza para definir de forma amplia diferentes grupos de peso en adultos de 20 años o más. Compruebe si una persona tiene un _peso bajo, peso normal, con sobrepeso_ u _obeso_ según la información que se proporciona a continuación.
+
+ - Se aplican los mismos parámetros de grupos tanto a hombres como a mujeres.
+ - _Peso bajo_: IMC inferior a 18,5
+ - _Peso normal_: IMC de 18,5 a 24,9
+ - _Sobrepeso_: IMC de 25 a 29,9
+ - _Obeso_: IMC es 30 o más
+
+14. Escribe una función llamada _checkSeason_, toma un parámetro de mes y retorna la estación: Otoño, Invierno, Primavera o Verano.
+15. Math.max retorna su argumento más grande. Escriba una función findMax que tome tres argumentos y devuelva su máximo sin usar el método Math.max.
+
+ ```js
+ console.log(findMax(0, 10, 5));
+ 10;
+ console.log(findMax(0, -10, -2));
+ 0;
+ ```
+
+### Ejercicios: Nivel 2
+
+1. La ecuación lineal se calcula de la siguiente manera: _ax + by + c = 0_. Escribe una función que calcule el valor de una ecuación lineal, _solveLinEquation_.
+1. La ecuación cuadrática se calcula de la siguiente manera: _ax2 + bx + c = 0_. Escribe una función que calcule el valor o los valores de una ecuación cuadrática, _solveQuadEquation_.
+
+ ```js
+ console.log(solveQuadratic()); // {0}
+ console.log(solveQuadratic(1, 4, 4)); // {-2}
+ console.log(solveQuadratic(1, -1, -2)); // {2, -1}
+ console.log(solveQuadratic(1, 7, 12)); // {-3, -4}
+ console.log(solveQuadratic(1, 0, -4)); //{2, -2}
+ console.log(solveQuadratic(1, -1, 0)); //{1, 0}
+ ```
+
+1. Declare una función llamada _printArray_. Toma un array como parámetro e imprime cada valor del array.
+1. Declare una función llamada _showDateTime_ que muestre la hora en este formato: 01/08/2020 04:08 usando el objeto Date.
+
+ ```sh
+ showDateTime()
+ 08/01/2020 04:08
+ ```
+
+1. Declare una función llamada _swapValues_. Esta función intercambia el valor de x a y.
+
+ ```js
+ swapValues(3, 4); // x => 4, y=>3
+ swapValues(4, 5); // x = 5, y = 4
+ ```
+
+1. Declare una función llamada _reverseArray_. Toma un array como parámetro y retorna el array invertido (no use el método reverse()).
+
+ ```js
+ console.log(reverseArray([1, 2, 3, 4, 5]));
+ //[5, 4, 3, 2, 1]
+ console.log(reverseArray(["A", "B", "C"]));
+ //['C', 'B', 'A']
+ ```
+
+1. Declare una función llamada _capitalizeArray_. Toma un array como parámetro y retorna el array - capitalizedarray.
+1. Declare una función llamada _addItem_. Toma un elemento de paŕametro y retorna un array después de agregar el un elemento.
+1. Declare una función llamada _removeItem_. Toma como parámetro un index y retorna un array después de eleminar el elemento con ese index.
+1. Declare una función llamada _sumOfNumbers_. Toma un número como parámetro y suma todos los números en ese rango.
+1. Declare una función llamada _sumOfOdds_. Toma un parámetro numérico y suma todos los números impares en ese rango.
+1. Declare una función llamada _sumOfEven_. Toma un parámetro numérico y suma todos los números pares en ese rango.
+1. Declare una función llamada _evensAndOdds_ . Toma un entero positivo como parámetro y cuenta el número de pares e impares.
+
+ ```sh
+ evensAndOdds(100);
+ El número de impares son 50.
+ El número de pares es 51.
+ ```
+
+1. Escriba una función que tome cualquier número de argumentos y retorne la suma de los argumentos
+
+ ```js
+ sum(1, 2, 3); // -> 6
+ sum(1, 2, 3, 4); // -> 10
+ ```
+
+1. Escriba una función _randomUserIp_ que genere una ip de usuario aleatoria.
+1. Escriba una función _randomMacAddress_ que genere una dirección mac aleatoria.
+1. Declare una función llamada _randomHexaNumberGenerator_. Cuando se llama a esta función, genera un número hexadecimal aleatorio. La función retorna el número hexadecimal.
+
+ ```sh
+ console.log(randomHexaNumberGenerator());
+ '#ee33df'
+ ```
+
+1. Declare una función llamada _userIdGenerator_. Cuando se llama a esta función, genera un id de siete caracteres. La función devuelve el id.
+
+ ```sh
+ console.log(userIdGenerator());
+ 41XTDbE
+ ```
+
+### Ejercicios: Nivel 3
+
+1. Modifique la función _userIdGenerator_. Declare una función de nombre _userIdGeneratedByUser_. No toma ningún parámetro pero toma dos entradas usando prompt(). Una de las entradas es la cantidad de caracteres y la segunda entrada es la cantidad de ID que se supone que se generarán.
+
+ ```sh
+ userIdGeneratedByUser()
+ 'kcsy2
+ SMFYb
+ bWmeq
+ ZXOYh
+ 2Rgxf
+ '
+ userIdGeneratedByUser()
+ '1GCSgPLMaBAVQZ26
+ YD7eFwNQKNs7qXaT
+ ycArC5yrRupyG00S
+ UbGxOFI7UXSWAyKN
+ dIV0SSUTgAdKwStr
+ '
+ ```
+
+1. Escriba una función llamada _rgbColorGenerator_ que genera colores rgb
+
+ ```sh
+ rgbColorGenerator()
+ rgb(125,244,255)
+ ```
+
+1. Escriba una función **_arrayOfHexaColors_** que retorna cualquier cantidad de colores hexadecimales en un array.
+1. Escriba una función **_arrayOfRgbColors_** que retorna cualquier cantidad de colores RGB en un array.
+1. Escriba una función **_convertHexaToRgb_** que convierta el color hexa a rgb y retorna un color rgb.
+1. Escriba una función **_convertRgbToHexa_** que convierta rgb a color hexa y retorna un color hexa.
+1. Escriba una función **_generateColors_** que pueda generar cualquier número de colores hexa o rgb.
+
+ ```js
+ console.log(generateColors("hexa", 3)); // ['#a3e12f', '#03ed55', '#eb3d2b']
+ console.log(generateColors("hexa", 1)); // '#b334ef'
+ console.log(generateColors("rgb", 3)); // ['rgb(5, 55, 175)', 'rgb(50, 105, 100)', 'rgb(15, 26, 80)']
+ console.log(generateColors("rgb", 1)); // 'rgb(33,79, 176)'
+ ```
+
+1. Llame a su función _shuffleArray_, toma un array como parámetro y devuelve un array mezclada
+1. Llame a su función _factorial_, toma un número entero como parámetro y devuelve un factorial del número.
+1. Llame a su función _isEmpty_, toma un parámetro y verifica si está vacío o no.
+1. Llame a su función _sum_, toma cualquier cantidad de argumentos y devuelve la suma.
+1. Escriba una función llamada _sumOfArrayItems_, toma un array como parámetro y retorna la suma de todos los elementos. Compruebe si todos los elementos de la matriz son tipos de números. Si no, dé una respuesta razonable.
+1. Escribe una función llamada _average_, toma un array como parámetro y retorna el promedio de los elementos. Compruebe si todos los elementos de la matriz son tipos de números. Si no, dé una respuesta adecuada.
+1. Escriba una función llamada _modifyArray_ que tome un array como parámetro y modifique el quinto elemento del array y retorna el array. Si la longitud del array es inferior a cinco, retorna 'elemento no encontrado'.
+
+ ```js
+ console.log(modifyArray(['Avocado', 'Tomato', 'Potato','Mango', 'Lemon','Carrot']);
+ ```
+
+ ```sh
+ ['Avocado', 'Tomato', 'Potato','Mango', 'LEMON', 'Carrot']
+ ```
+
+ ```js
+ console.log(modifyArray(['Google', 'Facebook','Apple', 'Amazon','Microsoft', 'IBM']);
+ ```
+
+ ```sh
+ ['Google', 'Facebook','Apple', 'Amazon','MICROSOFT', 'IBM']
+ ```
+
+ ```js
+ console.log(modifyArray(['Google', 'Facebook','Apple', 'Amazon']);
+ ```
+
+ ```sh
+ 'Not Found'
+ ```
+
+1. Escribe una función llamada _isPrime_, que verifica si un número es un número primo.
+1. Escriba una función que verifique si todos los elementos son únicos en un array.
+1. Escriba una función que verifique si todos los elementos de un array son del mismo tipo de datos.
+1. El nombre de las variables de JavaScript no admite caracteres o símbolos especiales, excepto \$ o \_. Escriba una función **isValidVariable** que verifique si una variable es válida o inválida.
+1. Escriba una función que devuelva un array de siete números aleatorios en un rango de 0-9. Todos los números deben ser únicos.
+
+ ```js
+ sevenRandomNumbers()[(1, 4, 5, 7, 9, 8, 0)];
+ ```
+
+1. Escriba una función llamada reverseCountries, toma el array de países y primero copia el array y retorna el array original invertido
+ 🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 6](../dia_06_Bucles/dia_06_bucles.md) | [Día 8 >>](../dia_08_Objetos/dia_08_objetos.md)
diff --git a/Spanish/dia_08_Objetos/dia_08_objetos.md b/Spanish/dia_08_Objetos/dia_08_objetos.md
new file mode 100644
index 000000000..88a1e9df1
--- /dev/null
+++ b/Spanish/dia_08_Objetos/dia_08_objetos.md
@@ -0,0 +1,592 @@
+
+
+[<< Día 7](../dia_07_Funciones/dia_07_funciones.md) | [Día 9 >>](../dia_09_Funciones_De_Orden_Superior/dia_09_funciones_de_orden_superior.md)
+
+
+
+- [📔 Día 8](#📔-día-8)
+ - [Scope](#scope-alcance)
+ - [Objeto Global Window](#objeto-global-window)
+ - [Global scope](#global-scope)
+ - [Local scope](#local-scope)
+ - [📔 Objeto](#📔-objeto)
+ - [Crear un objeto vacío](#crear-un-objeto-vacío)
+ - [Crear un objeto con valores](#crear-un-objeto-con-valores)
+ - [Obtener valores de un objeto](#obtener-valores-de-un-objeto)
+ - [Crear métodos de objetos](#crear-métodos-de-objetos)
+ - [Establecer una nueva clave para un objeto](#establecer-una-nueva-clave-para-un-objeto)
+ - [Métodos de los objetos](#métodos-de-los-objetos)
+ - [Obtención de claves de objetos mediante Object.keys()](#obtención-de-claves-de-objetos-mediante-objectkeys)
+ - [Obtención de valores de objetos mediante Object.values()](#obtención-de-valores-de-objetos-mediante-objectvalues)
+ - [Obtención de claves y valores de objetos mediante Object.entries()](#obtención-de-claves-y-valores-de-objetos-mediante-objectentries)
+ - [Comprobación de propiedades mediante hasOwnProperty()](#comprobación-de-propiedades-mediante-hasownproperty)
+ - [💻 Ejercicios](#💻-ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+ - [Ejercicios: Nivel 2](#ejercicios-nivel-2)
+ - [Ejercicios: Nivel 3](#ejercicios-nivel-3)
+
+# 📔 Día 8
+
+## Scope (alcance)
+
+La variable es la parte fundamental en la programación. Declaramos variables para almacenar diferentes tipos de datos. Para declarar una variable usamos la palabra clave _var_, _let_, y _const_. Una variable puede declararse en diferentes scope. En esta sección, veremos el alcance de las variables, el alcance de las variables cuando usamos var o let.
+El scope de las variables pueden ser:
+
+- Global
+- Local
+
+Las variables pueden ser declaradas con un scope global o local. Veremos tanto el scope global como el local. Cualquier cosa declarada sin let, var o const tiene un alcance global.
+
+Imaginemos que tenemos un fichero scope.js.
+
+### Objeto Global Window
+
+Sin usar console.log() abre tu navegador y comprueba, verás el valor de a y b si escribes a o b en el navegador. Eso significa que a y b ya están disponibles en window
+
+```js
+//scope.js
+a = "JavaScript"; // declarar una variable sin let o const la hace disponible en el objeto window y esta se encuentra en cualquier lugar
+b = 10; // es una variable de scope global y se encuentra en el objeto ventana
+function letsLearnScope() {
+ console.log(a, b);
+ if (true) {
+ console.log(a, b);
+ }
+}
+console.log(a, b); // accesibles
+```
+
+### Global scope
+
+Una variable declarada globalmente puede ser accedida en cualquier lugar del mismo archivo. Pero el término global es relativo. Puede ser global al archivo o puede ser global relativo a algún bloque de códigos.
+
+```js
+//scope.js
+let a = "JavaScript"; // es un scope global que se encontrará en cualquier parte de este archivo
+let b = 10; // es un scope global que se encontrará en cualquier parte de este archivo
+function letsLearnScope() {
+ console.log(a, b); // JavaScript 10, accesible
+ if (true) {
+ let a = "Python";
+ let b = 100;
+ console.log(a, b); // Python 100
+ }
+ console.log(a, b);
+}
+letsLearnScope();
+console.log(a, b); // JavaScript 10, accesible
+```
+
+### Local scope
+
+Una variable declarada como local sólo puede ser accedida en determinados bloques de código.
+
+- Scope del bloque
+- Scope de la función
+
+```js
+//scope.js
+let a = "JavaScript"; // es un scope global que se encontrará en cualquier parte de este archivo
+let b = 10; // es un scope global que se encontrará en cualquier parte de este archivo
+// Scope de la función
+function letsLearnScope() {
+ console.log(a, b); // JavaScript 10, accesible
+ let value = false;
+ // Scope del bloque
+ if (true) {
+ // podemos acceder desde la función y fuera de la función pero
+ // las variables declaradas dentro del if no serán accesibles fuera del bloque if
+ let a = "Python";
+ let b = 20;
+ let c = 30;
+ let d = 40;
+ value = !value;
+ console.log(a, b, c, value); // Python 20 30 true
+ }
+ // no podemos acceder a c porque el scope de c es sólo el bloque if
+ console.log(a, b, value); // JavaScript 10 true
+}
+letsLearnScope();
+console.log(a, b); // JavaScript 10, accesible
+```
+
+Ahora, usted tiene una comprensión del scope. Una variable declarada con _var_ sólo tiene ámbito de función, pero una variable declarada con _let_ o _const_ tiene scope de bloque (bloque de función, bloque if, bloque de bucle, etc). El bloque en JavaScript es un código entre dos llaves({}).
+
+```js
+//scope.js
+function letsLearnScope() {
+ var gravity = 9.81;
+ console.log(gravity);
+}
+// console.log(gravity), Uncaught ReferenceError: la gravedad no está definida
+
+if (true) {
+ var gravity = 9.81;
+ console.log(gravity); // 9.81
+}
+console.log(gravity); // 9.81
+
+for (var i = 0; i < 3; i++) {
+ console.log(i); // 0, 1, 2
+}
+console.log(i); // 3
+```
+
+En ES6 y superiores existe _let_ y _const_, por lo que no sufrirás la insidia de _var_. Cuando usamos _let_ nuestra variable tiene alcance de bloque y no infectara otras partes de nuestro código.
+
+```js
+//scope.js
+function letsLearnScope() {
+ // puedes usar let o const, pero la gravedad es constante prefiero usar const
+ const gravity = 9.81;
+ console.log(gravity);
+}
+// console.log(gravity), Uncaught ReferenceError: la gravedad no está definida
+
+if (true) {
+ const gravity = 9.81;
+ console.log(gravity); // 9.81
+}
+// console.log(gravity), Uncaught ReferenceError: la gravedad no está definida
+
+for (let i = 0; i < 3; i++) {
+ console.log(i); // 0, 1, 2
+}
+// console.log(i), Uncaught ReferenceError: i no está definida
+```
+
+El ámbito _let_ y _const_ es el mismo. La diferencia es sólo la reasignación. No podemos cambiar o reasignar el valor de la variable `const`. Te sugiero encarecidamente que utilices _let_ y _const_, utilizando _let_ y _const_ escribirás un código limpio y evitarás errores difíciles de depurar. Como regla general, puedes usar _let_ para cualquier valor que cambie, _const_ para cualquier valor constante, y para un array, objeto, función de flecha y expresión de función.
+
+## 📔 Objeto
+
+Todo puede ser un objeto y los objetos tienen propiedades y las propiedades tienen valores, por lo que un objeto es un par clave-valor. El orden de la clave no está reservado, o no hay orden. Para crear un objeto literal, utilizamos dos llaves.
+
+### Crear un objeto vacío
+
+Un objeto vacío
+
+```js
+const person = {};
+```
+
+### Crear un objeto con valores
+
+Ahora, el objeto persona tiene las propiedades firstName, lastName, age, location, skills y isMarried. El valor de las propiedades o claves puede ser una cadena, un número, un booleano, un objeto, null, undefined o una función.
+
+Veamos algunos ejemplos de objetos. Cada clave tiene un valor en el objeto.
+
+```js
+const rectangle = {
+ length: 20,
+ width: 20,
+};
+console.log(rectangle); // {length: 20, width: 20}
+
+const person = {
+ firstName: "Asabeneh",
+ lastName: "Yetayeh",
+ age: 250,
+ country: "Finland",
+ city: "Helsinki",
+ skills: [
+ "HTML",
+ "CSS",
+ "JavaScript",
+ "React",
+ "Node",
+ "MongoDB",
+ "Python",
+ "D3.js",
+ ],
+ isMarried: true,
+};
+console.log(person);
+```
+
+### Obtener valores de un objeto
+
+Podemos acceder a los valores del objeto utilizando dos métodos:
+
+- usando . seguido del nombre de la clave si el nombre de la clave es de una sola palabra
+- utilizando corchetes y comillas
+
+```js
+const person = {
+ firstName: "Asabeneh",
+ lastName: "Yetayeh",
+ age: 250,
+ country: "Finland",
+ city: "Helsinki",
+ skills: [
+ "HTML",
+ "CSS",
+ "JavaScript",
+ "React",
+ "Node",
+ "MongoDB",
+ "Python",
+ "D3.js",
+ ],
+ getFullName: function () {
+ return `${this.firstName}${this.lastName}`;
+ },
+ "phone number": "+3584545454545",
+};
+
+// acceder a los valores mediante .
+console.log(person.firstName);
+console.log(person.lastName);
+console.log(person.age);
+console.log(person.location); // undefined
+
+// se puede acceder al valor utilizando corchetes y el nombre de la clave
+console.log(person["firstName"]);
+console.log(person["lastName"]);
+console.log(person["age"]);
+console.log(person["age"]);
+console.log(person["location"]); // undefined
+
+// por ejemplo, para acceder al número de teléfono sólo utilizamos el método del corchete
+console.log(person["phone number"]);
+```
+
+### Crear métodos de objetos
+
+Ahora, el objeto persona tiene las propiedades getFullName. El getFullName es una función dentro del objeto persona y lo llamamos un método del objeto. La palabra clave _this_ se refiere al objeto mismo. Podemos utilizar la palabra _this_ para acceder a los valores de diferentes propiedades del objeto. No podemos usar una función de flecha como método de objeto porque la palabra this se refiere a window dentro de una función de flecha en lugar del objeto mismo. Ejemplo de objeto:
+
+```js
+const person = {
+ firstName: "Asabeneh",
+ lastName: "Yetayeh",
+ age: 250,
+ country: "Finland",
+ city: "Helsinki",
+ skills: [
+ "HTML",
+ "CSS",
+ "JavaScript",
+ "React",
+ "Node",
+ "MongoDB",
+ "Python",
+ "D3.js",
+ ],
+ getFullName: function () {
+ return `${this.firstName} ${this.lastName}`;
+ },
+};
+
+console.log(person.getFullName());
+// Asabeneh Yetayeh
+```
+
+### Establecer una nueva clave para un objeto
+
+Un objeto es una estructura de datos mutable y podemos modificar el contenido de un objeto después de su creación.
+
+Establecer una nueva clave en un objeto
+
+```js
+const person = {
+ firstName: "Asabeneh",
+ lastName: "Yetayeh",
+ age: 250,
+ country: "Finland",
+ city: "Helsinki",
+ skills: [
+ "HTML",
+ "CSS",
+ "JavaScript",
+ "React",
+ "Node",
+ "MongoDB",
+ "Python",
+ "D3.js",
+ ],
+ getFullName: function () {
+ return `${this.firstName} ${this.lastName}`;
+ },
+};
+person.nationality = "Ethiopian";
+person.country = "Finland";
+person.title = "teacher";
+person.skills.push("Meteor");
+person.skills.push("SasS");
+person.isMarried = true;
+
+person.getPersonInfo = function () {
+ let skillsWithoutLastSkill = this.skills
+ .splice(0, this.skills.length - 1)
+ .join(", ");
+ let lastSkill = this.skills.splice(this.skills.length - 1)[0];
+
+ let skills = `${skillsWithoutLastSkill}, and ${lastSkill}`;
+ let fullName = this.getFullName();
+ let statement = `${fullName} is a ${this.title}.\nHe lives in ${this.country}.\nHe teaches ${skills}.`;
+ return statement;
+};
+console.log(person);
+console.log(person.getPersonInfo());
+```
+
+```sh
+Asabeneh Yetayeh is a teacher.
+He lives in Finland.
+He teaches HTML, CSS, JavaScript, React, Node, MongoDB, Python, D3.js, Meteor, and SasS.
+```
+
+### Métodos de los objetos
+
+Existen diferentes métodos para manipular un objeto. Veamos algunos de los métodos disponibles.
+
+_Object.assign_: Para copiar un objeto sin modificar el objeto original
+
+```js
+const person = {
+ firstName: "Asabeneh",
+ age: 250,
+ country: "Finland",
+ city: "Helsinki",
+ skills: ["HTML", "CSS", "JS"],
+ title: "teacher",
+ address: {
+ street: "Heitamienkatu 16",
+ pobox: 2002,
+ city: "Helsinki",
+ },
+ getPersonInfo: function () {
+ return `I am ${this.firstName} and I live in ${this.city}, ${this.country}. I am ${this.age}.`;
+ },
+};
+
+//Métodos de objetos: Object.assign, Object.keys, Object.values, Object.entries
+//hasOwnProperty
+
+const copyPerson = Object.assign({}, person);
+console.log(copyPerson);
+```
+
+#### Obtención de claves de objetos mediante Object.keys()
+
+_Object.keys_: Para obtener las claves o propiedades de un objeto como un array
+
+```js
+const keys = Object.keys(copyPerson);
+console.log(keys); //['firstName', 'age', 'country','city', 'skills','title', 'address', 'getPersonInfo']
+const address = Object.keys(copyPerson.address);
+console.log(address); //['street', 'pobox', 'city']
+```
+
+#### Obtención de valores de objetos mediante Object.values()
+
+_Object.values_:Para obtener los valores de un objeto como un array
+
+```js
+const values = Object.values(copyPerson);
+console.log(values);
+```
+
+#### Obtención de claves y valores de objetos mediante Object.entries()
+
+_Object.entries_:Para obtener las claves y valores de un array
+
+```js
+const entries = Object.entries(copyPerson);
+console.log(entries);
+```
+
+#### Comprobación de propiedades mediante hasOwnProperty()
+
+_hasOwnProperty_: Para comprobar si una clave o propiedad específica existe en un objeto
+
+```js
+console.log(copyPerson.hasOwnProperty("name"));
+console.log(copyPerson.hasOwnProperty("score"));
+```
+
+🌕 Eres asombroso. Ahora, estás súper cargado con el poder de los objetos. Acabas de completar los desafíos del día 8 y llevas 8 pasos de tu camino a la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
+
+## 💻 Ejercicios
+
+### Ejercicios: Nivel 1
+
+1. Crear un objeto vacío llamado dog
+1. Imprime el objeto dog en la consola
+1. Añade las propiedades name, legs, color, age y bark para el objeto dog. La propiedad bark es un método que devuelve _woof woof_
+1. Obtener name, legs, color, age y el valor de bark del objeto dog
+1. Establecer nuevas propiedades al objeto dog: breed, getDogInfo
+
+### Ejercicios: Nivel 2
+
+1. Encuentra a la persona que tiene muchas habilidades en el objeto de los usuarios.
+1. Contar los usuarios conectados, contar los usuarios que tienen más de 50 puntos del siguiente objeto.
+
+ ````js
+ const users = {
+ Alex: {
+ email: 'alex@alex.com',
+ skills: ['HTML', 'CSS', 'JavaScript'],
+ age: 20,
+ isLoggedIn: false,
+ points: 30
+ },
+ Asab: {
+ email: 'asab@asab.com',
+ skills: ['HTML', 'CSS', 'JavaScript', 'Redux', 'MongoDB', 'Express', 'React', 'Node'],
+ age: 25,
+ isLoggedIn: false,
+ points: 50
+ },
+ Brook: {
+ email: 'daniel@daniel.com',
+ skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux'],
+ age: 30,
+ isLoggedIn: true,
+ points: 50
+ },
+ Daniel: {
+ email: 'daniel@alex.com',
+ skills: ['HTML', 'CSS', 'JavaScript', 'Python'],
+ age: 20,
+ isLoggedIn: false,
+ points: 40
+ },
+ John: {
+ email: 'john@john.com',
+ skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux', 'Node.js'],
+ age: 20,
+ isLoggedIn: true,
+ points: 50
+ },
+ Thomas: {
+ email: 'thomas@thomas.com',
+ skills: ['HTML', 'CSS', 'JavaScript', 'React'],
+ age: 20,
+ isLoggedIn: false,
+ points: 40
+ },
+ Paul: {
+ email: 'paul@paul.com',
+ skills: ['HTML', 'CSS', 'JavaScript', 'MongoDB', 'Express', 'React', 'Node'],
+ age: 20,
+ isLoggedIn: false,
+ points: 40
+ }
+ }```
+
+ ````
+
+1. Encontrar personas que sean desarrolladores MERN stack del objeto de los usuarios
+1. Establezca su nombre en el objeto usuarios sin modificar el objeto usuarios original
+1. Obtener todas las claves o propiedades del objeto usuarios
+1. Obtener todos los valores del objeto usuarios
+1. Utilice el objeto países para imprimir el nombre del país, la capital, la población y los idiomas.
+
+### Ejercicios: Nivel 3
+
+1. Crea un objeto literal llamado _personAccount_. Tiene las propiedades _firstName, lastName, incomes, expenses_ y tiene los metodos _totalIncome, totalExpense, accountInfo,addIncome, addExpense_ y _accountBalance_. Incomes es un conjunto de ingresos y su descripción y expenses es un conjunto de ingresos y su descripción.
+
+2. \*\*\*\* Preguntas:2, 3 y 4 se basan en los siguientes dos arrays: users y products ()
+
+```js
+const users = [
+ {
+ _id: "ab12ex",
+ username: "Alex",
+ email: "alex@alex.com",
+ password: "123123",
+ createdAt: "08/01/2020 9:00 AM",
+ isLoggedIn: false,
+ },
+ {
+ _id: "fg12cy",
+ username: "Asab",
+ email: "asab@asab.com",
+ password: "123456",
+ createdAt: "08/01/2020 9:30 AM",
+ isLoggedIn: true,
+ },
+ {
+ _id: "zwf8md",
+ username: "Brook",
+ email: "brook@brook.com",
+ password: "123111",
+ createdAt: "08/01/2020 9:45 AM",
+ isLoggedIn: true,
+ },
+ {
+ _id: "eefamr",
+ username: "Martha",
+ email: "martha@martha.com",
+ password: "123222",
+ createdAt: "08/01/2020 9:50 AM",
+ isLoggedIn: false,
+ },
+ {
+ _id: "ghderc",
+ username: "Thomas",
+ email: "thomas@thomas.com",
+ password: "123333",
+ createdAt: "08/01/2020 10:00 AM",
+ isLoggedIn: false,
+ },
+];
+
+const products = [
+ {
+ _id: "eedfcf",
+ name: "mobile phone",
+ description: "Huawei Honor",
+ price: 200,
+ ratings: [
+ { userId: "fg12cy", rate: 5 },
+ { userId: "zwf8md", rate: 4.5 },
+ ],
+ likes: [],
+ },
+ {
+ _id: "aegfal",
+ name: "Laptop",
+ description: "MacPro: System Darwin",
+ price: 2500,
+ ratings: [],
+ likes: ["fg12cy"],
+ },
+ {
+ _id: "hedfcg",
+ name: "TV",
+ description: "Smart TV:Procaster",
+ price: 400,
+ ratings: [{ userId: "fg12cy", rate: 5 }],
+ likes: ["fg12cy"],
+ },
+];
+```
+
+Imagina que estás obteniendo la colección de usuarios anterior de una base de datos MongoDB.
+a. Crear una función llamada signUp que permita al usuario añadirse a la colección. Si el usuario existe, informar al usuario que ya tiene una cuenta.
+ b. Crear una función llamada signIn que permita al usuario iniciar sesión en la aplicación
+
+3. El array de productos tiene tres elementos y cada uno de ellos tiene seis propiedades.
+ a. Crear una función llamada rateProduct que califique el producto
+ b. Crear una función llamada averageRating que calcule la valoración media de un producto
+
+4. Crear una función llamada likeProduct. Esta función ayuda a dar un like al producto. Si no le gusta eliminar el like y si le gusta darle like
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 7](../dia_07_Funciones/dia_07_funciones.md) | [Día 9 >>](../dia_09_Funciones_De_Orden_Superior/dia_09_funciones_de_orden_superior.md)
diff --git a/Spanish/dia_09_Funciones_De_Orden_Superior/dia_09_funciones_de_orden_superior.md b/Spanish/dia_09_Funciones_De_Orden_Superior/dia_09_funciones_de_orden_superior.md
new file mode 100644
index 000000000..a0111c535
--- /dev/null
+++ b/Spanish/dia_09_Funciones_De_Orden_Superior/dia_09_funciones_de_orden_superior.md
@@ -0,0 +1,707 @@
+
+
+[<< Día 8](../dia_08_Objetos/dia_08_objetos.md) | [Día 10 >>](../dia_10_Sets_y_Maps/dia_10_sets_y_maps.md)
+
+
+
+- [Día 9](#día-9)
+ - [Función De Orden Superior](#función-de-orden-superior)
+ - [Callback](#callback)
+ - [Retornar una función](#retornar-una-función)
+ - [Configuración de tiempo](#configuración-de-tiempo)
+ - [Configuración del intervalo mediante la función setInterval](#configuración-del-intervalo-mediante-la-función-setinterval)
+ - [Configurar tiempo mediante un setTimeout](#configurar-tiempo-mediante-un-settimeout)
+ - [Programación funcional](#programación-funcional)
+ - [forEach](#foreach)
+ - [map](#map)
+ - [filter](#filter)
+ - [reduce](#reduce)
+ - [every](#every)
+ - [find](#find)
+ - [findIndex](#findindex)
+ - [some](#some)
+ - [sort](#sort)
+ - [Ordenar los valores strings](#ordenar-los-valores-strings)
+ - [Ordenar valores numéricos](#ordenar-valores-numéricos)
+ - [Ordenar arrays de objetos](#ordenar-arrays-de-objetos)
+ - [💻 Ejercicios](#💻-ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+ - [Ejercicios: Nivel 2](#ejercicios-nivel-2)
+ - [Ejercicios: Nivel 3](#ejercicios-nivel-3)
+
+# Día 9
+
+## Función De Orden Superior
+
+Las funciones de orden superior son funciones que toman otra función como parámetro o retorna una función como valor. La función que se pasa como parámetro se llama callback.
+
+### Callback
+
+Un callback es una función que puede ser pasada como parámetro a otra función. Véase el ejemplo siguiente.
+
+```js
+// una función callback, el nombre de la función puede ser cualquier nombre
+const callback = (n) => {
+ return n ** 2
+}
+
+// función que toma otra función como callback
+function cube(callback, n) {
+ return callback(n) * n
+}
+
+console.log(cube(callback, 3))
+```
+
+### Retornar una función
+
+Las funciones de orden superior retorna la función como valor
+
+
+```js
+// Función de orden superior que devuelve otra función
+const higherOrder = (n) => {
+ const doSomething = (m) => {
+ const doWhatEver = (t) => {
+ return 2 * n + 3 * m + t;
+ };
+ return doWhatEver;
+ };
+ return doSomething;
+};
+console.log(higherOrder(2)(3)(10));
+```
+
+Veamos dónde utilizamos las funciones de callback. Por ejemplo, el método _forEach_ utiliza callback.
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+const sumArray = (arr) => {
+ let sum = 0;
+ const callback = function (element) {
+ sum += element;
+ };
+ arr.forEach(callback);
+ return sum;
+};
+console.log(sumArray(numbers));
+```
+
+```sh
+15
+```
+
+El ejemplo anterior puede simplificarse como el siguiente:
+
+```js
+const numbers = [1, 2, 3, 4]
+
+const sumArray = arr => {
+ let sum = 0
+ arr.forEach(function(element) {
+ sum += element
+ })
+ return sum
+
+}
+console.log(sumArray(numbers))
+```
+
+```sh
+15
+```
+
+### Configuración de tiempo
+
+En JavaScript podemos ejecutar algunas actividades en un determinado intervalo de tiempo o podemos programar (esperar) algún tiempo para ejecutar algunas actividades.
+
+- setInterval
+- setTimeout
+
+#### Configuración del intervalo mediante la función setInterval
+
+In JavaScript, we use setInterval higher order function to do some activity continuously with in some interval of time. El método global setInterval toma una función callback y una duración como parámetro. La duración está en milisegundos y la llamada de retorno siempre será llamada en ese intervalo de tiempo.
+
+```js
+// sintaxis
+function callback() {
+ // el código va aquí
+}
+setInterval(callback, duration);
+```
+
+```js
+function sayHello() {
+ console.log("Hello");
+}
+setInterval(sayHello, 1000); // imprime hola cada segundo, 1000ms es 1s
+```
+
+#### Configurar tiempo mediante un setTimeout
+
+En JavaScript, utilizamos la función de orden superior setTimeout para ejecutar alguna acción en algún momento en el futuro. El método global setTimeout toma una función callback y una duración como parámetro. La duración está en milisegundos y el callback espera esa cantidad de tiempo.
+
+```js
+// sintaxis
+function callback() {
+ // el código va aquí
+}
+setTimeout(callback, duration); // duración en milliseconds
+```
+
+```js
+function sayHello() {
+ console.log("Hello");
+}
+setTimeout(sayHello, 2000); // imprime hola después de esperar 2 segundos.
+```
+
+## Programación funcional
+
+En lugar de escribir un bucle regular, la última versión de JavaScript introdujo un montón de métodos incorporados que pueden ayudarnos a resolver problemas complicados.
+
+Instead of writing regular loop, latest version of JavaScript introduced lots of built in methods which can help us to solve complicated problems. Todos los métodos incorporados toman la función callback. En esta sección, veremos _forEach_, _map_, _filter_, _reduce_, _find_, _every_, _some_, y _sort_.
+
+### forEach
+
+_forEach_: Iterar los elementos de un array. Utilizamos _forEach_ sólo con arrays. Toma una función callback con elementos, parámetro de índice y el propio array. El índice y el array son opcionales.
+
+```js
+arr.forEach(function (element, index, arr) {
+ console.log(index, element, arr);
+});
+// El código anterior puede escribirse utilizando la función de flecha
+arr.forEach((element, index, arr) => {
+ console.log(index, element, arr);
+});
+// El código anterior puede escribirse utilizando la función de flecha y return explícito
+arr.forEach((element, index, arr) => console.log(index, element, arr));
+```
+
+```js
+let sum = 0;
+const numbers = [1, 2, 3, 4, 5];
+numbers.forEach((num) => console.log(num));
+console.log(sum);
+```
+
+```sh
+1
+2
+3
+4
+5
+```
+
+```js
+let sum = 0;
+const numbers = [1, 2, 3, 4, 5];
+numbers.forEach((num) => (sum += num));
+
+console.log(sum);
+```
+
+```sh
+15
+```
+
+```js
+const countries = ["Finland", "Denmark", "Sweden", "Norway", "Iceland"];
+countries.forEach((element) => console.log(element.toUpperCase()));
+```
+
+```sh
+FINLAND
+DENMARK
+SWEDEN
+NORWAY
+ICELAND
+```
+
+### map
+
+_map_: Iterar los elementos de un array y modificar los elementos del mismo. Toma una función callback con elementos, índice , parámetro del array y devuelve un nuevo array.
+
+```js
+const modifiedArray = arr.map(function (element, index, arr) {
+ return element;
+});
+```
+
+```js
+/*Función flecha y return explícito
+const modifiedArray = arr.map((element,index) => element);
+*/
+//Ejemplo
+const numbers = [1, 2, 3, 4, 5];
+const numbersSquare = numbers.map((num) => num * num);
+
+console.log(numbersSquare);
+```
+
+```sh
+[1, 4, 9, 16, 25]
+```
+
+```js
+const names = ["Asabeneh", "Mathias", "Elias", "Brook"];
+const namesToUpperCase = names.map((name) => name.toUpperCase());
+console.log(namesToUpperCase);
+```
+
+```sh
+['ASABENEH', 'MATHIAS', 'ELIAS', 'BROOK']
+```
+
+```js
+const countries = [
+ "Albania",
+ "Bolivia",
+ "Canada",
+ "Denmark",
+ "Ethiopia",
+ "Finland",
+ "Germany",
+ "Hungary",
+ "Ireland",
+ "Japan",
+ "Kenya",
+];
+const countriesToUpperCase = countries.map((country) => country.toUpperCase());
+console.log(countriesToUpperCase);
+
+/*
+// Función flecha
+const countriesToUpperCase = countries.map((country) => {
+ return country.toUpperCase();
+})
+//Función flecha de return explícita
+const countriesToUpperCase = countries.map(country => country.toUpperCase());
+*/
+```
+
+```sh
+['ALBANIA', 'BOLIVIA', 'CANADA', 'DENMARK', 'ETHIOPIA', 'FINLAND', 'GERMANY', 'HUNGARY', 'IRELAND', 'JAPAN', 'KENYA']
+```
+
+```js
+const countriesFirstThreeLetters = countries.map((country) =>
+ country.toUpperCase().slice(0, 3)
+);
+```
+
+```sh
+ ["ALB", "BOL", "CAN", "DEN", "ETH", "FIN", "GER", "HUN", "IRE", "JAP", "KEN"]
+```
+
+### filter
+
+_Filter_: Filtra los elementos que cumplen las condiciones de filtrado y devuelve un nuevo array.
+
+```js
+//Filtrar los países que contienen land
+const countriesContainingLand = countries.filter((country) =>
+ country.includes("land")
+);
+console.log(countriesContainingLand);
+```
+
+```sh
+['Finland', 'Ireland']
+```
+
+```js
+const countriesEndsByia = countries.filter((country) => country.endsWith("ia"));
+console.log(countriesEndsByia);
+```
+
+```sh
+['Albania', 'Bolivia','Ethiopia']
+```
+
+```js
+const countriesHaveFiveLetters = countries.filter(
+ (country) => country.length === 5
+);
+console.log(countriesHaveFiveLetters);
+```
+
+```sh
+['Japan', 'Kenya']
+```
+
+```js
+const scores = [
+ { name: "Asabeneh", score: 95 },
+ { name: "Lidiya", score: 98 },
+ { name: "Mathias", score: 80 },
+ { name: "Elias", score: 50 },
+ { name: "Martha", score: 85 },
+ { name: "John", score: 100 },
+];
+
+const scoresGreaterEighty = scores.filter((score) => score.score > 80);
+console.log(scoresGreaterEighty);
+```
+
+```sh
+[{name: 'Asabeneh', score: 95}, { name: 'Lidiya', score: 98 },{name: 'Martha', score: 85},{name: 'John', score: 100}]
+```
+
+### reduce
+
+_reduce_: Reduce toma una función callback. La función callback toma como parámetro el acumulador, el valor actual y opcional el valor inicial y retorna un único valor. Es una buena práctica definir un valor inicial para el valor del acumulador. Si no especificamos este parámetro, por defecto el acumulador obtendrá el `primer valor` del array. Si nuestro array es un _array vacío_, entonces `Javascript` lanzará un error.
+
+```js
+arr.reduce((acc, cur) => {
+ // algunas operaciones van aquí antes de devolver un valor
+ return;
+}, initialValue);
+```
+
+```js
+const numbers = [1, 2, 3, 4, 5];
+const sum = numbers.reduce((acc, cur) => acc + cur, 0);
+
+console.log(sum);
+```
+
+```js
+15;
+```
+
+### every
+
+_every_: Comprueba si todos los elementos son similares en un aspecto. Devuelve un booleano
+
+```js
+const names = ["Asabeneh", "Mathias", "Elias", "Brook"];
+const areAllStr = names.every((name) => typeof name === "string"); // ¿Son todas strings?
+
+console.log(areAllStr);
+```
+
+```sh
+true
+```
+
+```js
+const bools = [true, true, true, true];
+const areAllTrue = bools.every((b) => b === true); // ¿Son todas true?
+
+console.log(areAllTrue); // true
+```
+
+```sh
+true
+
+```
+
+### find
+
+_find_: Retorna el primer elemento que cumple la condición
+
+```js
+const ages = [24, 22, 25, 32, 35, 18];
+const age = ages.find((age) => age < 20);
+
+console.log(age);
+```
+
+```js
+18;
+```
+
+```js
+const names = ["Asabeneh", "Mathias", "Elias", "Brook"];
+const result = names.find((name) => name.length > 7);
+console.log(result);
+```
+
+```sh
+Asabeneh
+```
+
+```js
+const scores = [
+ { name: "Asabeneh", score: 95 },
+ { name: "Mathias", score: 80 },
+ { name: "Elias", score: 50 },
+ { name: "Martha", score: 85 },
+ { name: "John", score: 100 },
+];
+
+const score = scores.find((user) => user.score > 80);
+console.log(score);
+```
+
+```sh
+{ name: "Asabeneh", score: 95 }
+```
+
+### findIndex
+
+_findIndex_: Retorna la posición del primer elemento que cumple la condición
+
+```js
+const names = ["Asabeneh", "Mathias", "Elias", "Brook"];
+const ages = [24, 22, 25, 32, 35, 18];
+
+const result = names.findIndex((name) => name.length > 7);
+console.log(result); // 0
+
+const age = ages.findIndex((age) => age < 20);
+console.log(age); // 5
+```
+
+### some
+
+_some_: Comprueba si algunos de los elementos son similares en un aspecto. Retorna un booleano
+
+```js
+const names = ["Asabeneh", "Mathias", "Elias", "Brook"];
+const bools = [true, true, true, true];
+
+const areSomeTrue = bools.some((b) => b === true);
+
+console.log(areSomeTrue); //true
+```
+
+```js
+const areAllStr = names.some((name) => typeof name === "number"); // ¿Son todas strings ?
+console.log(areAllStr); // false
+```
+
+### sort
+
+_sort_: El método "sort" ordena los elementos del array de forma ascendente o descendente. Por defecto, el método **_sort()_** ordena los valores como strings. Esto funciona bien para los elementos del array de strings pero no para los números. Si los valores numéricos se ordenan como strings y nos da un resultado erróneo. El método de Sort modifica el array original. Se recomienda copiar los datos originales antes de empezar a utilizar el método _sort_.
+
+#### Ordenar los valores strings
+
+```js
+const products = ["Milk", "Coffee", "Sugar", "Honey", "Apple", "Carrot"];
+console.log(products.sort()); // ['Apple', 'Carrot', 'Coffee', 'Honey', 'Milk', 'Sugar']
+//Ahora la matriz original de productos también está ordenada
+```
+
+#### Ordenar valores numéricos
+
+Como puede ver en el ejemplo de abajo, el 100 fue el primero después de ser clasificado en orden ascendente. Ordenar convierte los elementos en string , ya que '100' y otros números comparados, 1 que el principio del string '100' se convirtió en el más pequeño. Para evitar esto, utilizamos una función de callback de comparación dentro del método sort, que devuelve un negativo, un cero o un positivo.
+
+```js
+const numbers = [9.81, 3.14, 100, 37];
+// El uso del método sort para ordenar los elementos numéricos proporciona un resultado erróneo.
+console.log(numbers.sort()); //[100, 3.14, 37, 9.81]
+numbers.sort(function (a, b) {
+ return a - b;
+});
+
+console.log(numbers); // [3.14, 9.81, 37, 100]
+
+numbers.sort(function (a, b) {
+ return b - a;
+});
+console.log(numbers); //[100, 37, 9.81, 3.14]
+```
+
+#### Ordenar arrays de objetos
+
+Siempre que ordenamos objetos en un array, utilizamos la clave del objeto para comparar. Veamos el siguiente ejemplo.
+
+```js
+objArr.sort(function (a, b) {
+ if (a.key < b.key) return -1;
+ if (a.key > b.key) return 1;
+ return 0;
+});
+
+// o
+
+objArr.sort(function (a, b) {
+ if (a["key"] < b["key"]) return -1;
+ if (a["key"] > b["key"]) return 1;
+ return 0;
+});
+
+const users = [
+ { name: "Asabeneh", age: 150 },
+ { name: "Brook", age: 50 },
+ { name: "Eyob", age: 100 },
+ { name: "Elias", age: 22 },
+];
+users.sort((a, b) => {
+ if (a.age < b.age) return -1;
+ if (a.age > b.age) return 1;
+ return 0;
+});
+console.log(users); // ordenados de forma ascendente
+// [{…}, {…}, {…}, {…}]
+```
+
+🌕 Lo estás haciendo muy bien. Nunca te rindas porque las grandes cosas llevan su tiempo. Acabas de completar el día 9 de desafíos y llevas nueve pasos de tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
+
+## 💻 Ejercicios
+
+### Ejercicios: Nivel 1
+
+```js
+const countries = ["Finland", "Sweden", "Denmark", "Norway", "IceLand"];
+const names = ["Asabeneh", "Mathias", "Elias", "Brook"];
+const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
+const products = [
+ { product: "banana", price: 3 },
+ { product: "mango", price: 6 },
+ { product: "potato", price: " " },
+ { product: "avocado", price: 8 },
+ { product: "coffee", price: 10 },
+ { product: "tea", price: "" },
+];
+```
+
+1. Explique la diferencia entre **_forEach, map, filter, and reduce_**.
+2. Defina una función callback antes de utilizarla en forEach, map, filter o reduce.
+3. Utiliza **_forEach_** para mostrar con console.log cada país del array de países.
+4. Utiliza **_forEach_** para mostrar con console.log cada nombre del array de nombres.
+5. Utiliza **_forEach_** para mostrar con console.log cada número del array de números.
+6. Utiliza **_map_** para crear un nuevo array cambiando cada país a mayúsculas en el array de países.
+7. Utilice **_map_** para crear un array de longitudes de países a partir del array de países.
+8. Usa **_map_** para crear un nuevo array cambiando cada número al cuadrado en el array de números.
+9. Utilice **_map_** para cambiar cada nombre a mayúsculas en el array de nombres.
+10. Utilice **_map_** para asignar el array de productos a sus correspondientes precios.
+11. Utilice **_filter_** para filtrar los países que contienen **_land_**.
+12. Utilice **_filter_** para filtrar los países que tienen seis caracteres.
+13. Utilice **_filter_** para filtrar los países que contengan seis letras o más en el array de países.
+14. Utilice **_filter_** para filtrar los países que empiezan por "E";
+15. Utilice **_filter_** para filtrar sólo los precios con valores.
+16. Declara una función llamada getStringLists que toma un array como parámetro y devuelve un array sólo con elementos string.
+17. Usa **_reduce_** para sumar todos los números del array de números.
+18. Utiliza **_reduce_** para concatenar todos los países y producir esta frase: **_Estonia, Finland, Sweden, Denmark, Norway, y IceLand son países del norte de Europa_**
+19. Explique la diferencia entre **_some_** y **_every_**
+20. Utilice **_some_** para comprobar si la longitud de algunos nombres es superior a siete en el array de nombres.
+21. Utilice **_every_** para comprobar si todos los países contienen la palabra land.
+22. Explique la diferencia entre **_find_** y **_findIndex_**.
+23. Utilice **_find_** para encontrar el primer país que contenga sólo seis letras en el array de países.
+24. Utilice **_findIndex_** para encontrar la posición del primer país que contenga sólo seis letras en el array de países.
+25. Utilice **_findIndex_** para encontrar la posición de **_Norway_** si no existe en el array obtendrá -1.
+26. Utilice **_findIndex_** para encontrar la posición de **_Russia_** si no existe en el array obtendrá -1.
+
+### Ejercicios: Nivel 2
+
+1. Encuentre el precio total de los productos encadenando dos o más iteradores de matrices (por ejemplo, arr.map(callback).filter(callback).reduce(callback)).
+1. Encuentre la suma del precio de los productos usando sólo reduce(callback)).
+1. Declara una función llamada **_categorizeCountries_** que retorna un array de países que tienen algún patrón común (encuentras el array de países en este repositorio como countries.js(ej 'land', 'ia', 'island','stan')).
+1. Cree una función que retorne un array de objetos, que es la letra y el número de veces que la letra usa para empezar el nombre de un país.
+1. Declara una función **_getFirstTenCountries_** y retorna un array de diez países. Utiliza diferente programación funcional para trabajar en el array countries.js.
+1. Declara una función **_getLastTenCountries_** que devuelve los últimos diez países del array de países.
+1. Encuentre qué _letra_ se utiliza muchas _veces_ como inicial de un nombre de país del array de países (ej. Finland, Fiji, France etc)
+
+### Ejercicios: Nivel 3
+
+1. Utiliza la información de los países, en la carpeta de datos. Ordena los países por nombre, por capital, por población
+1. \*\*\* Encuentre las 10 lenguas más habladas:
+
+ ````js
+ // El resultado debería ser el siguiente
+ console.log(mostSpokenLanguages(countries, 10))
+ [
+ {country: 'English',count:91},
+ {country: 'French',count:45},
+ {country: 'Arabic',count:25},
+ {country: 'Spanish',count:24},
+ {country:'Russian',count:9},
+ {country:'Portuguese', count:9},
+ {country:'Dutch',count:8},
+ {country:'German',count:7},
+ {country:'Chinese',count:5},
+ {country:'Swahili',count:4}
+ ]
+
+ // El resultado debería ser el siguiente
+ console.log(mostSpokenLanguages(countries, 3))
+ [
+ {country: 'English',count: 91},
+ {country: 'French',count: 45},
+ {country: 'Arabic',count: 25},
+ ]```
+
+ ````
+
+1. \*\*\* Utilice el archivo countries_data.js para crear una función que cree los diez países más poblados.
+
+ ````js
+ console.log(mostPopulatedCountries(countries, 10))
+
+ [
+ {country: 'China', population: 1377422166},
+ {country: 'India', population: 1295210000},
+ {country: 'United States of America', population: 323947000},
+ {country: 'Indonesia', population: 258705000},
+ {country: 'Brazil', population: 206135893},
+ {country: 'Pakistan', population: 194125062},
+ {country: 'Nigeria', population: 186988000},
+ {country: 'Bangladesh', population: 161006790},
+ {country: 'Russian Federation', population: 146599183},
+ {country: 'Japan', population: 126960000}
+ ]
+
+ console.log(mostPopulatedCountries(countries, 3))
+ [
+ {country: 'China', population: 1377422166},
+ {country: 'India', population: 1295210000},
+ {country: 'United States of America', population: 323947000}
+ ]
+ ```
+
+ ````
+
+1. \*\*\* Intenta desarrollar un programa que calcule la medida de tendencia central de una muestra(mean, median, mode) y medida de la variabilidad(range, variance, standard deviation). Además de esas medidas, encuentre el mínimo, el máximo, el recuento, el porcentaje y la distribución de frecuencias de la muestra. Puede crear un objeto llamado estadísticas y crear todas las funciones que hacen cálculos estadísticos como método para el objeto estadísticas. Comprueba el resultado que aparece a continuación.
+
+ ```js
+ const ages = [31, 26, 34, 37, 27, 26, 32, 32, 26, 27, 27, 24, 32, 33, 27, 25, 26, 38, 37, 31, 34, 24, 33, 29, 26]
+
+ console.log('Count:', statistics.count()) // 25
+ console.log('Sum: ', statistics.sum()) // 744
+ console.log('Min: ', statistics.min()) // 24
+ console.log('Max: ', statistics.max()) // 38
+ console.log('Range: ', statistics.range() // 14
+ console.log('Mean: ', statistics.mean()) // 30
+ console.log('Median: ',statistics.median()) // 29
+ console.log('Mode: ', statistics.mode()) // {'mode': 26, 'count': 5}
+ console.log('Variance: ',statistics.var()) // 17.5
+ console.log('Standard Deviation: ', statistics.std()) // 4.2
+ console.log('Variance: ',statistics.var()) // 17.5
+ console.log('Frequency Distribution: ',statistics.freqDist()) # [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)]
+ ```
+
+ ```sh
+ console.log(statistics.describe())
+ Count: 25
+ Sum: 744
+ Min: 24
+ Max: 38
+ Range: 14
+ Mean: 30
+ Median: 29
+ Mode: (26, 5)
+ Variance: 17.5
+ Standard Deviation: 4.2
+ Frequency Distribution: [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)]
+ ```
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 8](../dia_08_Objetos/dia_08_objetos.md) | [Día 10 >>](../dia_10_Sets_y_Maps/dia_10_sets_y_maps.md)
diff --git a/Spanish/dia_10_Sets_y_Maps/dia_10_sets_y_maps.md b/Spanish/dia_10_Sets_y_Maps/dia_10_sets_y_maps.md
new file mode 100644
index 000000000..827ee3fb5
--- /dev/null
+++ b/Spanish/dia_10_Sets_y_Maps/dia_10_sets_y_maps.md
@@ -0,0 +1,436 @@
+
+
+[<< Día 9](../dia_09_Funciones_De_Orden_Superior/dia_09_funciones_de_orden_superior.md) | [Día 11>>](../dia_11_Desestructuracion_y_Spreading/dia_11_desestructuracion_y_spreading.md)
+
+
+
+- [Día 10](#día-10)
+ - [Set](#set)
+ - [Creación de set vacío](#creación-de-set-vacío)
+ - [Creación de set a partir de array](#creación-de-set-a-partir-de-array)
+ - [Añadir un elemento a set](#añadir-un-elemento-a-set)
+ - [Borrar un elemento a set](#borrar-un-elemento-a-set)
+ - [Comprobación de un elemento en set](#comprobación-de-un-elemento-en-set)
+ - [Limpiar set](#limpiar-set)
+ - [Unión de sets](#unión-de-sets)
+ - [Intersección de sets](#intersección-de-sets)
+ - [Diferencia de sets](#diferencia-de-sets)
+ - [Map](#map)
+ - [Creación de un Map vacío](#creación-de-un-map-vacío)
+ - [Creación de un Map a partir de un array](#creación-de-un-map-a-partir-de-un-array)
+ - [Añadir valores a Map](#añadir-valores-a-map)
+ - [Obtención de un valor de Map](#obtención-de-un-valor-de-map)
+ - [Comprobar key en Map](#comprobar-key-en-map)
+ - [Ejercicios](#ejercicios)
+ - [Ejercicios:Nivel 1](#ejerciciosnivel-1)
+ - [Ejercicios:Nivel 2](#ejerciciosnivel-2)
+ - [Ejercicios:Nivel 3](#ejerciciosnivel-3)
+
+# Día 10
+
+## Set
+
+Set (conjunto) es una colección de elementos. Set sólo puede contener elementos únicos.
+Veamos cómo crear set en la sección siguiente.
+
+### Creación de set vacío
+
+```js
+const companies = new Set();
+console.log(companies);
+```
+
+```sh
+Set(0) {}
+```
+
+### Creación de set a partir de array
+
+```js
+const languages = [
+ "English",
+ "Finnish",
+ "English",
+ "French",
+ "Spanish",
+ "English",
+ "French",
+];
+
+const setOfLanguages = new Set(languages);
+console.log(setOfLanguages);
+```
+
+```sh
+Set(4) {"English", "Finnish", "French", "Spanish"}
+```
+
+Set es un objeto iterable y podemos iterar a través de cada elemento.
+
+```js
+const languages = [
+ "English",
+ "Finnish",
+ "English",
+ "French",
+ "Spanish",
+ "English",
+ "French",
+];
+
+const setOfLanguages = new Set(languages);
+
+for (const language of setOfLanguages) {
+ console.log(language);
+}
+```
+
+```sh
+ English
+ Finnish
+ French
+ Spanish
+```
+
+### Añadir un elemento a set
+
+```js
+const companies = new Set(); // crear set vacío
+console.log(companies.size); // 0
+
+companies.add("Google"); // añadir un elemento a set
+companies.add("Facebook");
+companies.add("Amazon");
+companies.add("Oracle");
+companies.add("Microsoft");
+console.log(companies.size); // 5 elements in set
+console.log(companies);
+```
+
+```sh
+Set(5) {"Google", "Facebook", "Amazon", "Oracle", "Microsoft"}
+```
+
+También podemos utilizar el bucle para añadir elementos a set.
+
+```js
+const companies = ["Google", "Facebook", "Amazon", "Oracle", "Microsoft"];
+setOfCompanies = new Set();
+for (const company of companies) {
+ setOfCompanies.add(company);
+}
+```
+
+```sh
+Set(5) {"Google", "Facebook", "Amazon", "Oracle", "Microsoft"}
+
+```
+
+### Borrar un elemento a set
+
+Podemos eliminar un elemento de set utilizando un método de eliminación.
+
+```js
+console.log(companies.delete("Google"));
+console.log(companies.size); // 4 elementos en set
+```
+
+### Comprobación de un elemento en set
+
+El método has puede ayudar a saber si un determinado elemento existe en set.
+
+```js
+console.log(companies.has("Apple")); // false
+console.log(companies.has("Facebook")); // true
+```
+
+### Limpiar set
+
+Elimina todos los elementos de set.
+
+```js
+companies.clear();
+console.log(companies);
+```
+
+```sh
+Set(0) {}
+```
+
+Vea el ejemplo siguiente para aprender a utilizar set.
+
+```js
+const languages = [
+ "English",
+ "Finnish",
+ "English",
+ "French",
+ "Spanish",
+ "English",
+ "French",
+];
+const langSet = new Set(languages);
+console.log(langSet); // Set(4) {"English", "Finnish", "French", "Spanish"}
+console.log(langSet.size); // 4
+
+const counts = [];
+const count = {};
+
+for (const l of langSet) {
+ const filteredLang = languages.filter((lng) => lng === l);
+ console.log(filteredLang); // ["English", "English", "English"]
+ counts.push({ lang: l, count: filteredLang.length });
+}
+console.log(counts);
+```
+
+```js
+[
+ { lang: "English", count: 3 },
+ { lang: "Finnish", count: 1 },
+ { lang: "French", count: 2 },
+ { lang: "Spanish", count: 1 },
+];
+```
+
+Otros casos de uso de set. Por ejemplo, para contar elementos únicos en un array.
+
+```js
+const numbers = [5, 3, 2, 5, 5, 9, 4, 5];
+const setOfNumbers = new Set(numbers);
+
+console.log(setOfNumbers);
+```
+
+```sh
+Set(5) {5, 3, 2, 9, 4}
+```
+
+### Unión de sets
+
+Para encontrar la unión de dos sets se puede utilizar el operador de dispersión. Busquemos la unión del set A y el set B (A U B)
+
+```js
+let a = [1, 2, 3, 4, 5];
+let b = [3, 4, 5, 6];
+let c = [...a, ...b];
+
+let A = new Set(a);
+let B = new Set(b);
+let C = new Set(c);
+
+console.log(C);
+```
+
+```sh
+Set(6) {1, 2, 3, 4, 5,6}
+```
+
+### Intersección de sets
+
+Para encontrar la intersección de dos sets se puede utilizar un filtro. Vamos a encontrar la intersección del set A y el set B (A ∩ B)
+
+```js
+let a = [1, 2, 3, 4, 5];
+let b = [3, 4, 5, 6];
+
+let A = new Set(a);
+let B = new Set(b);
+
+let c = a.filter((num) => B.has(num));
+let C = new Set(c);
+
+console.log(C);
+```
+
+```sh
+Set(3) {3, 4, 5}
+```
+
+### Diferencia de sets
+
+Para encontrar la diferencia entre dos sets se puede utilizar un filtro. Vamos a encontrar la diferencia del set A y el set B (A \ B)
+
+```js
+let a = [1, 2, 3, 4, 5];
+let b = [3, 4, 5, 6];
+
+let A = new Set(a);
+let B = new Set(b);
+
+let c = a.filter((num) => !B.has(num));
+let C = new Set(c);
+
+console.log(C);
+```
+
+```sh
+Set(2) {1, 2}
+```
+
+## Map
+
+### Creación de un Map vacío
+
+```js
+const map = new Map();
+console.log(map);
+```
+
+```sh
+Map(0) {}
+```
+
+### Creación de un Map a partir de un array
+
+```js
+countries = [
+ ["Finland", "Helsinki"],
+ ["Sweden", "Stockholm"],
+ ["Norway", "Oslo"],
+];
+const map = new Map(countries);
+console.log(map);
+console.log(map.size);
+```
+
+```sh
+Map(3) {"Finland" => "Helsinki", "Sweden" => "Stockholm", "Norway" => "Oslo"}
+3
+```
+
+### Añadir valores a Map
+
+```js
+const countriesMap = new Map();
+console.log(countriesMap.size); // 0
+countriesMap.set("Finland", "Helsinki");
+countriesMap.set("Sweden", "Stockholm");
+countriesMap.set("Norway", "Oslo");
+console.log(countriesMap);
+console.log(countriesMap.size);
+```
+
+```sh
+Map(3) {"Finland" => "Helsinki", "Sweden" => "Stockholm", "Norway" => "Oslo"}
+3
+```
+
+### Obtención de un valor de Map
+
+```js
+console.log(countriesMap.get("Finland"));
+```
+
+```sh
+Helsinki
+```
+
+### Comprobar key en Map
+
+Comprueba si una key existe en un map usando el método _has_. Retorna _true_ o _false_.
+
+```js
+console.log(countriesMap.has("Finland"));
+```
+
+```sh
+true
+```
+
+Obtención de todos los valores de map usando un bucle
+
+```js
+for (const country of countriesMap) {
+ console.log(country);
+}
+```
+
+```sh
+(2) ["Finland", "Helsinki"]
+(2) ["Sweden", "Stockholm"]
+(2) ["Norway", "Oslo"]
+```
+
+```js
+for (const [country, city] of countriesMap) {
+ console.log(country, city);
+}
+```
+
+```sh
+Finland Helsinki
+Sweden Stockholm
+Norway Oslo
+```
+
+🌕 Has conseguido un gran logro, eres imparable. ¡Sigue adelante! Acabas de completar los desafíos del día 10 y llevas 10 pasos de tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
+
+## Ejercicios
+
+### Ejercicios:Nivel 1
+
+```js
+const a = [4, 5, 8, 9];
+const b = [3, 4, 5, 7];
+const countries = ["Finland", "Sweden", "Norway"];
+```
+
+1. crear un set vacío
+2. Crear un set que contenga de 0 a 10 utilizando el bucle
+3. Eliminar un elemento de set
+4. Limpia set
+5. Crear un set de 5 elementos string a partir de un array
+6. Crear un map de países y el número de caracteres de un país
+
+### Ejercicios:Nivel 2
+
+1. Encontrar a unión b
+2. Encontrar a intersección b
+3. Encontrar a con b
+
+### Ejercicios:Nivel 3
+
+1. Cuántos idiomas hay en el archivo de objetos de países.
+
+1. \*\*\* Utiliza los datos de los países para encontrar las 10 lenguas más habladas:
+
+```js
+// El resultado debería ser el siguiente
+console.log(mostSpokenLanguages(countries, 10))[
+ ({ English: 91 },
+ { French: 45 },
+ { Arabic: 25 },
+ { Spanish: 24 },
+ { Russian: 9 },
+ { Portuguese: 9 },
+ { Dutch: 8 },
+ { German: 7 },
+ { Chinese: 5 },
+ { Swahili: 4 },
+ { Serbian: 4 })
+];
+
+// El resultado debería ser el siguiente
+console.log(mostSpokenLanguages(countries, 3))[
+ ({ English: 91 }, { French: 45 }, { Arabic: 25 })
+];
+```
+
+🎉 ¡Felicitaciones! 🎉
+
+[<< Día 9](../dia_09_Funciones_De_Orden_Superior/dia_09_funciones_de_orden_superior.md) | [Día 11 >>](../dia_11_Desestructuracion_y_Spreading/dia_11_desestructuracion_y_spreading.md)
diff --git a/Spanish/dia_11_Desestructuracion_y_Spreading/dia_11_desestructuracion_y_spreading.md b/Spanish/dia_11_Desestructuracion_y_Spreading/dia_11_desestructuracion_y_spreading.md
new file mode 100644
index 000000000..20e20a68b
--- /dev/null
+++ b/Spanish/dia_11_Desestructuracion_y_Spreading/dia_11_desestructuracion_y_spreading.md
@@ -0,0 +1,695 @@
+
+
30 Días de JavaScript: Desestructuración y Spreading
+
+[<< Día 11](../dia_11_Desestructuracion_y_Spreading/dia_11_desestructuracion_y_spreading.md) | [Día 13>>](../dia_13_Metodos_del_Objeto_Console/dia_13_metodos_del_objeto_console.md)
+
+
+
+- [📘 Día 12](#📘-día-12)
+ - [Expresiones Regulares](#expresiones-regulares)
+ - [Parámetros RegExp](#parámetros-regexp)
+ - [Patrón](#patrón)
+ - [Banderas](#banderas)
+ - [Creación de un patrón con el constructor RegExp](#creación-de-un-patrón-con-el-constructor-regexp)
+ - [Creación de un patrón sin el constructor RegExp](#creación-de-un-patrón-sin-el-constructor-regexp)
+ - [Métodos del objeto RegExp](#métodos-del-objeto-regexp)
+ - [Pruebas de coincidencia](#pruebas-de-coincidencia)
+ - [Array que contiene todas las coincidencias](#array-que-contiene-todas-las-coincidencias)
+ - [Sustitución de una subcadena](#sustitución-de-una-subcadena)
+ - [Corchetes](#corchetes)
+ - [Caracter Escape (\\) en RegExp](#caracter-escape--en-regexp)
+ - [Una o más veces(+)](#una-o-más-veces)
+ - [Punto(.)](#punto)
+ - [Cero o más veces(\*)](#cero-o-más-veces)
+ - [Cero o una vez (?)](#cero-o-una-vez)
+ - [Cuantificador en RegExp](#cuantificador-en-regexp)
+ - [Caret ^](#caret)
+ - [Coincidencia exacta](#coincidencia-exacta)
+ - [💻 Ejercicios](#💻-ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+ - [Ejercicios: Nivel 2](#ejercicios-nivel-2)
+ - [Ejercicios: Nivel 3](#ejercicios-nivel-3)
+
+# 📘 Día 12
+
+## Expresiones Regulares
+
+Una expresión regular o RegExp es un pequeño lenguaje de programación que ayuda a encontrar patrones en los datos. Una RegExp puede ser utilizada para comprobar si algún patrón existe en diferentes tipos de datos. Para usar RegExp en JavaScript, podemos usar el constructor RegExp o podemos declarar un patrón RegExp usando dos barras inclinadas seguidas de una bandera. Podemos crear un patrón de dos maneras.
+
+Para declarar una cadena de caracteres utilizamos una comilla simple, una comilla doble y un signo de retroceso; para declarar una expresión regular utilizamos dos barras inclinadas y una bandera opcional. La bandera puede ser g, i, m, s, u o y.
+
+### Parámetros RegExp
+
+Una expresión regular toma dos parámetros. Un patrón de búsqueda requerido y una bandera opcional.
+
+#### Patrón
+
+Un patrón puede ser un texto o cualquier forma de patrón que tenga algún tipo de similitud. Por ejemplo, la palabra "spam" en un correo electrónico podría ser un patrón que nos interesa buscar en un correo electrónico o un formato de número de teléfono puede ser de nuestro interés para buscar.
+
+#### Banderas
+
+Las banderas son parámetros opcionales en una expresión regular que determinan el tipo de búsqueda. Veamos algunas de las banderas:
+
+- g: una bandera global que significa buscar un patrón en todo el texto
+- i: indicador de insensibilidad a las mayúsculas y minúsculas (busca tanto en minúsculas como en mayúsculas)
+- m: multilínea
+
+### Creación de un patrón con el constructor RegExp
+
+Declarar una expresión regular sin bandera global y sin distinguir entre mayúsculas y minúsculas.
+
+```js
+// sin bandera
+let pattern = "love";
+let regEx = new RegExp(pattern);
+```
+
+Declarar una expresión regular con un indicador global y un indicador de insensibilidad a las mayúsculas y minúsculas.
+
+```js
+let pattern = "love";
+let flag = "gi";
+let regEx = new RegExp(pattern, flag);
+```
+
+Declarar un patrón regex usando el objeto RegExp. Escribir el patrón y la bandera dentro del constructor RegExp
+
+```js
+let regEx = new RegExp("love", "gi");
+```
+
+### Creación de un patrón sin el constructor RegExp
+
+Declarar una expresión regular con un indicador global y un indicador de insensibilidad a las mayúsculas y minúsculas.
+
+```js
+let regEx = /love/gi;
+```
+
+La expresión regular anterior es la misma que creamos con el constructor RegExp
+
+```js
+let regEx = new RegExp("love", "gi");
+```
+
+### Métodos del objeto RegExp
+
+Veamos algunos de los métodos RegExp
+
+#### Pruebas de coincidencia
+
+_test()_:Comprueba si hay una coincidencia en una cadena. Devuelve verdadero o falso.
+
+```js
+const str = "I love JavaScript";
+const pattern = /love/;
+const result = pattern.test(str);
+console.log(result);
+```
+
+```sh
+true
+```
+
+#### Array que contiene todas las coincidencias
+
+_match()_:Retorna un array que contiene todas las coincidencias, incluyendo los grupos de captura, o null si no se encuentra ninguna coincidencia.
+Si no utilizamos una bandera global, match() retorna un array que contiene el patrón, el índice, la entrada y el grupo.
+
+```js
+const str = "I love JavaScript";
+const pattern = /love/;
+const result = str.match(pattern);
+console.log(result);
+```
+
+```sh
+["love", index: 2, input: "I love JavaScript", groups: undefined]
+```
+
+```js
+const str = "I love JavaScript";
+const pattern = /love/g;
+const result = str.match(pattern);
+console.log(result);
+```
+
+```sh
+["love"]
+```
+
+_search()_: Busca una coincidencia en una cadena. Devuelve el índice de la coincidencia, o -1 si la búsqueda falla.
+
+```js
+const str = "I love JavaScript";
+const pattern = /love/g;
+const result = str.search(pattern);
+console.log(result);
+```
+
+```sh
+2
+```
+
+#### Sustitución de una subcadena
+
+_replace()_: Ejecuta una búsqueda de una coincidencia en una cadena, y reemplaza la subcadena coincidente con una subcadena de reemplazo.
+
+```js
+const txt =
+ "Python es el lenguaje más bello que ha creado el ser humano.\
+Recomiendo python para un primer lenguaje de programación";
+
+matchReplaced = txt.replace(/Python|python/, "JavaScript");
+console.log(matchReplaced);
+```
+
+```sh
+JavaScript es el lenguaje más bello que ha creado el ser humano. Recomiendo python como primer lenguaje de programación
+```
+
+```js
+const txt =
+ "Python es el lenguaje más bello que ha creado el ser humano.\
+Recomiendo python para un primer lenguaje de programación";
+
+matchReplaced = txt.replace(/Python|python/g, "JavaScript");
+console.log(matchReplaced);
+```
+
+```sh
+JavaScript es el lenguaje más bello que ha creado el ser humano. Recomiendo JavaScript para un primer lenguaje de programación
+```
+
+```js
+const txt =
+ "Python es el lenguaje más bello que ha creado el ser humano.\
+Recomiendo python para un primer lenguaje de programación";
+
+matchReplaced = txt.replace(/Python/gi, "JavaScript");
+console.log(matchReplaced);
+```
+
+```sh
+JavaScript es el lenguaje más bello que ha creado el ser humano. Recomiendo JavaScript para un primer lenguaje de programación
+```
+
+```js
+const txt =
+ "%So%y p%r%%of%%es%or%a% y m%e %% enc%an%ta en%se%ña%r.\
+N%o h%a%y n%a%d%a mas g%r%at%if%icante q%ue e%d%uc%a%r y c%a%p%ac%i%ta%r %a l%a g%e%n%t%e.\
+L%a e%n%%señ%anza m%e %p%ar%ec%e ma%s% i%n%te%r%esa%nt%e que %cu%alq%uie%r %otro t%ra%ba%jo.\
+E%s%t%o te mo%ti%v%a a s%er p%ro%fe%sor.";
+
+matches = txt.replace(/%/g, "");
+console.log(matches);
+```
+
+```sh
+Soy profesora y me encanta enseñar. No hay nada más gratificante que educar y capacitar a la gente. La enseñanza me parece más interesante que cualquier otro trabajo. ¿Esto te motiva a ser profesor?
+```
+
+- []: Un conjunto de caracteres
+ - [a-c] significa, a o b o c
+ - [a-z] significa, cualquier letra de la a a la z
+ - [A-Z] significa, cualquier carácter de la A a la Z
+ - [0-3] significa, 0 o 1 o 2 o 3
+ - [0-9] significa cualquier número del 0 al 9
+ - [A-Za-z0-9] cualquier carácter que sea de la a a la z, de la A a la Z, del 0 al 9
+- \\: utiliza para evadir caracteres especiales
+ - \d significa: coincide cuando el string contiene dígitos (numeros del 0-9)
+ - \D significa: coincide cuando el string no contiene dígitos
+- . : cualquier carácter excepto la nueva línea (\n)
+- ^: comienza con
+ - r'^substring' eg r'^love', una frase que comienza con la palabra love
+ - r'[^abc] significa no a, no b, no c.
+- $: termina con
+ - r'substring$' eg r'love$', la frase termina con una palabra love
+- \*: cero o más veces
+ - r'[a]\*' significa un opcional o puede ocurrir muchas veces.
+- +: una o más veces
+ - r'[a]+' significa al menos una o más veces
+- ?: cero o una vez
+ - r'[a]?' significa cero veces o una vez
+- \b: Buscador de palabras, coincide con el principio o el final de una palabra
+- {3}: Exactamente 3 caracteres
+- {3,}: Al menos 3 caracteres
+- {3,8}: De 3 a 8 caracteres
+- |: O bien
+ - r'apple|banana' significa tanto una manzana como un plátano
+- (): Capturar y agrupar
+
+
+
+Usemos un ejemplo para aclarar los metacaracteres anteriores
+
+### Corchetes
+
+Usemos el corchete para incluir las minúsculas y las mayúsculas
+
+```js
+const pattern = "[Aa]pple"; // este corchete significa A o a
+const txt =
+ "Apple and banana are fruits. An old cliche says an apple a day keeps the doctor way has been replaced by a banana a day keeps the doctor far far away. ";
+const matches = txt.match(pattern);
+
+console.log(matches);
+```
+
+```sh
+["Apple", index: 0, input: "Apple and banana are fruits. An old cliche says an apple a day keeps the doctor way has been replaced by a banana a day keeps the doctor far far away.", groups: undefined]
+
+```
+
+```js
+const pattern = /[Aa]pple/g; // este corchete significa A o a
+const txt =
+ "Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away. ";
+const matches = txt.match(pattern);
+
+console.log(matches);
+```
+
+```sh
+["Apple", "apple"]
+```
+
+Si queremos buscar la banana, escribimos el patrón de la siguiente manera:
+
+```js
+const pattern = /[Aa]pple|[Bb]anana/g; // este corchete significa A o a
+const txt =
+ "Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away. Banana is easy to eat too.";
+const matches = txt.match(pattern);
+
+console.log(matches);
+```
+
+```sh
+["Apple", "banana", "apple", "banana", "Banana"]
+```
+
+Utilizando el corchete y el operador or , conseguimos extraer Apple, apple, Banana y banana.
+
+### Caracter Escape (\\) en RegExp
+
+```js
+const pattern = /\d/g; // d es un carácter especial que significa dígitos
+const txt = "This regular expression example was made in January 12, 2020.";
+const matches = txt.match(pattern);
+
+console.log(matches); // ["1", "2", "2", "0", "2", "0"], esto es lo que no queremos
+```
+
+```js
+const pattern = /\d+/g; // d es un carácter especial que significa dígitos
+const txt = "This regular expression example was made in January 12, 2020.";
+const matches = txt.match(pattern);
+
+console.log(matches); // ["12", "2020"], esto es lo que no queremos
+```
+
+### Una o más veces(+)
+
+```js
+const pattern = /\d+/g; // d es un carácter especial que significa dígitos
+const txt = "This regular expression example was made in January 12, 2020.";
+const matches = txt.match(pattern);
+console.log(matches); // ["12", "2020"], esto es lo que no queremos
+```
+
+### Punto(.)
+
+```js
+const pattern = /[a]./g; // este corchete significa a y . significa cualquier carácter excepto nueva línea
+const txt = "Apple and banana are fruits";
+const matches = txt.match(pattern);
+
+console.log(matches); // ["an", "an", "an", "a ", "ar"]
+```
+
+```js
+const pattern = /[a].+/g; // . cualquier carácter, + cualquier carácter una o más veces
+const txt = "Apple and banana are fruits";
+const matches = txt.match(pattern);
+
+console.log(matches); // ['and banana are fruits']
+```
+
+### Cero o más veces(\*)
+
+Cero o muchas veces. El patrón puede no ocurrir o puede ocurrir muchas veces.
+
+```js
+const pattern = /[a].*/g; //. cualquier carácter, + cualquier carácter una o más veces
+const txt = "Apple and banana are fruits";
+const matches = txt.match(pattern);
+
+console.log(matches); // ['and banana are fruits']
+```
+
+### Cero o una vez (?)
+
+Cero o una vez. El patrón puede no ocurrir o puede ocurrir una vez.
+
+```js
+const txt =
+ "I am not sure if there is a convention how to write the word e-mail.\
+Some people write it email others may write it as Email or E-mail.";
+const pattern = /[Ee]-?mail/g; // ? significa que es opcional
+matches = txt.match(pattern);
+
+console.log(matches); // ["e-mail", "email", "Email", "E-mail"]
+```
+
+### Cuantificador en RegExp
+
+Podemos especificar la longitud de la subcadena que buscamos en un texto, utilizando una llave. Veamos cómo utilizar los cuantificadores RegExp. Imaginemos que estamos interesados en una subcadena cuya longitud es de 4 caracteres
+
+```js
+const txt = "This regular expression example was made in December 6, 2019.";
+const pattern = /\\b\w{4}\b/g; // palabras de cuatro caracteres exactamente
+const matches = txt.match(pattern);
+console.log(matches); //['This', 'made', '2019']
+```
+
+```js
+const txt = "This regular expression example was made in December 6, 2019.";
+const pattern = /\b[a-zA-Z]{4}\b/g; // palabras de cuatro caracteres exactos sin números
+const matches = txt.match(pattern);
+console.log(matches); //['This', 'made']
+```
+
+```js
+const txt = "This regular expression example was made in December 6, 2019.";
+const pattern = /\d{4}/g; // un número y exactamente cuatro dígitos
+const matches = txt.match(pattern);
+console.log(matches); // ['2019']
+```
+
+```js
+const txt = "This regular expression example was made in December 6, 2019.";
+const pattern = /\d{1,4}/g; // 1 to 4
+const matches = txt.match(pattern);
+console.log(matches); // ['6', '2019']
+```
+
+### Caret ^
+
+- Comienza con
+
+```js
+const txt = "This regular expression example was made in December 6, 2019.";
+const pattern = /^This/; // ^ significa que comienza con
+const matches = txt.match(pattern);
+console.log(matches); // ['This']
+```
+
+- Negación
+
+```js
+const txt = "This regular expression example was made in December 6, 2019.";
+const pattern = /[^A-Za-z,. ]+/g; // ^ en un conjunto de caracteres significa negación, no de la A a la Z, no de la a a la z, sin espacio, sin coma y sin punto
+const matches = txt.match(pattern);
+console.log(matches); // ["6", "2019"]
+```
+
+### Coincidencia exacta
+
+Debe tener ^ que empieza y $ que es el final.
+
+```js
+let pattern = /^[A-Z][a-z]{3,12}$/;
+let name = "Asabeneh";
+let result = pattern.test(name);
+
+console.log(result); // true
+```
+
+🌕 Estás llegando lejos. Sigue avanzando. Ahora, estás súper cargado con el poder de la expresión regular. Tienes el poder de extraer y limpiar cualquier tipo de texto y puedes dar sentido a los datos no estructurados. Acabas de completar los retos del día 12 y llevas 12 pasos de tu camino a la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
+
+## 💻 Ejercicios
+
+### Ejercicios: Nivel 1
+
+1. Calcula los ingresos anuales totales de la persona a partir del siguiente texto. 'Gana 4000 euros de sueldo al mes, 10000 euros de bonificación anual, 5500 euros de cursos online al mes'.
+1. La posición de algunas partículas en el eje horizontal x -12, -4, -3 y -1 en la dirección negativa, 0 en el origen, 4 y 8 en la dirección positiva. Extrae estos números y encuentra la distancia entre las dos partes más lejanas.
+
+```js
+points = ["-1", "2", "-4", "-3", "-1", "0", "4", "8"];
+sortedPoints = [-4, -3, -1, -1, 0, 2, 4, 8];
+distance = 12;
+```
+
+1. Escribir un patrón que identifique si una cadena es una variable JavaScript válida
+
+ ```sh
+ is_valid_variable('first_name') # True
+ is_valid_variable('first-name') # False
+ is_valid_variable('1first_name') # False
+ is_valid_variable('firstname') # True
+ ```
+
+### Ejercicios: Nivel 2
+
+1. Escriba una función llamada _tenMostFrequentWords_ que obtenga las diez palabras más frecuentes de una cadena?
+
+ ```js
+ paragraph = `I love teaching. If you do not love teaching what else can you love. I love Python if you do not love something which can give you all the capabilities to develop an application what else can you love.`;
+ console.log(tenMostFrequentWords(paragraph));
+ ```
+
+ ```sh
+ [
+ {word:'love', count:6},
+ {word:'you', count:5},
+ {word:'can', count:3},
+ {word:'what', count:2},
+ {word:'teaching', count:2},
+ {word:'not', count:2},
+ {word:'else', count:2},
+ {word:'do', count:2},
+ {word:'I', count:2},
+ {word:'which', count:1},
+ {word:'to', count:1},
+ {word:'the', count:1},
+ {word:'something', count:1},
+ {word:'if', count:1},
+ {word:'give', count:1},
+ {word:'develop',count:1},
+ {word:'capabilities',count:1},
+ {word:'application', count:1},
+ {word:'an',count:1},
+ {word:'all',count:1},
+ {word:'Python',count:1},
+ {word:'If',count:1}]
+ ```
+
+ ```js
+ console.log(tenMostFrequentWords(paragraph, 10));
+ ```
+
+ ```sh
+ [{word:'love', count:6},
+ {word:'you', count:5},
+ {word:'can', count:3},
+ {word:'what', count:2},
+ {word:'teaching', count:2},
+ {word:'not', count:2},
+ {word:'else', count:2},
+ {word:'do', count:2},
+ {word:'I', count:2},
+ {word:'which', count:1}
+ ]
+ ```
+
+### Ejercicios: Nivel 3
+
+1. Escribe una función que limpie el texto. Limpia el siguiente texto. Después de la limpieza, cuente tres palabras más frecuentes en la cadena.
+
+```js
+sentence = `%I $am@% a %tea@cher%, &and& I lo%#ve %tea@ching%;. There $is nothing; &as& mo@re rewarding as educa@ting &and& @emp%o@wering peo@ple. ;I found tea@ching m%o@re interesting tha@n any other %jo@bs. %Do@es thi%s mo@tivate yo@u to be a tea@cher!?`;
+console.log(cleanText(sentence));
+```
+
+````sh
+ I am a teacher and I love teaching There is nothing as more rewarding as educating and empowering people I found teaching more interesting than any other jobs Does this motivate you to be a teacher
+ ```
+2. Escriba una función que encuentre las palabras más frecuentes. Después de la limpieza, cuente tres palabras más frecuentes en la cadena.
+
+```js
+ console.log(mostFrequentWords(cleanedText))
+ [{word:'I', count:3}, {word:'teaching', count:2}, {word:'teacher', count:2}]
+````
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 11](../dia_11_Desestructuracion_y_Spreading/dia_11_desestructuracion_y_spreading.md) | [Día 13 >>](../dia_13_Metodos_del_Objeto_Console/dia_13_metodos_del_objeto_console.md)
diff --git a/Spanish/dia_13_Metodos_del_Objeto_Console/dia_13_metodos_del_objeto_console.md b/Spanish/dia_13_Metodos_del_Objeto_Console/dia_13_metodos_del_objeto_console.md
new file mode 100644
index 000000000..a599353cd
--- /dev/null
+++ b/Spanish/dia_13_Metodos_del_Objeto_Console/dia_13_metodos_del_objeto_console.md
@@ -0,0 +1,358 @@
+
+
+[<< Día 12](../dia_12_Expresiones_Regulares/dia_12_expresiones_regulares.md) | [Día 14>>](../dia_14_Manejo_de_Errores/dia_14_manejo_de_errores.md)
+
+
+
+- [Día 13](#día-13)
+ - [Métodos del Objeto Console](#métodos-del-objeto-console)
+ - [console.log()](#consolelog)
+ - [console.warn()](#consolewarn)
+ - [console.error()](#consoleerror)
+ - [console.table()](#consoletable)
+ - [console.time()](#consoletime)
+ - [console.info()](#consoleinfo)
+ - [console.assert()](#consoleassert)
+ - [console.group()](#consolegroup)
+ - [console.count()](#consolecount)
+ - [console.clear()](#consoleclear)
+ - [Ejercicios](#ejercicios)
+ - [Ejercicios:Nivel 1](#ejerciciosnivel-1)
+ - [Ejercicios:Nivel 2](#ejerciciosnivel-2)
+ - [Ejercicios:Nivel 3](#ejerciciosnivel-3)
+
+# Día 13
+
+## Métodos del Objeto Console
+
+En esta sección, trataremos sobre console y los métodos de los objetos console. Los principiantes generalmente no saben cuál usar: console.log(), document.write() o document.getElementById.
+
+Usamos métodos de objetos console para mostrar la salida en la consola del navegador y usamos document.write para mostrar la salida en el documento del navegador (view port). Ambos métodos se utilizan únicamente con fines de prueba y depuración. El método console es la herramienta de prueba y depuración más popular en el navegador. Usamos document.getElementById() cuando queremos interactuar con el DOM usando JavaScript. Trataremos el tema del DOM en otra sección.
+
+Además del famoso método console.log(), console proporciona otros métodos más.
+
+### console.log()
+
+Usamos console.log() para mostrar la salida en la consola del navegador. Podemos sustituir valores y también podemos estilizar la salida del registro usando %c.
+
+- Mostrando la salida en la consola del navegador
+
+```js
+console.log("30 Days of JavaScript");
+```
+
+```sh
+30 Days of JavaScript
+```
+
+- Sustitución
+
+```js
+console.log("%d %s of JavaScript", 30, "Days");
+```
+
+```sh
+30 Days of JavaScript
+```
+
+- CSS
+
+Podemos darle estilo al mensaje de registro usando css. Copia el siguiente código y pégalo en la consola del navegador para ver el resultado.
+
+```js
+console.log("%c30 Days Of JavaScript", "color:green"); // la salida del registro es verde
+console.log(
+ "%c30 Days%c %cOf%c %cJavaScript%c",
+ "color:green",
+ "",
+ "color:red",
+ "",
+ "color:yellow"
+); // salida del registro texto verde rojo y amarillo
+```
+
+### console.warn()
+
+Usamos console.warn() para dar avisos en el navegador. Por ejemplo para informar o avisar de la depreciación de la versión de un paquete o de malas prácticas. Copia el siguiente código y pégalo en la consola del navegador para ver los mensajes de advertencia.
+
+```js
+console.warn("This is a warning");
+console.warn(
+ "You are using React. Do not touch the DOM. Virtual DOM will take care of handling the DOM!"
+);
+console.warn("Warning is different from error");
+```
+
+### console.error()
+
+El método console.error() muestra un mensaje de error.
+
+```js
+console.error("This is an error message");
+console.error("We all make mistakes");
+```
+
+### console.table()
+
+El método console.table() muestra los datos como una tabla en la consola. Muestra los datos en forma de tabla. El método console.table() toma un argumento requerido data, que debe ser un array o un objeto, y un parámetro adicional opcional columns.
+
+Empecemos con un simple array. El código siguiente muestra una tabla con dos columnas. Una columna índice para mostrar el índice y una columna valor para mostrar los nombres
+
+```js
+const names = ["Asabeneh", "Brook", "David", "John"];
+console.table(names);
+```
+
+Comprobemos también el resultado de un objeto. Esto crea una tabla con dos columnas: una columna índice que contiene las claves y una columna valor que contiene los valores del objeto.
+
+```js
+const user = {
+ name: "Asabeneh",
+ title: "Programmer",
+ country: "Finland",
+ city: "Helsinki",
+ age: 250,
+};
+console.table(user);
+```
+
+Comprueba el resto de los ejemplos copiando y pegando en la consola del navegador.
+
+```js
+const countries = [
+ ["Finland", "Helsinki"],
+ ["Sweden", "Stockholm"],
+ ["Norway", "Oslo"],
+];
+console.table(countries);
+```
+
+```js
+const users = [
+ {
+ name: "Asabeneh",
+ title: "Programmer",
+ country: "Finland",
+ city: "Helsinki",
+ age: 250,
+ },
+ {
+ name: "Eyob",
+ title: "Teacher",
+ country: "Sweden",
+ city: "London",
+ age: 25,
+ },
+ {
+ name: "Asab",
+ title: "Instructor",
+ country: "Norway",
+ city: "Oslo",
+ age: 22,
+ },
+ {
+ name: "Matias",
+ title: "Developer",
+ country: "Denmark",
+ city: "Copenhagen",
+ age: 28,
+ },
+];
+console.table(users);
+```
+
+### console.time()
+
+Inicia un temporizador que se puede utilizar para controlar el tiempo que dura una operación. Puedes dar a cada temporizador un nombre único, y puedes tener hasta 10.000 temporizadores funcionando en una página determinada. Cuando llame a console.timeEnd() con el mismo nombre, el navegador mostrará el tiempo, en milisegundos, que ha transcurrido desde que se inició el temporizador.
+
+```js
+const countries = [
+ ["Finland", "Helsinki"],
+ ["Sweden", "Stockholm"],
+ ["Norway", "Oslo"],
+];
+
+console.time("Regular for loop");
+for (let i = 0; i < countries.length; i++) {
+ console.log(countries[i][0], countries[i][1]);
+}
+console.timeEnd("Regular for loop");
+
+console.time("for of loop");
+for (const [name, city] of countries) {
+ console.log(name, city);
+}
+console.timeEnd("for of loop");
+
+console.time("forEach loop");
+countries.forEach(([name, city]) => {
+ console.log(name, city);
+});
+console.timeEnd("forEach loop");
+```
+
+```sh
+Finland Helsinki
+Sweden Stockholm
+Norway Oslo
+Regular for loop: 0.34716796875ms
+Finland Helsinki
+Sweden Stockholm
+Norway Oslo
+for of loop: 0.26806640625ms
+Finland Helsinki
+Sweden Stockholm
+Norway Oslo
+forEach loop: 0.358154296875ms
+```
+
+De acuerdo con la salida anterior, el bucle for regular es más lento que el bucle for of o forEach.
+
+### console.info()
+
+Muestra un mensaje de información en la consola del navegador.
+
+```js
+console.info("30 Days Of JavaScript challenge is trending on Github");
+console.info("30 Days Of fullStack challenge might be released");
+console.info("30 Days Of HTML and CSS challenge might be released");
+```
+
+### console.assert()
+
+El método console.assert() escribe un mensaje de error en la consola si la afirmación es falsa. Si la afirmación es verdadera, no pasa nada. El primer parámetro es una expresión de aserción. Si esta expresión es falsa, se mostrará un mensaje de error de aserción fallida.
+
+```js
+console.assert(4 > 3, "4 is greater than 3"); // no hay resultado
+console.assert(3 > 4, "3 is not greater than 4"); // Aserción fallida: 3 no es mayor que 4
+
+for (let i = 0; i <= 10; i += 1) {
+ let errorMessage = `${i} is not even`;
+ console.log("the # is " + i);
+ console.assert(i % 2 === 0, { number: i, errorMessage: errorMessage });
+}
+```
+
+### console.group()
+
+El console.group() puede ayudar a agrupar diferentes grupos de registro. Copie el siguiente código y péguelo en la consola del navegador para los grupos.
+
+```js
+const names = ["Asabeneh", "Brook", "David", "John"];
+const countries = [
+ ["Finland", "Helsinki"],
+ ["Sweden", "Stockholm"],
+ ["Norway", "Oslo"],
+];
+const user = {
+ name: "Asabeneh",
+ title: "Programmer",
+ country: "Finland",
+ city: "Helsinki",
+ age: 250,
+};
+const users = [
+ {
+ name: "Asabeneh",
+ title: "Programmer",
+ country: "Finland",
+ city: "Helsinki",
+ age: 250,
+ },
+ {
+ name: "Eyob",
+ title: "Teacher",
+ country: "Sweden",
+ city: "London",
+ age: 25,
+ },
+ {
+ name: "Asab",
+ title: "Instructor",
+ country: "Norway",
+ city: "Oslo",
+ age: 22,
+ },
+ {
+ name: "Matias",
+ title: "Developer",
+ country: "Denmark",
+ city: "Copenhagen",
+ age: 28,
+ },
+];
+
+console.group("Names");
+console.log(names);
+console.groupEnd();
+
+console.group("Countries");
+console.log(countries);
+console.groupEnd();
+
+console.group("Users");
+console.log(user);
+console.log(users);
+console.groupEnd();
+```
+
+### console.count()
+
+Imprime el número de veces que se llama a console.count(). Toma un parámetro de etiqueta de cadena. Es muy útil para contar el número de veces que se llama a una función. En el siguiente ejemplo, el método console.count() se ejecutará tres veces
+
+```js
+const func = () => {
+ console.count("Function has been called");
+};
+func();
+func();
+func();
+```
+
+```sh
+Function has been called: 1
+Function has been called: 2
+Function has been called: 3
+```
+
+### console.clear()
+
+El console.clear() limpia la consola del navegador.
+
+🌕 Sigue con el buen trabajo. Sigue esforzándote, ¡el cielo es el límite! Acabas de completar el día 13 de desafíos y llevas 13 pasos de tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
+
+## Ejercicios
+
+### Ejercicios:Nivel 1
+
+1. Mostrar la matriz de países como una tabla
+2. Mostrar el objeto países como una tabla
+3. Utilice console.group() para agrupar los registros
+
+### Ejercicios:Nivel 2
+
+1. 10 > 2 \* 10 use console.assert()
+2. Escribe un mensaje de advertencia utilizando console.warn()
+3. Escribe un mensaje de error utilizando console.error()
+
+### Ejercicios:Nivel 3
+
+1. Comprueba la diferencia de velocidad entre los siguientes bucles: while, for, for of, forEach
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 12](../dia_12_Expresiones_Regulares/dia_12_expresiones_regulares.md) | [Día 14>>](../dia_14_Manejo_de_Errores/dia_14_manejo_de_errores.md)
diff --git a/Spanish/dia_14_Manejo_de_Errores/dia_14_manejo_de_errores.md b/Spanish/dia_14_Manejo_de_Errores/dia_14_manejo_de_errores.md
new file mode 100644
index 000000000..973c180c2
--- /dev/null
+++ b/Spanish/dia_14_Manejo_de_Errores/dia_14_manejo_de_errores.md
@@ -0,0 +1,193 @@
+
+
+[<< Día 13](../dia_13_Metodos_del_Objeto_Console/dia_13_metodos_del_objeto_console.md) | [Día 15>>](../dia_15_Clases/dia_15_clases.md)
+
+
+
+- [Día 14](#día-14)
+ - [Manejo de Errores](#manejo-de-errores)
+ - [Tipo de Error](#tipo-de-error)
+ - [Ejercicios](#ejercicios)
+ - [Ejercicios:Nivel 1](#ejerciciosnivel-1)
+ - [Ejercicios: Nivel 2](#ejerciciosnivel-2)
+ - [Ejercicios:Nivel 3](#ejerciciosnivel-3)
+
+# Día 14
+
+## Manejo de Errores
+
+JavaScript es un lenguaje de tipado libre. Algunas veces obtendrá un error en tiempo de ejecución cuando intente acceder a una variable no definida o llamar a una función no definida, etc.
+
+JavaScript, al igual que python o Java, proporciona un mecanismo de gestión de errores para capturar los errores en tiempo de ejecución mediante el bloque try-catch-finally.
+
+```js
+try {
+ // código que puede arrojar un error
+} catch (err) {
+ // código a ejecutar si se produce un error
+} finally {
+ // código que se ejecutará independientemente de que se produzca un error o no
+}
+```
+
+**try**: envuelve el código sospechoso que puede arrojar un error en un bloque try. La sentencia try nos permite definir un bloque de código para que se compruebe si hay errores mientras se ejecuta.
+
+**catch**: escribe código para hacer algo en el bloque catch cuando se produce un error. El bloque catch puede tener parámetros que le darán información sobre el error. El bloque Catch se utiliza para registrar un error o mostrar mensajes específicos al usuario.
+
+**finally**: El bloque finally se ejecutará siempre, independientemente de que se produzca un error. El bloque finally puede utilizarse para completar la tarea restante o para restablecer las variables que puedan haber cambiado antes de que se produzca el error en el bloque try.
+
+**Example:**
+
+```js
+try {
+ let lastName = "Yetayeh";
+ let fullName = fistName + " " + lastName;
+} catch (err) {
+ console.log(err);
+}
+```
+
+```sh
+ReferenceError: fistName no está definido
+ at :4:20
+```
+
+```js
+try {
+ let lastName = "Yetayeh";
+ let fullName = fistName + " " + lastName;
+} catch (err) {
+ console.error(err); // podemos utilizar console.log() o console.error()
+} finally {
+ console.log("In any case I will be executed");
+}
+```
+
+```sh
+ReferenceError: fistName no está definido
+ at :4:20
+En cualquier caso se ejecutará
+```
+
+El bloque de captura toma un parámetro. Es habitual pasar e, err o error como parámetro al bloque catch. Este parámetro es un objeto y tiene las claves nombre y mensaje. Utilicemos el nombre y el mensaje.
+
+```js
+try {
+ let lastName = "Yetayeh";
+ let fullName = fistName + " " + lastName;
+} catch (err) {
+ console.log("Name of the error", err.name);
+ console.log("Error message", err.message);
+} finally {
+ console.log("In any case I will be executed");
+}
+```
+
+```sh
+Name of the error ReferenceError
+Error message fistName is not defined
+In any case I will be executed
+```
+
+throw: la sentencia throw nos permite crear un error personalizado. Podemos pasar una cadena, un número, un booleano o un objeto. Utilice la sentencia throw para lanzar una excepción. Cuando se lanza una excepción, la expresión especifica el valor de la excepción. Cada una de las siguientes acciones lanza una excepción:
+
+```js
+throw "Error2"; // genera una excepción con un valor de cadena
+throw 42; // genera una excepción con el valor 42
+throw true; // genera una excepción con el valor true
+throw new Error("Required"); // genera un objeto de error con el mensaje de Requerido
+```
+
+```js
+const throwErrorExampleFun = () => {
+ let message;
+ let x = prompt("Enter a number: ");
+ try {
+ if (x == "") throw "empty";
+ if (isNaN(x)) throw "not a number";
+ x = Number(x);
+ if (x < 5) throw "too low";
+ if (x > 10) throw "too high";
+ } catch (err) {
+ console.log(err);
+ }
+};
+throwErrorExampleFun();
+```
+
+### Tipo de Error
+
+- ReferenceError: Se ha producido una referencia ilegal. Se lanza un ReferenceError si utilizamos una variable que no ha sido declarada.
+
+```js
+let firstName = "Asabeneh";
+let fullName = firstName + " " + lastName;
+
+console.log(fullName);
+```
+
+```sh
+Uncaught ReferenceError: lastName is not defined
+ at :2:35
+```
+
+- SyntaxError: Se ha producido un error de sintaxis
+
+```js
+let square = 2 x 2
+console.log(square)
+
+console.log('Hello, world")
+```
+
+```sh
+Uncaught SyntaxError: Unexpected identifier
+```
+
+- TypeError: Se ha producido un error sobre el tipo
+
+```js
+let num = 10;
+console.log(num.toLowerCase());
+```
+
+```sh
+Uncaught TypeError: num.toLowerCase is not a function
+ at :2:17
+```
+
+Estos son algunos de los errores más comunes a los que te puedes enfrentar cuando escribes un código. Entender los errores puede ayudarte a saber qué errores has cometido y te ayudará a depurar tu código rápidamente.
+
+🌕 Usted es impecable. Ahora, sabes cómo manejar los errores y puedes escribir una aplicación robusta que maneje entradas inesperadas del usuario. Acabas de completar los desafíos del día 14 y llevas 14 pasos en tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
+
+## Ejercicios
+
+### Ejercicios:Nivel 1
+
+Practica
+
+### Ejercicios:Nivel 2
+
+Practica
+
+### Ejercicios:Nivel 3
+
+Practica
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 13](../dia_13_Metodos_del_Objeto_Console/dia_13_metodos_del_objeto_console.md) | [Día 15>>](../dia_15_Clases/dia_15_clases.md)
diff --git a/Spanish/dia_15_Clases/dia_15_clases.md b/Spanish/dia_15_Clases/dia_15_clases.md
new file mode 100644
index 000000000..d0f0cb1a2
--- /dev/null
+++ b/Spanish/dia_15_Clases/dia_15_clases.md
@@ -0,0 +1,715 @@
+
+
+[<< Día 14](../dia_14_Manejo_de_Errores/dia_14_manejo_de_errores.md) | [Día 16>>](../dia_16_JSON/dia_16_json.md)
+
+
+
+- [Día 15](#día-15)
+ - [Clases](#clases)
+ - [Definir una clase](#definir-una-clase)
+ - [Instanciar Clases](#instanciar-clases)
+ - [Constructor](#constructor)
+ - [Valores por defecto con el constructor](#valores-por-defecto-con-el-constructor)
+ - [Métodos de clase](#métodos-de-clase)
+ - [Propiedades con valor inicial](#propiedades-con-valor-inicial)
+ - [getter](#getter)
+ - [setter](#setter)
+ - [Método Static](#método-static)
+ - [Herencia](#herencia)
+ - [Anulación de métodos](#anulación-de-métodos)
+ - [Ejercicios](#ejercicios)
+ - [Ejercicios Nivel 1](#ejercicios-nivel-1)
+ - [Ejercicios Nivel 2](#ejercicios-nivel-2)
+ - [Ejercicios Nivel 3](#ejercicios-nivel-3)
+
+# Día 15
+
+## Clases
+
+JavaScript es un lenguaje de programación orientado a objetos. Todo en JavScript es un objeto, con sus propiedades y métodos. Creamos una clase para crear un objeto. Una clase es como un constructor de objetos, o un "plano" para crear objetos. Instanciamos una clase para crear un objeto. La clase define los atributos y el comportamiento del objeto, mientras que el objeto, por su parte, representa la clase.
+
+Una vez que creamos una clase podemos crear un objeto a partir de ella cuando queramos. La creación de un objeto a partir de una clase se denomina instanciación de la clase.
+
+En la sección de objetos, vimos cómo crear un objeto literal. El objeto literal es un singleton (instancia única). Si queremos obtener un objeto similar, tenemos que escribirlo. Sin embargo, la clase permite crear muchos objetos. Esto ayuda a reducir la cantidad de código y la repetición del mismo.
+
+### Definir una clase
+
+Para definir una clase en JavaScript necesitamos la palabra clave _class_ , el nombre de una clase en **CamelCase** y bloque de código (dentro de dos corchetes). Vamos a crear una clase llamada Persona.
+
+```sh
+// sintaxis
+class ClassName {
+ // el código va aquí
+}
+
+```
+
+**Ejemplo:**
+
+```js
+class Person {
+ // el código va aquí
+}
+```
+
+Hemos creado una clase Persona pero no tiene nada dentro.
+
+### Instanciar Clases
+
+Instanciar una clase significa crear un objeto a partir de una clase. Necesitamos la palabra clave _new_ y llamamos al nombre de la clase después de la palabra _new_.
+
+Vamos a crear un objeto persona a partir de nuestra clase Persona.
+
+```js
+class Person {
+ // el código va aquí
+}
+const person = new Person();
+console.log(person);
+```
+
+```sh
+Person {}
+```
+
+Como puedes ver, hemos creado un objeto persona. Como la clase aún no tiene propiedades, el objeto también está vacío.
+
+Usemos el constructor de la clase para pasar diferentes propiedades a la clase.
+
+### Constructor
+
+El constructor es una función incorporada que permite crear un blueprint para nuestro objeto. La función constructora comienza con la palabra clave _constructor_ seguida de un paréntesis. Dentro del paréntesis pasamos las propiedades del objeto como parámetro. Utilizamos la palabra clave _this_ para adjuntar los parámetros del constructor con la clase.
+
+El siguiente constructor de la clase Persona tiene las propiedades firstName y lastName. Estas propiedades se adjuntan a la clase Persona utilizando la palabra clave _this_. _this_ se refiere a la propia clase.
+
+```js
+class Person {
+ constructor(firstName, lastName) {
+ console.log(this); // Compruebe el resultado desde aquí
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+}
+
+const person = new Person();
+
+console.log(person);
+```
+
+```sh
+Person {firstName: undefined, lastName:undefined}
+```
+
+Todas las claves del objeto son undefined. Siempre que instanciemos debemos pasar el valor de las propiedades. Pasemos el valor en este momento cuando instanciamos la clase.
+
+```js
+class Person {
+ constructor(firstName, lastName) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+}
+
+const person1 = new Person("Asabeneh", "Yetayeh");
+
+console.log(person1);
+```
+
+```sh
+Person {firstName: "Asabeneh", lastName: "Yetayeh"}
+```
+
+Como hemos dicho al principio, una vez que creamos una clase podemos crear muchos objetos utilizando la clase. Ahora, vamos a crear muchos objetos persona utilizando la clase Persona.
+
+```js
+class Person {
+ constructor(firstName, lastName) {
+ console.log(this); // Compruebe el resultado desde aquí
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+}
+
+const person1 = new Person("Asabeneh", "Yetayeh");
+const person2 = new Person("Lidiya", "Tekle");
+const person3 = new Person("Abraham", "Yetayeh");
+
+console.log(person1);
+console.log(person2);
+console.log(person3);
+```
+
+```sh
+Person {firstName: "Asabeneh", lastName: "Yetayeh"}
+Person {firstName: "Lidiya", lastName: "Tekle"}
+Person {firstName: "Abraham", lastName: "Yetayeh"}
+```
+
+Usando la clase Persona creamos tres objetos persona. Como puedes ver nuestra clase no tenía muchas propiedades vamos a añadir más propiedades a la clase.
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ console.log(this); // Compruebe el resultado desde aquí
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.age = age;
+ this.country = country;
+ this.city = city;
+ }
+}
+
+const person1 = new Person("Asabeneh", "Yetayeh", 250, "Finland", "Helsinki");
+
+console.log(person1);
+```
+
+```sh
+Person {firstName: "Asabeneh", lastName: "Yetayeh", age: 250, country: "Finland", city: "Helsinki"}
+```
+
+### Valores por defecto con el constructor
+
+Las propiedades de la función constructora pueden tener un valor por defecto como otras funciones regulares.
+
+```js
+class Person {
+ constructor(
+ firstName = "Asabeneh",
+ lastName = "Yetayeh",
+ age = 250,
+ country = "Finland",
+ city = "Helsinki"
+ ) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.age = age;
+ this.country = country;
+ this.city = city;
+ }
+}
+
+const person1 = new Person(); // tomará el valor por defecto values
+const person2 = new Person("Lidiya", "Tekle", 28, "Finland", "Espoo");
+
+console.log(person1);
+console.log(person2);
+```
+
+```sh
+Person {firstName: "Asabeneh", lastName: "Yetayeh", age: 250, country: "Finland", city: "Helsinki"}
+Person {firstName: "Lidiya", lastName: "Tekle", age: 28, country: "Finland", city: "Espoo"}
+```
+
+### Métodos de clase
+
+El constructor dentro de una clase es una función incorporada que nos permite crear un blueprint para el objeto. En una clase podemos crear métodos de clase. Los métodos son funciones de JavaScript dentro de la clase. Vamos a crear algunos métodos de clase.
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.age = age;
+ this.country = country;
+ this.city = city;
+ }
+ getFullName() {
+ const fullName = this.firstName + " " + this.lastName;
+ return fullName;
+ }
+}
+
+const person1 = new Person("Asabeneh", "Yetayeh", 250, "Finland", "Helsinki");
+const person2 = new Person("Lidiya", "Tekle", 28, "Finland", "Espoo");
+
+console.log(person1.getFullName());
+console.log(person2.getFullName());
+```
+
+```sh
+Asabeneh Yetayeh
+test.js:19 Lidiya Tekle
+```
+
+### Propiedades con valor inicial
+
+Cuando creamos una clase para algunas propiedades podemos tener un valor inicial. Por ejemplo, si estás jugando una partida, tu puntuación inicial será cero. Así, podemos tener una puntuación inicial o una puntuación que sea cero. De otra manera, podemos tener una habilidad inicial y adquiriremos alguna habilidad después de algún tiempo.
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.age = age;
+ this.country = country;
+ this.city = city;
+ this.score = 0;
+ this.skills = [];
+ }
+ getFullName() {
+ const fullName = this.firstName + " " + this.lastName;
+ return fullName;
+ }
+}
+
+const person1 = new Person("Asabeneh", "Yetayeh", 250, "Finland", "Helsinki");
+const person2 = new Person("Lidiya", "Tekle", 28, "Finland", "Espoo");
+
+console.log(person1.score);
+console.log(person2.score);
+
+console.log(person1.skills);
+console.log(person2.skills);
+```
+
+```sh
+0
+0
+[]
+[]
+```
+
+Un método puede ser un método regular o un getter o un setter. Veamos, getter y setter.
+
+### getter
+
+El método get nos permite acceder al valor del objeto. Escribimos un método get utilizando la palabra clave _get_ seguida de una función. En lugar de acceder a las propiedades directamente desde el objeto utilizamos getter para obtener el valor. Vea el ejemplo siguiente
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.age = age;
+ this.country = country;
+ this.city = city;
+ this.score = 0;
+ this.skills = [];
+ }
+ getFullName() {
+ const fullName = this.firstName + " " + this.lastName;
+ return fullName;
+ }
+ get getScore() {
+ return this.score;
+ }
+ get getSkills() {
+ return this.skills;
+ }
+}
+
+const person1 = new Person("Asabeneh", "Yetayeh", 250, "Finland", "Helsinki");
+const person2 = new Person("Lidiya", "Tekle", 28, "Finland", "Espoo");
+
+console.log(person1.getScore); // No necesitamos paréntesis para llamar a un método getter
+console.log(person2.getScore);
+
+console.log(person1.getSkills);
+console.log(person2.getSkills);
+```
+
+```sh
+0
+0
+[]
+[]
+```
+
+### setter
+
+El método setter nos permite modificar el valor de ciertas propiedades. Escribimos un método setter utilizando la palabra clave _set_ seguida de una función. Vea el ejemplo de abajo.
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.age = age;
+ this.country = country;
+ this.city = city;
+ this.score = 0;
+ this.skills = [];
+ }
+ getFullName() {
+ const fullName = this.firstName + " " + this.lastName;
+ return fullName;
+ }
+ get getScore() {
+ return this.score;
+ }
+ get getSkills() {
+ return this.skills;
+ }
+ set setScore(score) {
+ this.score += score;
+ }
+ set setSkill(skill) {
+ this.skills.push(skill);
+ }
+}
+
+const person1 = new Person("Asabeneh", "Yetayeh", 250, "Finland", "Helsinki");
+const person2 = new Person("Lidiya", "Tekle", 28, "Finland", "Espoo");
+
+person1.setScore = 1;
+person1.setSkill = "HTML";
+person1.setSkill = "CSS";
+person1.setSkill = "JavaScript";
+
+person2.setScore = 1;
+person2.setSkill = "Planning";
+person2.setSkill = "Managing";
+person2.setSkill = "Organizing";
+
+console.log(person1.score);
+console.log(person2.score);
+
+console.log(person1.skills);
+console.log(person2.skills);
+```
+
+```sh
+1
+1
+["HTML", "CSS", "JavaScript"]
+["Planning", "Managing", "Organizing"]
+```
+
+No te confundas con la diferencia entre un método regular y un getter. If you know how to make a regular method you are good. Let us add regular method called getPersonInfo in the Person class.
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.age = age;
+ this.country = country;
+ this.city = city;
+ this.score = 0;
+ this.skills = [];
+ }
+ getFullName() {
+ const fullName = this.firstName + " " + this.lastName;
+ return fullName;
+ }
+ get getScore() {
+ return this.score;
+ }
+ get getSkills() {
+ return this.skills;
+ }
+ set setScore(score) {
+ this.score += score;
+ }
+ set setSkill(skill) {
+ this.skills.push(skill);
+ }
+ getPersonInfo() {
+ let fullName = this.getFullName();
+ let skills =
+ this.skills.length > 0 &&
+ this.skills.slice(0, this.skills.length - 1).join(", ") +
+ ` and ${this.skills[this.skills.length - 1]}`;
+ let formattedSkills = skills ? `He knows ${skills}` : "";
+
+ let info = `${fullName} is ${this.age}. He lives ${this.city}, ${this.country}. ${formattedSkills}`;
+ return info;
+ }
+}
+
+const person1 = new Person("Asabeneh", "Yetayeh", 250, "Finland", "Helsinki");
+const person2 = new Person("Lidiya", "Tekle", 28, "Finland", "Espoo");
+const person3 = new Person("John", "Doe", 50, "Mars", "Mars city");
+
+person1.setScore = 1;
+person1.setSkill = "HTML";
+person1.setSkill = "CSS";
+person1.setSkill = "JavaScript";
+
+person2.setScore = 1;
+person2.setSkill = "Planning";
+person2.setSkill = "Managing";
+person2.setSkill = "Organizing";
+
+console.log(person1.getScore);
+console.log(person2.getScore);
+
+console.log(person1.getSkills);
+console.log(person2.getSkills);
+console.log(person3.getSkills);
+
+console.log(person1.getPersonInfo());
+console.log(person2.getPersonInfo());
+console.log(person3.getPersonInfo());
+```
+
+```sh
+1
+1
+["HTML", "CSS", "JavaScript"]
+["Planning", "Managing", "Organizing"]
+[]
+Asabeneh Yetayeh is 250. He lives Helsinki, Finland. He knows HTML, CSS and JavaScript
+Lidiya Tekle is 28. He lives Espoo, Finland. He knows Planning, Managing and Organizing
+John Doe is 50. He lives Mars city, Mars.
+```
+
+### Método Static
+
+La palabra clave static define un método estático para una clase. Los métodos estáticos no se llaman en las instancias de la clase. En cambio, se llaman en la propia clase. A menudo se trata de funciones de utilidad, como las funciones para crear o clonar objetos. Un ejemplo de método estático es _Date.now()_. El método _now_ se llama directamente desde la clase.
+
+```js
+class Person {
+ constructor(firstName, lastName, age, country, city) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.age = age;
+ this.country = country;
+ this.city = city;
+ this.score = 0;
+ this.skills = [];
+ }
+ getFullName() {
+ const fullName = this.firstName + " " + this.lastName;
+ return fullName;
+ }
+ get getScore() {
+ return this.score;
+ }
+ get getSkills() {
+ return this.skills;
+ }
+ set setScore(score) {
+ this.score += score;
+ }
+ set setSkill(skill) {
+ this.skills.push(skill);
+ }
+ getPersonInfo() {
+ let fullName = this.getFullName();
+ let skills =
+ this.skills.length > 0 &&
+ this.skills.slice(0, this.skills.length - 1).join(", ") +
+ ` and ${this.skills[this.skills.length - 1]}`;
+
+ let formattedSkills = skills ? `He knows ${skills}` : "";
+
+ let info = `${fullName} is ${this.age}. He lives ${this.city}, ${this.country}. ${formattedSkills}`;
+ return info;
+ }
+ static favoriteSkill() {
+ const skills = ["HTML", "CSS", "JS", "React", "Python", "Node"];
+ const index = Math.floor(Math.random() * skills.length);
+ return skills[index];
+ }
+ static showDateTime() {
+ let now = new Date();
+ let year = now.getFullYear();
+ let month = now.getMonth() + 1;
+ let date = now.getDate();
+ let hours = now.getHours();
+ let minutes = now.getMinutes();
+ if (hours < 10) {
+ hours = "0" + hours;
+ }
+ if (minutes < 10) {
+ minutes = "0" + minutes;
+ }
+
+ let dateMonthYear = date + "." + month + "." + year;
+ let time = hours + ":" + minutes;
+ let fullTime = dateMonthYear + " " + time;
+ return fullTime;
+ }
+}
+
+console.log(Person.favoriteSkill());
+console.log(Person.showDateTime());
+```
+
+```sh
+Node
+15.1.2020 23:56
+```
+
+Los métodos estáticos son métodos que pueden ser utilizados como funciones de utilidad.
+
+## Herencia
+
+Utilizando la herencia podemos acceder a todas las propiedades y métodos de la clase padre. Esto reduce la repetición de código. Si recuerdas, tenemos una clase padre Persona y crearemos hijos a partir de ella. Nuestra clase de niños podría ser estudiante, enseñar, etc.
+
+```js
+// sintaxis
+class ChildClassName extends {
+ // el código va aquí
+}
+```
+
+Vamos a crear una clase hija Student a partir de la clase padre Person.
+
+```js
+class Student extends Person {
+ saySomething() {
+ console.log("I am a child of the person class");
+ }
+}
+
+const s1 = new Student("Asabeneh", "Yetayeh", "Finland", 250, "Helsinki");
+console.log(s1);
+console.log(s1.saySomething());
+console.log(s1.getFullName());
+console.log(s1.getPersonInfo());
+```
+
+```sh
+Student {firstName: "Asabeneh", lastName: "Yetayeh", age: "Finland", country: 250, city: "Helsinki", …}
+I am a child of the person class
+Asabeneh Yetayeh
+Student {firstName: "Asabeneh", lastName: "Yetayeh", age: "Finland", country: 250, city: "Helsinki", …}
+Asabeneh Yetayeh is Finland. He lives Helsinki, 250.
+```
+
+### Anulación de métodos
+
+Como puedes ver, conseguimos acceder a todos los métodos de la clase Persona y lo utilizamos en la clase hija Student. Podemos personalizar los métodos padre, podemos añadir propiedades adicionales a una clase hija. Si queremos personalizar, los métodos y si queremos añadir propiedades extra, necesitamos usar la función del constructor la clase hija también. Dentro de la función constructora llamamos a la función super() para acceder a todas las propiedades de la clase padre. La clase Persona no tenía género pero ahora vamos a dar la propiedad género para la clase hija, Student. Si se utiliza el mismo nombre de método en la clase hija, se anulará el método padre.
+
+```js
+class Student extends Person {
+ constructor(firstName, lastName, age, country, city, gender) {
+ super(firstName, lastName, age, country, city);
+ this.gender = gender;
+ }
+
+ saySomething() {
+ console.log("I am a child of the person class");
+ }
+ getPersonInfo() {
+ let fullName = this.getFullName();
+ let skills =
+ this.skills.length > 0 &&
+ this.skills.slice(0, this.skills.length - 1).join(", ") +
+ ` and ${this.skills[this.skills.length - 1]}`;
+
+ let formattedSkills = skills ? `He knows ${skills}` : "";
+ let pronoun = this.gender == "Male" ? "He" : "She";
+
+ let info = `${fullName} is ${this.age}. ${pronoun} lives in ${this.city}, ${this.country}. ${formattedSkills}`;
+ return info;
+ }
+}
+
+const s1 = new Student(
+ "Asabeneh",
+ "Yetayeh",
+ 250,
+ "Finland",
+ "Helsinki",
+ "Male"
+);
+const s2 = new Student("Lidiya", "Tekle", 28, "Finland", "Helsinki", "Female");
+s1.setScore = 1;
+s1.setSkill = "HTML";
+s1.setSkill = "CSS";
+s1.setSkill = "JavaScript";
+
+s2.setScore = 1;
+s2.setSkill = "Planning";
+s2.setSkill = "Managing";
+s2.setSkill = "Organizing";
+
+console.log(s1);
+
+console.log(s1.saySomething());
+console.log(s1.getFullName());
+console.log(s1.getPersonInfo());
+
+console.log(s2.saySomething());
+console.log(s2.getFullName());
+console.log(s2.getPersonInfo());
+```
+
+```sh
+Student {firstName: "Asabeneh", lastName: "Yetayeh", age: 250, country: "Finland", city: "Helsinki", …}
+Student {firstName: "Lidiya", lastName: "Tekle", age: 28, country: "Finland", city: "Helsinki", …}
+I am a child of the person class
+Asabeneh Yetayeh
+Student {firstName: "Asabeneh", lastName: "Yetayeh", age: 250, country: "Finland", city: "Helsinki", …}
+Asabeneh Yetayeh is 250. He lives in Helsinki, Finland. He knows HTML, CSS and JavaScript
+I am a child of the person class
+Lidiya Tekle
+Student {firstName: "Lidiya", lastName: "Tekle", age: 28, country: "Finland", city: "Helsinki", …}
+Lidiya Tekle is 28. She lives in Helsinki, Finland. He knows Planning, Managing and Organizing
+```
+
+Ahora, el método getPersonInfo ha sido anulado e identifica si la persona es hombre o mujer.
+
+🌕 Eres excelente. Ahora, usted conoce las clases y tiene el poder de convertir todo en un objeto. Has llegado a la mitad de tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tu músculo.
+
+## Ejercicios
+
+### Ejercicios Nivel 1
+
+1. Crea una clase de Animal. La clase tendrá propiedades de nombre, edad, color, piernas y creará diferentes métodos.
+2. Cree una clase hijo de Perro y Gato a partir de la Clase Animal.
+
+### Ejercicios Nivel 2
+
+1. Sobrescribir el método que se crea en la clase Animal.
+
+### Ejercicios Nivel 3
+
+1. Intentemos desarrollar un programa que calcule la medida de tendencia central de una muestra (media, mediana, moda) y la medida de variabilidad (rango, variación, desviación estándar). Además de esas medidas, encuentre el mínimo, el máximo, el recuento, el porcentaje y la distribución de frecuencias de la muestra. Puedes crear una clase llamada Statistics y crear todas las funciones que hacen cálculos estadísticos como método para la clase Statistics. Comprueba el resultado que aparece a continuación.
+
+```JS
+ages = [31, 26, 34, 37, 27, 26, 32, 32, 26, 27, 27, 24, 32, 33, 27, 25, 26, 38, 37, 31, 34, 24, 33, 29, 26]
+
+console.log('Count:', statistics.count()) // 25
+console.log('Sum: ', statistics.sum()) // 744
+console.log('Min: ', statistics.min()) // 24
+console.log('Max: ', statistics.max()) // 38
+console.log('Range: ', statistics.range() // 14
+console.log('Mean: ', statistics.mean()) // 30
+console.log('Median: ',statistics.median()) // 29
+console.log('Mode: ', statistics.mode()) // {'mode': 26, 'count': 5}
+console.log('Variance: ',statistics.var()) // 17.5
+console.log('Standard Deviation: ', statistics.std()) // 4.2
+console.log('Variance: ',statistics.var()) // 17.5
+console.log('Frequency Distribution: ',statistics.freqDist()) // [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)]
+```
+
+```sh
+// el resultado debería ser el siguiente
+console.log(statistics.describe())
+Count: 25
+Sum: 744
+Min: 24
+Max: 38
+Range: 14
+Mean: 30
+Median: 29
+Mode: (26, 5)
+Variance: 17.5
+Standard Deviation: 4.2
+Frequency Distribution: [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)]
+```
+
+1. Crea una clase llamada PersonAccount. Tiene propiedades de nombre, apellido, ingresos, gastos y tiene métodos totalIncome, totalExpense, accountInfo,addIncome, addExpense y accountBalance. Los ingresos son un conjunto de ingresos y su descripción y los gastos son también un conjunto de gastos y su descripción.
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 14](../dia_14_Manejo_de_Errores/dia_14_manejo_de_errores.md) | [Día 16>>](../dia_16_JSON/dia_16_json.md)
diff --git a/Spanish/dia_16_JSON/dia_16_json.md b/Spanish/dia_16_JSON/dia_16_json.md
new file mode 100644
index 000000000..c95fd7313
--- /dev/null
+++ b/Spanish/dia_16_JSON/dia_16_json.md
@@ -0,0 +1,602 @@
+
+
+[<< Día 16](../dia_16_JSON/dia_16_json.md) | [Día 18 >>](../dia_18_Promesas/dia_18_Promesas.md)
+
+
+
+- [Día 17](#día-17)
+ - [Storage (Almacenamiento) web HTML5](#storage-almacenamiento-web-html5)
+ - [sessionStorage](#sessionstorage)
+ - [localStorage](#localstorage)
+ - [Caso de uso de los almacenamientos web](#caso-de-uso-de-los-almacenamientos-web)
+ - [Objetos de almacenamiento web HTML5](#objetos-de-almacenamiento-web-html5)
+ - [Establecer el elemento en el localStorage](#establecer-el-elemento-en-el-localstorage)
+ - [Obtener un elemento de localStorage](#obtener-un-elemento-de-localstorage)
+ - [Limpiando el localStorage](#limpiando-el-localstorage)
+ - [Ejercicios](#ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+ - [Ejercicios: Nivel 2](#ejercicios-nivel-2)
+ - [Ejercicios: Nivel 3](#ejercicios-nivel-3)
+
+# Día 17
+
+## Storage (Almacenamiento) web HTML5
+
+Web Storage (sessionStorage y localStorage) es una nueva API de HTML5 que ofrece importantes ventajas sobre las cookies tradicionales. Antes de HTML5, los datos de las aplicaciones debían almacenarse en cookies, incluidas en cada solicitud del servidor. Web storage es más seguro, y se pueden almacenar grandes cantidades de datos localmente, sin afectar al rendimiento del sitio web. El límite de almacenamiento de datos de las cookies en muchos navegadores web es de unos 4 KB por cookie. Nosotros almacenamos datos mucho más grandes (al menos 5MB) y nunca los transferimos al servidor. Todos los sitios del mismo o único origen pueden almacenar y acceder a los mismos datos.
+
+Se puede acceder a los datos almacenados mediante JavaScript, lo que permite aprovechar las secuencias de comandos del lado del cliente para hacer muchas cosas que tradicionalmente han implicado la programación del lado del servidor y las bases de datos relacionales. Hay dos objetos de almacenamiento web:
+
+- sessionStorage
+- localStorage
+
+localStorage es similar a sessionStorage, excepto que mientras los datos almacenados en localStorage no tienen tiempo de caducidad, los datos almacenados en sessionStorage se borran cuando termina la sesión de la página, es decir, cuando se cierra la página.
+
+Hay que tener en cuenta que los datos almacenados en localStorage o sessionStorage son específicos del protocolo de la página.
+
+Las claves y los valores son siempre cadenas (tenga en cuenta que, al igual que con los objetos, las claves enteras se convertirán automáticamente en cadenas).
+
+
+
+### sessionStorage
+
+sessionStorage sólo está disponible dentro de la sesión de la pestaña o ventana del navegador. Está diseñado para almacenar datos en una sola sesión de la página web. Esto significa que si la ventana se cierra, los datos de la sesión se eliminarán. Como sessionStorage y localStorage tienen métodos similares, nos centraremos sólo en localStorage.
+
+### localStorage
+
+El localStorage de HTML5 es la para la API de almacenamiento web que se utiliza para almacenar datos en el navegador sin caducidad. Los datos estarán disponibles en el navegador incluso después de cerrarlo. localStorage se mantiene incluso entre sesiones del navegador. Esto significa que los datos siguen estando disponibles cuando se cierra y se vuelve a abrir el navegador, y también de forma instantánea entre pestañas y ventanas.
+
+En ambos casos, los datos del almacenamiento web no están disponibles entre distintos navegadores. Por ejemplo, no se puede acceder a los objetos de almacenamiento creados en Firefox en Internet Explorer, exactamente igual que las cookies. Hay cinco métodos para trabajar en el almacenamiento local:
+_setItem(), getItem(), removeItem(), clear(), key()_
+
+### Caso de uso de los almacenamientos web
+
+Algunos casos de uso de los almacenes web son
+
+- almacenar datos temporalmente.
+- guardar los productos que el usuario pone en su carrito de la compra.
+- los datos pueden estar disponibles entre peticiones de página, múltiples pestañas del navegador y también entre sesiones del navegador utilizando localStorage.
+- puede utilizarse completamente sin conexión utilizando localStorage.
+- El almacenamiento en la web puede suponer una gran ganancia de rendimiento cuando algunos datos estáticos se almacenan en el cliente para minimizar el número de peticiones posteriores. Incluso las imágenes pueden almacenarse en cadenas utilizando la codificación Base64.
+- se puede utilizar para el método de autenticación del usuario.
+
+Para los ejemplos mencionados anteriormente, tiene sentido utilizar localStorage. Te preguntarás, entonces, cuándo debemos utilizar sessionStorage.
+
+En algunos casos, queremos deshacernos de los datos en cuanto se cierra la ventana. O, quizás, si no queremos que la aplicación interfiera con la misma aplicación que está abierta en otra ventana. Estos escenarios se sirven mejor con sessionStorage.
+
+Ahora, vamos a ver cómo hacer uso de estas APIs de almacenamiento web.
+
+## Objetos de almacenamiento web HTML5
+
+El almacenamiento (storage) web HTML proporciona dos objetos para almacenar datos en el cliente:
+
+- window.localStorage - almacena datos sin fecha de caducidad
+- window.sessionStorage - almacena datos para una sesión (los datos se pierden cuando se cierra la pestaña del navegador)La mayoría de los navegadores modernos soportan Web Storage, sin embargo es bueno comprobar el soporte del navegador para localStorage y sessionStorage. Veamos los métodos disponibles para los objetos Web Storage.
+
+Objetos Web Storage:
+
+- _localStorage_ - para mostrar el objeto localStorage
+- _localStorage.clear()_ - para remover todo lo que hay en el almacenamiento local
+- _localStorage.setItem()_ - para almacenar datos en el localStorage. Toma como parámetros una clave y un valor.
+- _localStorage.getItem()_ - para mostrar los datos almacenados en el localStorage. Toma una clave como parámetro.
+- _localStorage.removeItem()_ - para remover un ítem almacenado de un localStorage. Toma la clave como parámetro.
+- _localStorage.key()_ - para mostrar un dato almacenado en un localStorage. Toma el índice como parámetro.
+
+
+
+### Establecer el elemento en el localStorage
+
+Cuando establecemos conjunto los datos que se almacenan en un localStorage, se almacenarán como una cadena. Si estamos almacenando un array o un objeto, debemos encadenarlo primero para mantener el formato, a menos que perdamos la estructura del array o del objeto de los datos originales.
+
+Almacenamos los datos en el localStorage utilizando el método _localStorage.setItem_.
+
+```js
+//sintaxis
+localStorage.setItem("key", "value");
+```
+
+- Almacenamiento de una cadena en un localStorage
+
+```js
+localStorage.setItem("firstName", "Asabeneh"); // ya que el valor es una cadena, no lo encadenamos
+console.log(localStorage);
+```
+
+```sh
+Storage {firstName: 'Asabeneh', length: 1}
+```
+
+- Almacenar el número en un storage local
+
+```js
+localStorage.setItem("age", 200);
+console.log(localStorage);
+```
+
+```sh
+ Storage {age: '200', firstName: 'Asabeneh', length: 2}
+```
+
+- Almacenando un array en un localStorage. Si estamos almacenando un array, un objeto o una matriz de objetos, debemos encadenar el objeto primero. Véase el ejemplo siguiente.
+
+```js
+const skills = ["HTML", "CSS", "JS", "React"];
+//El array de Skills tiene que ser encadenado primero para mantener el formato.
+const skillsJSON = JSON.stringify(skills, undefined, 4);
+localStorage.setItem("skills", skillsJSON);
+console.log(localStorage);
+```
+
+```sh
+Storage {age: '200', firstName: 'Asabeneh', skills: 'HTML,CSS,JS,React', length: 3}
+```
+
+```js
+let skills = [
+ { tech: "HTML", level: 10 },
+ { tech: "CSS", level: 9 },
+ { tech: "JS", level: 8 },
+ { tech: "React", level: 9 },
+ { tech: "Redux", level: 10 },
+ { tech: "Node", level: 8 },
+ { tech: "MongoDB", level: 8 },
+];
+
+let skillJSON = JSON.stringify(skills);
+localStorage.setItem("skills", skillJSON);
+```
+
+- Almacenamiento de un objeto en un localStorage. Antes de almacenar los objetos en un localStorage, el objeto tiene que ser stringificado.
+
+```js
+const user = {
+ firstName: "Asabeneh",
+ age: 250,
+ skills: ["HTML", "CSS", "JS", "React"],
+};
+
+const userText = JSON.stringify(user, undefined, 4);
+localStorage.setItem("user", userText);
+```
+
+### Obtener un elemento de localStorage
+
+Obtenemos los datos del almacenamiento local utilizando el método _localStorage.getItem()_.
+
+```js
+//sintaxis
+localStorage.getItem("key");
+```
+
+```js
+let firstName = localStorage.getItem("firstName");
+let age = localStorage.getItem("age");
+let skills = localStorage.getItem("skills");
+console.log(firstName, age, skills);
+```
+
+```sh
+ 'Asabeneh', '200', '['HTML','CSS','JS','React']'
+```
+
+Como puedes ver la habilidad está en un formato de cadena. Utilicemos JSON.parse() para convertirlo en un array normal.
+
+```js
+let skills = localStorage.getItem("skills");
+let skillsObj = JSON.parse(skills, undefined, 4);
+console.log(skillsObj);
+```
+
+```sh
+['HTML','CSS','JS','React']
+```
+
+### Limpiando el localStorage
+
+El método clear, borrará todo lo almacenado en la memoria local
+
+```js
+localStorage.clear();
+```
+
+🌕 Estás decidido. Ahora, conociste un Web Storages y supiste cómo almacenar pequeños datos en los navegadores de los clientes. Llevas 17 pasos de ventaja en tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tu músculo.
+
+## Ejercicios
+
+### Ejercicios: Nivel 1
+
+1. Guarda tu nombre, apellido, edad, país y ciudad en tu navegador localStorage.
+
+### Ejercicios: Nivel 2
+
+1. Cree un objeto estudiante. El objeto estudiante tendrá el nombre, el apellido, la edad, las habilidades, el país, las claves inscritas y los valores para las claves. Almacena el objeto estudiante en el localStorage de tu navegador.
+
+### Ejercicios: Nivel 3
+
+1. Crear un objeto llamado personAccount. Tiene propiedades de nombre, apellido, ingresos, gastos y tiene métodos totalIncome, totalExpense, accountInfo,addIncome, addExpense y accountBalance. Los ingresos son un conjunto de ingresos y su descripción y los gastos son también un conjunto de gastos y su descripción.
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 16](../dia_16_JSON/dia_16_json.md) | [Día 18 >>](../dia_18_Promesas/dia_18_Promesas.md)
diff --git a/Spanish/dia_18_Promesas/dia_18_Promesas.md b/Spanish/dia_18_Promesas/dia_18_Promesas.md
new file mode 100644
index 000000000..8af01c8b3
--- /dev/null
+++ b/Spanish/dia_18_Promesas/dia_18_Promesas.md
@@ -0,0 +1,273 @@
+
+
+[<< Día 17](../dia_17_Web_storages/dia_17_web_storages.md) | [Día 19>>](../dia_19_Closures/dia_19_closures.md)
+
+
+
+- [Día 18](#día-18)
+ - [Promesas](#promesas)
+ - [Callbacks](#callbacks)
+ - [Constructor de promesas](#constructor-de-promesas)
+ - [Fetch API](#fetch-api)
+ - [Async y Await](#async-y-await)
+ - [Ejercicios](#ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+ - [Ejercicios: Nivel 2](#ejercicios-nivel-2)
+ - [Ejercicios: Nivel 3](#ejercicios-nivel-3)
+
+# Día 18
+
+## Promesas
+
+Los seres humanos damos o recibimos una promesa para realizar alguna actividad en algún momento. Si cumplimos la promesa, hacemos felices a los demás, pero si no la cumplimos, puede provocar descontento. La promesa en JavaScript tiene algo en común con los ejemplos anteriores.
+
+Una promesa es una forma de manejar operaciones asíncronas en JavaScript. Permite a los manejadores con un valor eventual de éxito o razón de fracaso de una acción asíncrona. Esto permite que los métodos asíncronos devuelvan valores como los métodos síncronos: en lugar de devolver inmediatamente el valor final, el método asíncrono devuelve una promesa de proporcionar el valor en algún momento en el futuro.
+
+Una promesa está en uno de estos estados:
+
+- pendiente: estado inicial, ni cumplido ni rechazado.
+- cumplido: significa que la operación se ha completado con éxito.
+- rechazado: significa que la operación ha fallado.
+
+Una promesa pendiente puede ser cumplida con un valor, o rechazada con una razón (error). Cuando ocurre cualquiera de estas opciones, se llaman los manejadores asociados puestos en cola por el método _then_ de una promesa. (Si la promesa ya se ha cumplido o ha sido rechazada cuando se adjunta un manejador correspondiente, se llamará al manejador, por lo que no hay una condición de competencia entre una operación asíncrona que se completa y sus manejadores que se adjuntan).
+
+Como los métodos _Promise.prototype.then()_ y _Promise.prototype.catch()_ devuelven promesas, pueden encadenarse.
+
+## Callbacks
+
+Para entender muy bien la promesa, entendamos primero la devolución de llamada. Veamos los siguientes callbacks. A partir de los siguientes bloques de código se notará, la diferencia entre callback y promesas.
+
+- call back
+ Veamos una función callback que puede tomar dos parámetros. El primer parámetro es err y el segundo es result. Si el parámetro err es falso, no habrá error, de lo contrario retornará un error.
+
+En este caso el err tiene un valor y devolverá el bloque err.
+
+```js
+//Callback
+const doSomething = (callback) => {
+ setTimeout(() => {
+ const skills = ["HTML", "CSS", "JS"];
+ callback("It did not go well", skills);
+ }, 2000);
+};
+
+const callback = (err, result) => {
+ if (err) {
+ return console.log(err);
+ }
+ return console.log(result);
+};
+
+doSomething(callback);
+```
+
+```sh
+// después de 2 segundos se imprimirá
+It did not go well
+```
+
+En este caso el err es falso y devolverá el bloque else que es el resultado.
+
+```js
+const doSomething = (callback) => {
+ setTimeout(() => {
+ const skills = ["HTML", "CSS", "JS"];
+ callback(false, skills);
+ }, 2000);
+};
+
+doSomething((err, result) => {
+ if (err) {
+ return console.log(err);
+ }
+ return console.log(result);
+});
+```
+
+```sh
+// después de 2 segundos imprimirá las habilidades
+["HTML", "CSS", "JS"]
+```
+
+### Constructor de promesas
+
+Podemos crear una promesa utilizando el constructor Promise. Podemos crear una nueva promesa utilizando la palabra clave `new` seguida de la palabra `Promise` y seguida de un paréntesis. Dentro del paréntesis, toma una función `callback`. La función de callback de la promesa tiene dos parámetros que son las funciones _`resolve`_ y _`reject`_.
+
+```js
+// sintaxis
+const promise = new Promise((resolve, reject) => {
+ resolve("success");
+ reject("failure");
+});
+```
+
+```js
+// Promesas
+const doPromise = new Promise((resolve, reject) => {
+ setTimeout(() => {
+ const skills = ["HTML", "CSS", "JS"];
+ if (skills.length > 0) {
+ resolve(skills);
+ } else {
+ reject("Something wrong has happened");
+ }
+ }, 2000);
+});
+
+doPromise
+ .then((result) => {
+ console.log(result);
+ })
+ .catch((error) => console.log(error));
+```
+
+```sh
+["HTML", "CSS", "JS"]
+```
+
+La promesa anterior se ha resuelto con resolución.
+Veamos otro ejemplo cuando la promesa se resuelve con el rechazo (reject).
+
+```js
+// Promesa
+const doPromise = new Promise((resolve, reject) => {
+ setTimeout(() => {
+ const skills = ["HTML", "CSS", "JS"];
+ if (skills.includes("Node")) {
+ resolve("fullstack developer");
+ } else {
+ reject("Something wrong has happened");
+ }
+ }, 2000);
+});
+
+doPromise
+ .then((result) => {
+ console.log(result);
+ })
+ .catch((error) => console.error(error));
+```
+
+```sh
+Something wrong has happened
+```
+
+## Fetch API
+
+La API Fetch proporciona una interfaz para obtener recursos (incluso a través de la red). A cualquiera que haya utilizado XMLHttpRequest le resultará familiar, pero la nueva API ofrece un conjunto de funciones más potente y flexible. En este reto utilizaremos fetch para solicitar url y APIS. Además de esto, veamos una demostración del caso de uso de las promesas en el acceso a los recursos de la red utilizando la API fetch.
+
+```js
+const url = "https://restcountries.com/v2/all"; // api de países
+fetch(url)
+ .then((response) => response.json()) // acceder a los datos de la API como JSON
+ .then((data) => {
+ // obtener los datos
+ console.log(data);
+ })
+ .catch((error) => console.error(error)); // manejo de errores si ocurre algo incorrecto
+```
+
+## Async y Await
+
+Async y await es una forma elegante de manejar las promesas. Es fácil de entender y limpio de escribir.
+
+```js
+const square = async function (n) {
+ return n * n;
+};
+
+square(2);
+```
+
+```sh
+Promesa {: 4}
+```
+
+La palabra _async_ delante de una función significa que esa función devolverá una promesa. La función cuadrada anterior en lugar de un valor devuelve una promesa.
+
+¿Cómo accedemos al valor de la promesa? Para acceder al valor de la promesa, utilizaremos la palabra clave _await_.
+
+```js
+const square = async function (n) {
+ return n * n;
+};
+const value = await square(2);
+console.log(value);
+```
+
+```sh
+4
+```
+
+Ahora, como puedes ver en el ejemplo anterior escribiendo async delante de una función creamos una promesa y para obtener el valor de una promesa utilizamos await. Async y await van juntos, uno no puede existir sin el otro.
+
+Vamos a obtener los datos de la API utilizando tanto el método promise como el método async y await.
+
+- promesa
+
+```js
+const url = "https://restcountries.com/v2/all";
+fetch(url)
+ .then((response) => response.json())
+ .then((data) => {
+ console.log(data);
+ })
+ .catch((error) => console.error(error));
+```
+
+- async y await
+
+```js
+const fetchData = async () => {
+ try {
+ const response = await fetch(url);
+ const countries = await response.json();
+ console.log(countries);
+ } catch (err) {
+ console.error(err);
+ }
+};
+console.log("===== async and await");
+fetchData();
+```
+
+🌕 Eres consistente y has cumplido tu promesa, has llegado al día 18. Mantén tu promesa y resuelve el desafío con determinación. Has dado 18 pasos adelante en tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y tus músculos.
+
+## Ejercicios
+
+```js
+const countriesAPI = "https://restcountries.com/v2/all";
+const catsAPI = "https://api.thecatapi.com/v1/breeds";
+```
+
+### Ejercicios: Nivel 1
+
+1. Lee la API de los países utilizando fetch e imprime el nombre del país, la capital, los idiomas, la población y la superficie.
+
+### Ejercicios: Nivel 2
+
+1. Imprime todos los nombres de los gatos en la variable catNames.
+
+### Ejercicios: Nivel 3
+
+1. Lee el api de los gatos y encuentra el peso medio del gato en unidad métrica.
+2. Lee la api de países y descubre los 10 países más grandes
+3. Lea la api de los países y cuente el número total de lenguas del mundo utilizadas como oficiales.
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 17](../dia_17_Web_storages/dia_17_web_storages.md) | [Día 19>>](../dia_19_Closures/dia_19_closures.md)
diff --git a/Spanish/dia_19_Closures/dia_19_closures.md b/Spanish/dia_19_Closures/dia_19_closures.md
new file mode 100644
index 000000000..d9be01e04
--- /dev/null
+++ b/Spanish/dia_19_Closures/dia_19_closures.md
@@ -0,0 +1,105 @@
+
+
+[<< Día 18](../dia_18_Promesas/dia_18_Promesas.md) | [Día 20 >>](../dia_20_Escribiendo_Codigos_Limpios/dia_20_escribiendo_codigos_limpios.md)
+
+
+
+- [Día 19](#día-19)
+ - [Closure](#closure)
+ - [Ejercicios](#exercises)
+ - [Ejercicios: Nivel 1](#exercises-level-1)
+ - [Ejercicios: Nivel 2](#exercises-level-2)
+ - [Ejercicios: Nivel 3](#exercises-level-3)
+
+# Día 19
+
+## Closure
+
+JavaScript permite escribir una función dentro de una función externa. Podemos escribir tantas funciones internas como queramos. Si la función interna accede a las variables de la función externa entonces se llama closure (clausura).
+
+```js
+function outerFunction() {
+ let count = 0;
+ function innerFunction() {
+ count++;
+ return count;
+ }
+
+ return innerFunction;
+}
+const innerFunc = outerFunction();
+
+console.log(innerFunc());
+console.log(innerFunc());
+console.log(innerFunc());
+```
+
+```sh
+1
+2
+3
+```
+
+Veamos más ejemplos de funciones internas
+
+```js
+function outerFunction() {
+ let count = 0;
+ function plusOne() {
+ count++;
+ return count;
+ }
+ function minusOne() {
+ count--;
+ return count;
+ }
+
+ return {
+ plusOne: plusOne(),
+ minusOne: minusOne(),
+ };
+}
+const innerFuncs = outerFunction();
+
+console.log(innerFuncs.plusOne);
+console.log(innerFuncs.minusOne);
+```
+
+```sh
+1
+0
+```
+
+🌕 Estás haciendo progresos. Mantén tu ritmo, sigue con el buen trabajo. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
+
+## Ejercicios
+
+### Ejercicios: Nivel 1
+
+1. Crear una closure que tenga una función interna
+
+### Ejercicios: Nivel 2
+
+1. Crear una closure que tenga tres funciones internas
+
+### Ejercicios: Nivel 3
+
+1. Crear una función de salida de personAccount. Tiene variables internas de nombre, apellido, ingresos y gastos. Tiene las funciones internas totalIncome, totalExpense, accountInfo,addIncome, addExpense y accountBalance. Los ingresos son un conjunto de ingresos y su descripción y los gastos son también un conjunto de gastos con su descripción.
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 18](../dia_18_Promesas/dia_18_Promesas.md) | [Día 20 >>](../dia_20_Escribiendo_Codigos_Limpios/dia_20_escribiendo_codigos_limpios.md)
diff --git a/Spanish/dia_20_Escribiendo_Codigos_Limpios/dia_20_escribiendo_codigos_limpios.md b/Spanish/dia_20_Escribiendo_Codigos_Limpios/dia_20_escribiendo_codigos_limpios.md
new file mode 100644
index 000000000..425778673
--- /dev/null
+++ b/Spanish/dia_20_Escribiendo_Codigos_Limpios/dia_20_escribiendo_codigos_limpios.md
@@ -0,0 +1,376 @@
+
+
30 Días de JavaScript: Escribiendo Códigos Limpios
+
+[<< Día 19](../dia_19_Closures/dia_19_closures.md) | [Día 21 >>](../dia_21_DOM/dia_21_dom.md)
+
+
+
+- [Día 20](#día-20)
+ - [Escribiendo código limpio](#escribiendo-código-limpio)
+ - [Guía de estilo JavaScript](#guía-de-estilo-javascript)
+ - [¿Por qué necesitamos una guía de estilo?](#¿por-qué-necesitamos-una-guía-de-estilo)
+ - [Guía de estilo JavaScript de Airbnb](#guía-de-estilo-javascript-de-airbnb)
+ - [Guía de estilo estándar de JavaScript](#guía-de-estilo-estándar-de-javascript)
+ - [Guía de estilo JavaScript de Google](#guía-de-estilo-javascript-de-google)
+ - [Convenciones de codificación en JavaScript](#convenciones-de-codificación-en-javascript)
+ - [Convenciones usadas en 30DíasDeJavaScript](#convenciones-usadas-en-30díasdejavascript)
+ - [Variables](#variables)
+ - [Arrays](#arrays)
+ - [Funciones](#funciones)
+ - [Bucles](#bucles)
+ - [Objetos](#objetos)
+ - [Condicional](#condicional)
+ - [Clases](#clases)
+
+# Día 20
+
+## Escribiendo código limpio
+
+### Guía de estilo JavaScript
+
+Una guía de estilo de JavaScript es un conjunto de normas que indica cómo debe escribirse y organizarse el código de JavaScript. En esta sección, hablaremos de las guías de JavaScript y de cómo escribir un código limpio.
+
+JavaScript es un lenguaje de programación, como el lenguaje humano, tiene una sintaxis. La sintaxis de JavaScript debe escribirse siguiendo una determinada pauta de estilo para convencer y simplificar.
+
+### ¿Por qué necesitamos una guía de estilo?
+
+Has estado codificando solo durante mucho tiempo, pero ahora parece que trabajas en equipo. No importa de qué manera escribas tu código, siempre y cuando funcione, sin embargo, cuando trabajas en un equipo de 10, 20 o más desarrolladores en un proyecto y en la misma base de código, el código será desordenado y difícil de manejar si no hay ninguna guía a seguir.
+
+Puede desarrollar sus propias directrices y convenciones o también puede adaptar directrices bien desarrolladas. Conozcamos las guías más comunes.
+
+Guías de estilo de JavaScript más comunes
+
+- Guía de estilo JavaScript de Airbnb
+- Guía de estilo estándar de JavaScript
+- Guía de estilo JavaScript de Google
+
+#### Guía de estilo JavaScript de Airbnb
+
+Airbnb tiene una de las guías de estilo JavaScript más populares de Internet. También cubre casi todos los aspectos de JavaScript y es adoptado por muchos desarrolladores y empresas. Puede consultar la [Guía de estilo de Airbnb](https://github.com/airbnb/javascript). Yo también recomendaría probarlo. Su estilo es muy fácil de usar y sencillo de entender.
+
+#### Guía de estilo estándar de JavaScript
+
+Esta guía no es tan popular como la de Airbnb, pero merece la pena echarle un vistazo. Han eliminado el punto y coma en su [guía de estilo](https://standardjs.com/).
+
+#### Guía de estilo JavaScript de Google
+
+No diré mucho sobre la guía de Google. No las he usado, más bien te sugiero que eches un vistazo desde este [link](https://google.github.io/styleguide/jsguide.html).
+
+### Convenciones de codificación en JavaScript
+
+En este desafío también utilizamos las convenciones y guías generales de codificación de JavaScript. Las convenciones de codificación son pautas de estilo de programación desarrolladas por un individuo, un equipo o una empresa.
+
+Las convenciones de codificación ayudan:
+
+- para escribir un código limpio
+- para mejorar la legibilidad del código
+- para mejorar la reutilización y el mantenimiento del código
+
+Las convenciones de codificación incluyen
+
+- Reglas de declaración y denominación de las variables
+- Reglas de declaración y denominación de las funciones
+- Reglas para el uso de espacios en blanco, sangría y comentarios
+- Prácticas y principios de programación
+
+#### Convenciones usadas en 30DíasDeJavaScript
+
+En este reto seguimos la convención habitual de JavaScript pero he añadido también mi preferencia de escritura.
+
+- Utilizamos camelCase para las variables y las funciones.
+- Todos los nombres de las variables comienzan con una letra.
+- Hemos optado por utilizar _const_ para las constantes, los arrays, los objetos y las funciones. En lugar de las comillas dobles, hemos optado por utilizar las comillas simples o backtick. Las comillas simples se están poniendo de moda.
+- También hemos eliminado el punto y coma de nuestro código, pero es una cuestión de preferencia personal.
+- Espacio alrededor de los operadores aritméticos, operadores de asignación y después de la coma
+- Función de flecha en lugar de declaración de función
+- Retorno explícito en lugar de implícito si la función es de una línea
+- No hay coma final en el último valor de un objeto
+- Preferimos este +=, -=, \*= /=, \*\*= en lugar de la versión más larga
+- Cuando usamos console.log() es bueno imprimir con una cadena de etiquetas para identificar de dónde viene la consola
+
+#### Variables
+
+```js
+let firstName = "Asabeneh";
+let lastName = "Yetayeh";
+let country = "Finland";
+let city = "Helsinki";
+
+const PI = Math.PI;
+const gravity = 9.81;
+```
+
+#### Arrays
+
+Hemos optado por hacer que los nombres de los arrays sean plurales
+
+- names
+- numbers
+- countries
+- languages
+- skills
+- fruits
+- vegetables
+
+```js
+// arrays
+const names = ["Asabeneh", "Mathias", "Elias", "Brook"];
+const numbers = [0, 3.14, 9.81, 37, 98.6, 100];
+const countries = ["Finland", "Denmark", "Sweden", "Norway", "Iceland"];
+const languages = ["Amharic", "Arabic", "English", "French", "Spanish"];
+const skills = ["HTML", "CSS", "JavaScript", "React", "Python"];
+const fruits = ["banana", "orange", "mango", "lemon"];
+const vegetables = ["Tomato", "Potato", "Cabbage", "Onion", "Carrot"];
+```
+
+#### Funciones
+
+A estas alturas ya estás muy familiarizado con la declaración de funciones, la función de expresión, la función de flecha y la función anónima. En este reto tendemos a utilizar la función de flecha en lugar de otras funciones. La función flecha no sustituye a otras funciones. Además, las funciones de flecha y las declaraciones de función no son exactamente iguales. Por lo tanto, debes saber cuándo usarla y cuándo no. En otras secciones trataré la diferencia en detalle. Utilizaremos el retorno explícito en lugar del implícito si la función es de una sola línea.
+
+```js
+// función que devuelve el nombre completo de una persona
+const printFullName = (firstName, lastName) => firstName + " " + lastName;
+
+// función que calcula el cuadrado de un número
+const square = (n) => n * n;
+
+// una función que genera colores hexa al azar
+const hexaColor = () => {
+ const str = "0123456789abcdef";
+ let hexa = "#";
+ let index;
+ for (let i = 0; i < 6; i++) {
+ index = Math.floor(Math.random() * str.length);
+ hexa += str[index];
+ }
+ return hexa;
+};
+
+// una función que muestra la fecha y la hora
+const showDateTime = () => {
+ const now = new Date();
+ const year = now.getFullYear();
+ const month = now.getMonth() + 1;
+ const date = now.getDate();
+ let hours = now.getHours();
+ let minutes = now.getMinutes();
+ if (hours < 10) {
+ hours = "0" + hours;
+ }
+ if (minutes < 10) {
+ minutes = "0" + minutes;
+ }
+
+ const dateMonthYear = date + "." + month + "." + year;
+ const time = hours + ":" + minutes;
+ const fullTime = dateMonthYear + " " + time;
+ return fullTime;
+};
+```
+
+La función `new Dat().toLocaleString()` también puede utilizarse para mostrar la fecha y hora actuales. Los métodos `toLocaleString()` toman diferentes argumentos. Puede aprender más sobre la fecha y la hora en este [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString).
+
+#### Bucles
+
+En estos retos cubrimos muchos tipos de bucles. El bucle regular for, el bucle while, el bucle do while, el bucle for of, el bucle forEach y el bucle for in.
+
+Veamos cómo los utilizamos:
+
+```js
+for (let i = 0; i < n; i++) {
+ console.log();
+}
+
+// declaración de una variable array
+const names = ["Asabeneh", "Mathias", "Elias", "Brook"];
+
+// iteración de un array mediante un bucle for regular
+let len = names.length;
+for (let i = 0; i < len; i++) {
+ console.log(names[i].toUpperCase());
+}
+
+// iteración de un array mediante for of
+for (const name of names) {
+ console.log(name.toUpperCase());
+}
+
+// iteración de un array mediante forEach
+names.forEach((name) => name.toUpperCase());
+
+const person = {
+ firstName: "Asabeneh",
+ lastName: "Yetayeh",
+ age: 250,
+ country: "Finland",
+ city: "Helsinki",
+ skills: [
+ "HTML",
+ "CSS",
+ "JavaScript",
+ "React",
+ "Node",
+ "MongoDB",
+ "Python",
+ "D3.js",
+ ],
+ isMarried: true,
+};
+for (const key in person) {
+ console.log(key);
+}
+```
+
+#### Objetos
+
+Declaramos el objeto literal con _const_.
+
+```js
+// declarando el objeto literal
+const person = {
+ firstName: "Asabeneh",
+ lastName: "Yetayeh",
+ age: 250,
+ country: "Finland",
+ city: "Helsinki",
+ skills: [
+ "HTML",
+ "CSS",
+ "JavaScript",
+ "TypeScript",
+ "React",
+ "Node",
+ "MongoDB",
+ "Python",
+ "D3.js",
+ ],
+ isMarried: true,
+};
+// iterar a través de las claves del objeto
+for (const key in person) {
+ console.log(key, person[key]);
+}
+```
+
+#### Condicional
+
+Hemos dicho if, if else, else, switch y operadores ternarios en los retos anteriores.
+
+```js
+// sintaxis
+if (condition) {
+ // esta parte del código se ejecuta para la condición de verdad
+} else {
+ // esta parte del código se ejecuta para una condición falsa
+}
+```
+
+```js
+// if else
+let num = 3;
+if (num > 0) {
+ console.log(`${num} is a positive number`);
+} else {
+ console.log(`${num} is a negative number`);
+}
+// 3 is a positive number
+```
+
+```js
+// if else if else if else
+
+let a = 0;
+if (a > 0) {
+ console.log(`${a} is a positive number`);
+} else if (a < 0) {
+ console.log(`${a} is a negative number`);
+} else if (a == 0) {
+ console.log(`${a} is zero`);
+} else {
+ console.log(`${a} is not a number`);
+}
+```
+
+```js
+// Switch Más Ejemplos
+let dayUserInput = prompt("What day is today ?");
+let day = dayUserInput.toLowerCase();
+
+switch (day) {
+ case "monday":
+ console.log("Today is Monday");
+ break;
+ case "tuesday":
+ console.log("Today is Tuesday");
+ break;
+ case "wednesday":
+ console.log("Today is Wednesday");
+ break;
+ case "thursday":
+ console.log("Today is Thursday");
+ break;
+ case "friday":
+ console.log("Today is Friday");
+ break;
+ case "saturday":
+ console.log("Today is Saturday");
+ break;
+ case "sunday":
+ console.log("Today is Sunday");
+ break;
+ default:
+ console.log("It is not a week day.");
+}
+```
+
+```js
+// ternario
+
+let isRaining = true;
+isRaining
+ ? console.log("You need a rain coat.")
+ : console.log("No need for a rain coat.");
+```
+
+#### Clases
+
+Declaramos la clase con CamelCase que empieza con mayúscula.
+
+```js
+// sintaxis
+class ClassName {
+ // el código va aquí
+}
+```
+
+```js
+// definir la clase
+class Person {
+ constructor(firstName, lastName) {
+ console.log(this); // Compruebe el resultado desde aquí
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+}
+```
+
+Sea cual sea la guía de estilo que sigas, sé coherente. Sigue algunos paradigmas de programación y patrones de diseño. Recuerda que si no escribes tu código en cierto orden o forma, será difícil leerlo. Así que hazte un favor a ti mismo o a alguien que vaya a leer tu código escribiendo código legible.
+
+🌕 Eres ordenado. Ahora, has aprendido a escribir un código limpio, para que cualquiera que conozca el idioma inglés pueda entender tu código.Siempre estás progresando y llevas 20 pasos en tu camino hacia la grandeza.
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 19](../dia_19_Closures/dia_19_closures.md) | [Día 21 >>](../dia_21_DOM/dia_21_dom.md)
diff --git a/Spanish/dia_21_DOM/dia_21_dom.md b/Spanish/dia_21_DOM/dia_21_dom.md
new file mode 100644
index 000000000..47440d07d
--- /dev/null
+++ b/Spanish/dia_21_DOM/dia_21_dom.md
@@ -0,0 +1,407 @@
+
+
+[<< Día 20](../dia_20_Escribiendo_Codigos_Limpios/dia_20_escribiendo_codigos_limpios.md) | [Día 22 >>](../dia_22_Manipulacion_del_Objeto_DOM/dia_22_manipulacion_del_objeto_dom.md)
+
+
+
+- [Día 21](#día-21)
+ - [Document Object Model (DOM) - Día 1](#document-object-model-dom---día-1)
+ - [Obtención del elemento](#obtención-del-elemento)
+ - [Obtener elementos por nombre de etiqueta](#obtener-elementos-por-nombre-de-etiqueta)
+ - [Obtener elementos por el nombre de la clase](#obtener-elementos-por-el-nombre-de-la-clase)
+ - [Obtener un elemento por id](#obtener-un-elemento-por-id)
+ - [Obtener elementos mediante métodos querySelector](#obtener-elementos-mediante-métodos-queryselector)
+ - [Añadir atributo](#añadir-atributo)
+ - [Añadir un atributo con setAttribute](#añadir-un-atributo-con-setattribute)
+ - [Añadir atributo sin setAttribute](#añadir-atributo-sin-setattribute)
+ - [Añadir una clase mediante classList](#añadir-una-clase-mediante-classlist)
+ - [Eliminación de la clase mediante remove](#eliminación-de-la-clase-mediante-remove)
+ - [Añadir texto a un elemento HTML](#añadir-texto-a-un-elemento-html)
+ - [Añadir contenido de texto usando textContent](#añadir-contenido-de-texto-usando-textcontent)
+ - [Añadir contenido de texto usando innerHTML](#añadir-contenido-de-texto-usando-innerhtml)
+ - [textContent](#textcontent)
+ - [innerHTML](#innerhtml)
+ - [Añadir estilo](#añadir-estilo)
+ - [Añadir estilo color](#añadir-estilo-color)
+ - [Añadir estilo Background Color](#añadir-estilo-background-color)
+ - [Añadir estilo Font Size](#añadir-estilo-font-size)
+ - [Ejercicios](#ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+ - [Ejercicios: Nivel 2](#ejercicios-nivel-2)
+ - [Ejercicios: Nivel 3](#ejercicios-nivel-3)
+ - [DOM: Mini proyecto 1](#dom-mini-proyecto-1)
+
+# Día 21
+
+## Document Object Model (DOM) - Día 1
+
+El documento HTML está estructurado como un objeto JavaScript. Cada elemento HTML tiene diferentes propiedades que pueden ayudar a manipularlo. Es posible obtener, crear, añadir o eliminar elementos HTML mediante JavaScript. Compruebe los ejemplos siguientes. La selección de elementos HTML mediante JavaScript es similar a la selección mediante CSS. Para seleccionar un elemento HTML, utilizamos el nombre de la etiqueta, el id, el nombre de la clase u otros atributos.
+
+### Obtención del elemento
+
+Podemos acceder al elemento o elementos ya creados mediante JavaScript. Para acceder u obtener elementos utilizamos diferentes métodos. El código siguiente tiene cuatro elementos _h1_. Veamos los diferentes métodos para acceder a los elementos _h1_.
+
+```html
+
+
+
+ Document Object Model - (Modelo de objeto de documento)
+
+
+
First Title
+
Second Title
+
Third Title
+
+
+
+```
+
+#### Obtener elementos por nombre de etiqueta
+
+**_getElementsByTagName()_**:toma un nombre de etiqueta como parámetro de cadena y este método devuelve un objeto HTMLCollection. Una HTMLCollection es un objeto tipo array de elementos HTML. La propiedad length proporciona el tamaño de la colección. Siempre que usamos este método accedemos a los elementos individuales usando el índice o después de hacer un bucle a través de cada elemento individual. Un HTMLCollection no soporta todos los métodos de los arrays, por lo que deberíamos utilizar un bucle for normal en lugar de forEach.
+
+```js
+// sintaxis
+document.getElementsByTagName("tagname");
+```
+
+```js
+const allTitles = document.getElementsByTagName("h1");
+
+console.log(allTitles); //HTMLCollections
+console.log(allTitles.length); // 4
+
+for (let i = 0; i < allTitles.length; i++) {
+ console.log(allTitles[i]); // imprime cada uno de los elementos de la HTMLCollection
+}
+```
+
+#### Obtener elementos por el nombre de la clase
+
+El método **_getElementsByClassName()_** devuelve un objeto HTMLCollection. Una HTMLCollection es una lista tipo array de elementos HTML. La propiedad length proporciona el tamaño de la colección. Es posible realizar un bucle a través de todos los elementos de HTMLCollection. Vea el siguiente ejemplo
+
+```js
+//sintaxis
+document.getElementsByClassName("classname");
+```
+
+```js
+const allTitles = document.getElementsByClassName("title");
+
+console.log(allTitles); //HTMLCollections
+console.log(allTitles.length); // 4
+
+for (let i = 0; i < allTitles.length; i++) {
+ console.log(allTitles[i]); // imprime cada uno de los elementos de la HTMLCollection
+}
+```
+
+#### Obtener un elemento por id
+
+**_getElementsById()_** tiene como objetivo un único elemento HTML. Pasamos el id sin # como argumento.
+
+```js
+//sintaxis
+document.getElementById("id");
+```
+
+```js
+let firstTitle = document.getElementById("first-title");
+console.log(firstTitle); //
First Title
+```
+
+#### Obtener elementos mediante métodos querySelector
+
+El método _document.querySelector_ puede seleccionar un HTML o elementos HTML por nombre de etiqueta, por id o por nombre de clase.
+
+**_querySelector_**: se puede utilizar para seleccionar elementos HTML por su nombre de etiqueta, id o clase. Si se utiliza el nombre de la etiqueta, sólo se selecciona el primer elemento.
+
+```js
+let firstTitle = document.querySelector("h1"); // seleccionar el primer elemento h1 disponible
+let firstTitle = document.querySelector("#first-title"); // selecciona el id con first-title
+let firstTitle = document.querySelector(".title"); // seleccionar el primer elemento disponible con clase title
+```
+
+**_querySelectorAll_**: se puede utilizar para seleccionar elementos html por su nombre de etiqueta o clase. Devuelve un nodeList que es un objeto tipo array que soporta métodos de array. Podemos utilizar **_bucle for_** o **_forEach_** para recorrer cada elemento de nodeList.
+
+```js
+const allTitles = document.querySelectorAll('h1') # selects all the available h1 elements in the page
+
+console.log(allTitles.length) // 4
+for (let i = 0; i < allTitles.length; i++) {
+ console.log(allTitles[i])
+}
+
+allTitles.forEach(title => console.log(title))
+const allTitles = document.querySelectorAll('.title') // lo mismo ocurre con la selección mediante la clase
+```
+
+### Añadir atributo
+
+En la etiqueta de apertura de HTML se añade un atributo que proporciona información adicional sobre el elemento. Atributos HTML comunes: id, class, src, style, href, disabled, title, alt. Añadamos id y class para el cuarto título.
+
+```js
+const titles = document.querySelectorAll("h1");
+titles[3].className = "title";
+titles[3].id = "fourth-title";
+```
+
+#### Añadir un atributo con setAttribute
+
+El método **_setAttribute()_** establece cualquier atributo html. Toma dos parámetros: el tipo de atributo y el nombre del atributo.
+Agreguemos la clase y el atributo id para el cuarto título.
+
+```js
+const titles = document.querySelectorAll("h1");
+titles[3].setAttribute("class", "title");
+titles[3].setAttribute("id", "fourth-title");
+```
+
+#### Añadir atributo sin setAttribute
+
+Podemos utilizar el método normal de configuración de objetos para establecer un atributo, pero esto no puede funcionar para todos los elementos. Algunos atributos son propiedades de los objetos del DOM y se pueden establecer directamente. Por ejemplo, id y class
+
+```js
+//otra forma de establecer un atributo
+titles[3].className = "title";
+titles[3].id = "fourth-title";
+```
+
+#### Añadir una clase mediante classList
+
+El método classList es un buen método para añadir clases adicionales. No anula la clase original si existe una clase, sino que añade una clase adicional para el elemento.
+
+```js
+//otra forma de establecer un atributo: anexar la clase, no se sobrepone a
+titles[3].classList.add("title", "header-title");
+```
+
+#### Eliminación de la clase mediante remove
+
+De forma similar a la adición, también podemos eliminar la clase de un elemento. Podemos eliminar una clase específica de un elemento.
+
+```js
+//otra forma de establecer un atributo: anexar la clase, no se sobrepone a
+titles[3].classList.remove("title", "header-title");
+```
+
+### Añadir texto a un elemento HTML
+
+Un HTML es un bloque compuesto por una etiqueta de apertura, una etiqueta de cierre y un contenido de texto. Podemos añadir un contenido de texto utilizando la propiedad _textContent_ o \*innerHTML.
+
+#### Añadir contenido de texto usando textContent
+
+La propiedad _textContent_ se utiliza para añadir texto a un elemento HTML.
+
+```js
+const titles = document.querySelectorAll("h1");
+titles[3].textContent = "Fourth Title";
+```
+
+#### Añadir contenido de texto usando innerHTML
+
+La mayoría de la gente se confunde entre _textContent_ y _innerHTML_. _textContent_ está pensado para añadir texto a un elemento HTML, sin embargo innerHTML puede añadir un elemento o elementos de texto o HTML como hijo.
+
+##### textContent
+
+Asignamos la propiedad del objeto HTML _textContent_ a un texto
+
+```js
+const titles = document.querySelectorAll("h1");
+titles[3].textContent = "Fourth Title";
+```
+
+##### innerHTML
+
+Usamos la propiedad innerHTML cuando queremos reemplazar o un contenido hijo completamente nuevo a un elemento padre.
+El valor que asignemos será una cadena de elementos HTML.
+
+```html
+
+
+
+ JavaScript para todos:DOM
+
+
+
+
Asabeneh Yetayeh desafíos en 2020
+
Reto 30DaysOfJavaScript
+
+
+
+
+
+```
+
+La propiedad innerHTML puede permitirnos también eliminar todos los hijos de un elemento padre. En lugar de utilizar removeChild() yo recomendaría el siguiente método.
+
+```html
+
+
+
+ JavaScript for Everyone:DOM
+
+
+
+
Asabeneh Yetayeh challenges in 2020
+
30DaysOfJavaScript Challenge
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Ongoing
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+```
+
+### Añadir estilo
+
+#### Añadir estilo Color
+
+Añadamos un poco de estilo a nuestros títulos. Si el elemento tiene índice par le damos color verde sino rojo.
+
+```js
+const titles = document.querySelectorAll("h1");
+titles.forEach((title, i) => {
+ title.style.fontSize = "24px"; // todos los títulos tendrán un tamaño de letra de 24px
+ if (i % 2 === 0) {
+ title.style.color = "green";
+ } else {
+ title.style.color = "red";
+ }
+});
+```
+
+#### Añadir estilo Background Color
+
+Añadamos un poco de estilo a nuestros títulos. Si el elemento tiene índice par le damos color verde sino rojo.
+
+```js
+const titles = document.querySelectorAll("h1");
+titles.forEach((title, i) => {
+ title.style.fontSize = "24px"; // todos los títulos tendrán un tamaño de letra de 24px
+ if (i % 2 === 0) {
+ title.style.backgroundColor = "green";
+ } else {
+ title.style.backgroundColor = "red";
+ }
+});
+```
+
+#### Añadir estilo Font Size
+
+Añadamos algo de estilo a nuestros títulos. Si el elemento tiene índice par le damos 20px sino 30px
+
+```js
+const titles = document.querySelectorAll("h1");
+titles.forEach((title, i) => {
+ title.style.fontSize = "24px"; // todos los títulos tendrán un tamaño de letra de 24px
+ if (i % 2 === 0) {
+ title.style.fontSize = "20px";
+ } else {
+ title.style.fontSize = "30px";
+ }
+});
+```
+
+Como has notado, las propiedades de css cuando lo usamos en JavaScript va a ser un camelCase. Las siguientes propiedades CSS cambian de background-color a backgroundColor, font-size a fontSize, font-family a fontFamily, margin-bottom a marginBottom.
+
+---
+
+🌕 Ahora, estás completamente dotado de un súper poder, has completado la parte más importante y desafiante del desafío y en general de JavaScript. Has aprendido DOM y ahora tienes la capacidad de construir y desarrollar aplicaciones. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
+
+## Ejercicios
+
+### Ejercicios: Nivel 1
+
+1. Crear un archivo index.html y poner cuatro elementos p: Obtenga el primer párrafo utilizando **_document.querySelector(tagname)_** y el nombre de la etiqueta
+2. Obtener cada uno de los párrafos usando **_document.querySelector('#id')_** mediante su id
+3. Obtener todos los p como nodeList usando **_document.querySelectorAll(tagname)_** por su nombre de etiqueta
+4. Recorrer nodeList y obtener el contenido del texto de cada párrafo
+5. Establecer un textContent para el párrafo del cuarto párrafo,**_Fourth Paragraph_**
+6. Establezca los atributos id y class para todos los párrafos utilizando diferentes métodos de establecimiento de atributos
+
+### Ejercicios: Nivel 2
+
+1. Cambiar el estilo de cada párrafo mediante JavaScript (ej, color, fondo, borde, tamaño de la fuente, familia de la fuente)
+1. Seleccione todos los párrafos y haga un bucle a través de cada uno de los elementos y dé al primer y tercer párrafo un color verde, y al segundo y cuarto párrafo un color rojo
+1. Establecer textContent, id y class a cada párrafo
+
+### Ejercicios: Nivel 3
+
+#### DOM: Mini proyecto 1
+
+1. Desarrolle la siguiente aplicación, utilice los siguientes elementos HTML para empezar. Obtendrá el mismo código en la carpeta de inicio. Aplique todos los estilos y la funcionalidad utilizando sólo JavaScript.
+
+ - El color del año cambia cada 1 segundo
+ - El color de fondo de la fecha y la hora cambia cada dos segundos
+ - El reto completado tiene fondo verde
+ - El desafío en curso tiene fondo amarillo
+ - Los próximos retos tienen fondo rojo
+
+```html
+
+
+
+
+ JavaScript para todos: DOM
+
+
+
+
+[<< Día 21](../dia_21_DOM/dia_21_dom.md) | [Día 23 >>](../dia_23_Event_Listeners/dia_23_event_listeners.md)
+
+
+
+- [Día 22](#día-22)
+ - [DOM(Document Object Model)-Día 2](#domdocument-object-model-día-2)
+ - [Creando un elemento](#creando-un-elemento)
+ - [Creación de elementos](#creación-de-elementos)
+ - [Añadir un hijo a un elemento padre](#añadir-un-hijo-a-un-elemento-padre)
+ - [Eliminar un elemento hijo de un nodo padre](#eliminar-un-elemento-hijo-de-un-nodo-padre)
+ - [Ejercicios](#ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+ - [Ejercicios: Nivel 2](#ejercicios-nivel-2)
+ - [Ejercicios: Nivel 3](#ejercicios-nivel-3)
+
+# Día 22
+
+## DOM(Document Object Model)-Día 2
+
+### Creando un elemento
+
+Para crear un elemento HTML utilizamos el nombre de la etiqueta. La creación de un elemento HTML mediante JavaScript es muy sencilla y directa. Utilizamos el método _document.createElement()_. El método toma un nombre de etiqueta de elemento HTML como parámetro de cadena.
+
+```js
+// sintaxus
+document.createElement("tagname");
+```
+
+```html
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+```
+
+### Creación de elementos
+
+Para crear múltiples elementos debemos utilizar el bucle. Usando el bucle podemos crear tantos elementos HTML como queramos.
+Después de crear el elemento podemos asignar valor a las diferentes propiedades del objeto HTML.
+
+```html
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+```
+
+### Añadir un hijo a un elemento padre
+
+Para ver un elemento creado en el documento HTML debemos añadirlo al padre como elemento hijo. Podemos acceder al cuerpo del documento HTML utilizando _document.body_. El _document.body_ soporta el método _appendChild()_. Vea el ejemplo siguiente.
+
+```html
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+```
+
+### Eliminar un elemento hijo de un nodo padre
+
+Después de crear un HTML, es posible que queramos eliminar uno o varios elementos y podemos utilizar el método _removeChild()_.
+
+**Ejemplo:**
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Removing child Node
+
Asabeneh Yetayeh challenges in 2020
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Done
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+
+```
+
+Como hemos visto en la sección anterior hay una forma mejor de eliminar todos los elementos HTML internos o hijos de un elemento padre utilizando el método _innerHTML_ propiedades.
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Removing child Node
+
Asabeneh Yetayeh challenges in 2020
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Done
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+
+```
+
+El fragmento de código anterior borró todos los elementos hijos.
+
+---
+
+🌕 Eres muy especial, estás progresando cada día. Ahora, sabes cómo destruir un elemento DOM creado cuando es necesario. Aprendiste DOM y ahora tienes la capacidad de construir y desarrollar aplicaciones. Te quedan sólo ocho días para tu camino a la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
+
+## Ejercicios
+
+### Ejercicios: Nivel 1
+
+1. Crear un div contenedor en el documento HTML y crear 100 a 100 números dinámicamente y anexar al div contenedor.
+ - El fondo de los números pares es verde
+ - El fondo de los números impares es amarillo
+ - El fondo de los números primos es rojo
+
+
+
+### Ejercicios: Nivel 2
+
+1. Utilice el array de países para mostrar todos los países. Vea el diseño
+
+
+
+### Ejercicios: Nivel 3
+
+Compruebe los requisitos de este proyecto a partir de ambas imágenes (jpg y gif). Todos los datos y el CSS se han implementado utilizando únicamente JavaScript. Los datos se encuentran en la carpeta de inicio del proyecto\*3. El botón desplegable se ha creado utilizando el [details\*](https://www.w3schools.com/tags/tag_details.asp) elemento HTML.
+
+
+
+
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 21](../dia_21_DOM/dia_21_dom.md) | [Día 23 >>](../dia_23_Event_Listeners/dia_23_event_listeners.md)
diff --git a/Spanish/dia_23_Event_Listeners/dia_23_event_listeners.md b/Spanish/dia_23_Event_Listeners/dia_23_event_listeners.md
new file mode 100644
index 000000000..95cfe6aae
--- /dev/null
+++ b/Spanish/dia_23_Event_Listeners/dia_23_event_listeners.md
@@ -0,0 +1,334 @@
+
+
+[<< Día 22](../dia_22_Manipulacion_del_Objeto_DOM/dia_22_manipulacion_del_objeto_dom.md) | [Día 24 >>](../dia_24_Proyecto_Sistema_Solar/dia_24_proyecto_sistema_solar.md)
+
+
+
+- [Día 23](#día-23)
+ - [DOM(Document Object Model)-Día 3](#domdocument-object-model-día-3)
+ - [Event Listeners](#event-listeners)
+ - [Click](#click)
+ - [Doble Click](#doble-click)
+ - [Mouse enter](#mouse-enter)
+ - [Obtener el valor de un elemento input](#obtener-el-valor-de-un-elemento-input)
+ - [valor de entrada](#valor-de-entrada)
+ - [evento de entrada y cambio](#evento-de-entrada-y-cambio)
+ - [evento de desenfoque](#evento-de-desenfoque)
+ - [keypress, keydow y keyup](#keypress-keydow-y-keyup)
+ - [Ejercicios](#ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+
+# Día 23
+
+## DOM(Document Object Model)-Día 3
+
+### Event Listeners
+
+Eventos HTML comunes: onclick, onchange, onmouseover, onmouseout, onkeydown, onkeyup, onload.
+Podemos añadir el método **event_listener** (escuchador de eventos) a cualquier objeto DOM. Utilizamos el método **_addEventListener()_** para escuchar diferentes tipos de eventos en los elementos HTML. El método _addEventListener()_ toma dos argumentos, un event listener y una función callback.
+
+```js
+selectedElement.addEventListener("eventlistner", function (e) {
+ // la actividad que quieres que ocurra después del evento estará aquí
+});
+// or
+
+selectedElement.addEventListener("eventlistner", (e) => {
+ // la actividad que quieres que ocurra después del evento estará aquí
+});
+```
+
+#### Click
+
+Para adjuntar un event listener a un elemento, primero seleccionamos el elemento y luego adjuntamos el método addEventListener. El event listener toma como argumento el tipo de evento y las funciones de callback.
+
+El siguiente es un ejemplo de evento de tipo click.
+
+**Ejemplo: click**
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
+
+
+
+
+```
+
+También se puede adjuntar un evento directamente al elemento HTML como script en línea.
+
+**Ejemplo: onclick**
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
+
+
+
+```
+
+#### Doble Click
+
+Para adjuntar un event listener a un elemento, primero seleccionamos el elemento y luego adjuntamos el método addEventListener. El event listener toma como argumento el tipo de evento y las funciones de callback.
+
+El siguiente es un ejemplo de evento de tipo click.
+
+**Ejemplo: dblclick**
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
+
+
+
+```
+
+#### Mouse enter
+
+Para adjuntar un event listener a un elemento, primero seleccionamos el elemento y luego adjuntamos el método addEventListener. El event listener toma como argumento el tipo de evento y las funciones de callback.
+
+El siguiente es un ejemplo de evento de tipo click.
+
+**Ejemplo: mouseenter**
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
+
+
+
+```
+
+A estas alturas ya estás familiarizado con el método addEventListen y cómo añadir un event listener. Hay muchos tipos de event listeners. Pero en este reto nos centraremos en los eventos importantes más comunes.
+
+Lista de eventos:
+
+- click - cuando se hace click en el elemento
+- dblclick - cuando se hace doble click en el elemento
+- mouseenter - cuando el punto del mouse ingresa al elemento
+- mouseleave - cuando el puntero del mouse abandona el elemento
+- mousemove - cuando el puntero del mouse se mueve sobre el elemento
+- mouseover - cuando el puntero del mouse se mueve sobre el elemento
+- mouseout - cuando el puntero del mouse sale del elemento
+- input - cuando el valor entra en el input de entrada
+- change - cuando el valor cambia en el input de entrada
+- blur - cuando el elemento no está enfocado
+- keydown - cuando una tecla está pulsada
+- keyup - cuando una tecla está levantada
+- keypress - cuando pulsamos cualquier tecla
+- onload - cuando el navegador ha terminado de cargar una página
+
+Pruebe los tipos de eventos anteriores sustituyendo el tipo de evento en el fragmento de código anterior.
+
+### Obtener el valor de un elemento input
+
+Normalmente rellenamos formularios y los formularios aceptan datos. Los campos de los formularios se crean utilizando el elemento HTML input. Vamos a construir una pequeña aplicación que nos permita calcular el índice de masa corporal de una persona utilizando dos campos de entrada, un botón y una etiqueta p.
+
+### valor de entrada
+
+```html
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Body Mass Index Calculator
+
+
+
+
+
+
+
+
+```
+
+#### evento de entrada y cambio
+
+En el ejemplo anterior, hemos conseguido obtener los valores de entrada de dos campos de entrada haciendo click en el botón. Qué tal si queremos obtener el valor sin hacer click en el botón. Podemos utilizar el tipo de evento _change_ o _input_ para obtener los datos inmediatamente del campo de entrada cuando el campo está en el foco. Veamos cómo lo haremos.
+
+```html
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Data Binding using input or change event
+
+
+
+
+
+
+
+```
+
+#### evento de desenfoque
+
+A diferencia de _input_ o _change_, el evento _blur_ se produce cuando el campo de entrada no está enfocado.
+
+```js
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Giving feedback using blur event
+
+
+
+
+
+
+
+
+```
+
+#### keypress, keydow y keyup
+
+Podemos acceder a todos los números de teclas del teclado utilizando diferentes tipos de event listener. Usemos keypress y obtengamos el keyCode de cada tecla del teclado.
+
+```html
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Key events: Press any key
+
+
+
+
+```
+
+---
+
+🌕 Eres muy especial, estás progresando cada día. Ahora, sabes cómo manejar cualquier tipo de eventos DOM. . Te quedan sólo siete días para tu camino a la grandeza. Ahora haz algunos ejercicios para tu cerebro y para tus músculos.
+
+## Ejercicios
+
+### Ejercicios: Nivel 1
+
+1. Generar números y marcar pares, impares y primos con tres colores diferentes. Vea la imagen de abajo.
+
+
+
+1. Generando el código del teclado usando even listener. La imagen de abajo.
+
+
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 22](../dia_22_Manipulacion_del_Objeto_DOM/dia_22_manipulacion_del_objeto_dom.md) | [Día 24 >>](../dia_24_Proyecto_Sistema_Solar/dia_24_proyecto_sistema_solar.md)
diff --git a/Spanish/dia_24_Proyecto_Sistema_Solar/dia_24_proyecto_sistema_solar.md b/Spanish/dia_24_Proyecto_Sistema_Solar/dia_24_proyecto_sistema_solar.md
new file mode 100644
index 000000000..8c789aaa1
--- /dev/null
+++ b/Spanish/dia_24_Proyecto_Sistema_Solar/dia_24_proyecto_sistema_solar.md
@@ -0,0 +1,37 @@
+
+
30 Días de JavaScript: Mini Proyecto Sistema Solar
+
+[<< Día 23](../dia_23_Event_Listeners/dia_23_event_listeners.md) | [Día 25 >>](../dia_25_Visualizacion_De_Datos_De_Los_Paises_Del_Mundo_1/dia_25_visualizacion_de_datos_de_los_paises_del_mundo_1.md)
+
+
+
+- [Día 24](#día-24)
+ - [Ejercicios](#ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+
+# Día 24
+
+## Ejercicios
+
+### Ejercicios: Nivel 1
+
+1. Desarrollar una pequeña aplicación que calcule el peso de un objeto en un determinado planeta. La imagen gif no está completa revisa el video en el archivo de inicio.
+
+
+
+🎉 ¡FELICITACIONES! 🎉
+
+[<< Día 23](../dia_23_Event_Listeners/dia_23_event_listeners.md) | [Día 25 >>](../dia_25_Visualizacion_De_Datos_De_Los_Paises_Del_Mundo_1/dia_25_visualizacion_de_datos_de_los_paises_del_mundo_1.md)
diff --git a/Spanish/dia_25_Visualizacion_De_Datos_De_Los_Paises_Del_Mundo_1/dia_25_visualizacion_de_datos_de_los_paises_del_mundo_1.md b/Spanish/dia_25_Visualizacion_De_Datos_De_Los_Paises_Del_Mundo_1/dia_25_visualizacion_de_datos_de_los_paises_del_mundo_1.md
new file mode 100644
index 000000000..0a04ce63f
--- /dev/null
+++ b/Spanish/dia_25_Visualizacion_De_Datos_De_Los_Paises_Del_Mundo_1/dia_25_visualizacion_de_datos_de_los_paises_del_mundo_1.md
@@ -0,0 +1,39 @@
+
+
30 Días de JavaScript: Visualización de Datos de los Países del Mundo
+Apoya al autor para que cree más material educativo
+
+
+
+[<< Día 29](../dia_29_Mini_Proyecto_Animacion_De_Caracteres/dia_29_mini_proyecto_animacion_de_caracteres.md)
+
+
+
+- [Día 30](#día-30)
+ - [Ejercicios](#ejercicios)
+ - [Ejercicios: Nivel 1](#ejercicios-nivel-1)
+ - [Testimonio](#testimonio)
+ - [Apoyo](#apoyo)
+
+# Día 30
+
+## Ejercicios
+
+### Ejercicios: Nivel 1
+
+1. Crea la siguiente animación utilizando (HTML, CSS, JS)
+
+
+
+2. Valide el siguiente formulario utilizando regex.
+
+ 
+
+ 
+
+🌕 Tu viaje a la grandeza se ha completado con éxito. Has alcanzado un alto nivel de genialidad. Ahora, eres mucho más brillante que antes. Yo sabía lo que se necesita para llegar a este nivel y tú llegaste a este punto. Eres un verdadero héroe. Ahora, es el momento de celebrar tu éxito con un amigo o con la familia. Estoy deseando verte en otro reto.
+
+## Testimonio
+
+Ahora es el momento de apoyar al autor y expresar su opinión sobre el autor y 30DaysOfJavaScript. Puedes dejar tu testimonio en este [link](https://www.asabeneh.com/testimonials)
+
+## Apoyo
+
+Puedes apoyar al autor para que produzca más material educativo
+
+[](https://www.paypal.me/asabeneh)
+
+
+
+[<< Día 29](../dia_29_Mini_Proyecto_Animacion_De_Caracteres/dia_29_mini_proyecto_animacion_de_caracteres.md)
diff --git a/Spanish/readme.md b/Spanish/readme.md
index 7df9958da..6c06ece83 100644
--- a/Spanish/readme.md
+++ b/Spanish/readme.md
@@ -1,4 +1,3 @@
-
-

-
[📔Día 1](#día-1)
+
- [📔Día 1](#día-1)
- [Introducción](#introducción)
- [Requerimientos](#requerimientos)
@@ -68,7 +66,7 @@
**30 días de JavaScript** es una guía tanto para principiantes como para desarrolladores avanzados. Bienvenido a JavaScript. Disfruto de usarlo y enseñarlo y espero que tú también. JavaScript es el lenguaje del navegador.
-En este tutorial de paso a paso, aprenderás JavaScript, el leguaje de programación más popular de la historia de la humanidad. Se usa para **agregar interactividad a las páginas web, para desarrollar aplicaciones móbiles, aplicaciones de desktop, juegos** y ahora también puede ser usado para el **aprendizaje automático** (machine learning) e **inteligencia artificial** (AI). Su popularidad ha incrementado en años recientes, siendo el lenguaje predominante por cuatro años consecutivos y el más usado en GitHub.
+En este tutorial de paso a paso, aprenderás JavaScript, el lenguaje de programación más popular de la historia de la humanidad. Se usa para **agregar interactividad a las páginas web, para desarrollar aplicaciones móviles, aplicaciones de desktop, juegos** y ahora también puede ser usado para el **aprendizaje automático** (machine learning) e **inteligencia artificial** (AI). Su popularidad ha incrementado en años recientes, siendo el lenguaje predominante por cuatro años consecutivos y el más usado en GitHub.
## Requerimientos
@@ -92,14 +90,14 @@ Tal vez no lo necesites ahora pero si más adelante. Asi que instala [node.js](h
Luego de que se descargue, haz doble click e instálalo
- 
+
Puedes comprobar si se ha instalado correctamente abriendo la terminal del ordenador
asabeneh $ node -v
v12.14.0
-Para el desafío estaremos utilizando la versión 12.14.0, la cual es la recomendada por node.
+Para el desafío estaremos utilizando la versión 12.14.0, la cual es la recomendada por Node.
### Navegador
@@ -163,7 +161,7 @@ Como pueden ver, en el código del fragmento de arriba, console.log() puede toma
##### Comentario
-Podemos añadir comentarios a nuestro código. Los comentarios son muy importantes para hacer el código más legible y para dejar recordatorios en nuestro código. JavaScript no ejecuta la parte de comentarios de nuestro código. Cualquier hay texto que empiece con // en JavaScript es un comentario o cualquier cosa que encierre como esta /\* \*/ es un comentario.
+Podemos añadir comentarios a nuestro código. Los comentarios son muy importantes para hacer el código más legible y para dejar recordatorios en nuestro código. JavaScript no ejecuta la parte de comentarios de nuestro código. Cualquier texto que empiece con // en JavaScript es un comentario o cualquier cosa que encierre como esta /\* \*/ es un comentario.
**Ejemplo: Comentario en una sola línea**
@@ -249,7 +247,7 @@ JavaScript puede ser añadido a una página web de tres maneras diferentes:
Las siguientes secciones muestran diferentes formas de añadir código JavaScript a nuestra página web.
-### Script en línea
+### Script en línea
Crea una carpeta en tu escritorio y llámala 30DíasDeJS o en cualquier lugar y crea un archivo **_index.html_** en la carpeta del proyecto. Luego pega el siguiente código y ábrelo en un navegador, ya sea en [Chrome](https://www.google.com/chrome/).
@@ -371,8 +369,8 @@ En JavaScript y también en otros lenguajes de programación, hay diferentes tip
Una colección de uno o más carácteres entre comillas. **Ejemplo:**
- "Asabeneh
- "Finlandia
+ "Asabeneh"
+ "Finlandia"
'JavaScript es un hermoso lenguaje de programación'.
"Me encanta enseñar"
"Espero que estés disfrutando del primer día"
@@ -548,3 +546,5 @@ Cuando ejecutas los archivos en la carpeta Día_1 deberías obtener esto:
Tú tienes 30 años.
🎉 ¡FELICIDADES! 🎉
+
+[Day 2 >>](./dia_02_tipos_de_datos.md)
diff --git a/Turkish/02_Day_Data_types/02_day_data_types.md b/Turkish/02_Day_Data_types/02_day_data_types.md
new file mode 100644
index 000000000..694313fc0
--- /dev/null
+++ b/Turkish/02_Day_Data_types/02_day_data_types.md
@@ -0,0 +1,999 @@
+
+
+
+[<< Gün 1](../readMe.md) | [Gün 3 >>](../03_Day_Booleans_operators_date/03_booleans_operators_date.md)
+
+
+
+- [📔 Gün 2](#-gun-2)
+ - [Veri Türleri](#veri-turleri)
+ - [İlkel Veri Türleri](#ilkel-veri-türleri)
+ - [İlkel Olmayan Veri Türleri](#ilkel-olmayan-veri-türleri)
+ - [Sayılar](#sayilar)
+ - [Sayı Veri Türlerini Bildirme](#sayı-veri-türleri-bildirme)
+ - [Math Nesnesi](#math-nesnesi)
+ - [Rastgele Sayı Üretme](#rastgele-sayı-üretme)
+ - [Stringler](#stringler)
+ - [String Birleştirme](#string-birleştirme)
+ - [Toplama Operatörünü Kullanarak Birleştirme](#toplama-operatörü-kullanarak-birleştirme)
+ - [Uzun Değişmez String'ler](#uzun-değişmez-stringler)
+ - [String'lerdeki Kaçış Dizileri](#strringlerdeki-kaçış-dizileri)
+ - [Şablon Değişmezleri](#şablon-değişmezleri)
+ - [String Metotları](#string-metotları)
+ - [Veri Türlerini Kontrol Etme ve Döküm](#veri-türlerini-kontrol-etme-ve-döküm)
+ - [Veri Türlerini Kontrol Etme](#veri-türlerini-kontrol-etme)
+ - [Veri Türünü Değiştirme (Döküm)](#veri-türünü-değiştirme-döküm)
+ - [String to Int](#string-to-int)
+ - [String to Float](#string-to-float)
+ - [Float to Int](#float-to-int)
+ - [💻 Gün 2: Egzersizler](#-gün-2-egzersizler)
+ - [Egzersiz: Seviye 1](#egzersiz-seviye-1)
+ - [Egzersiz: Seviye 2](#egzersiz-seviye-2)
+ - [Egzersiz: Seviye 3](#egzersiz-seviye-3)
+
+# 📔 Gün 2
+
+( type çeviri olarak "tür - tip " olarak kullanılabilir. )
+Bölüm çevirisini yaparken bazı kelimeleri çevirmedim zira bunları ingilizce halleriyle bilmenizde fayda var.
+Örn:
+ String vb..
+
+## Veri Türleri
+
+Bir Önceki bölümde, veri türlerinden biraz bahsettik. Veri veya değerlerin (veri) türleri vardır.
+Veri türleri, verilerin özelliklerini tanımlar. Veri türleri ikiye ayrılabilir:
+
+1. İlkel veri türleri
+2. İlkel olmayan veri türleri (Nesne Referansları)
+
+### İlkel Veri Türleri
+
+JavaScript'teki ilkel veri türleri şunları içerir:
+
+ 1. Numbers - Tamsayılar - Ondalık sayılar
+ 2. Strings - Tek tırnak, çift tırnak veya ters tırnak içerisindeki tüm veriler..
+ 3. Booleans - true yada false (true = 1 false = 0 bu iki terimi bu şekilde öğrenin. Çevirilerine çok girmeyin kısaca var yada yok )
+ 4. Null - Boş değer yada değeri yok
+ 5. Undefined - Bir değer verilmeyen değişken. ( Örn: let variables; )
+ 6. Symbol - Sembol yapıcısı tarafından oluşturulabilen benzersiz bir değer
+
+JavaScript'teki ilkel olmayan veri türleri şunları içerir:
+
+1. Objects ( Nesneler )
+2. Arrays ( Diziler )
+
+
+Şimdi ilkel ve ilkel olmayan veri türlerinin tam olarak ne anlama geldiğini görelim.
+*İlkel* veri türleri değişmez (değiştirilemez) veri türleridir. İlkel bir veri türü oluşturulduktan sonra onu değiştiremeyiz.
+
+**Örnek:**
+
+```js
+let word = 'JavaScript'
+```
+
+*word* değişkeninde saklanan dizeyi değiştirmeye çalışırsak JavaScript bir hata vermelidir. Tek, çift veya ters tırnak arasındaki herhangi bir veri türü, dize veri türüdür.
+
+```js
+word[0] = 'Y'
+```
+
+Bu ifade *word* değişkeninde saklanan dizeyi değiştirmez. Yani, string'lerin değiştirilemez ya da başka bir deyişle değişmez olduğunu söyleyebiliriz.
+İlkel veri türleri değerlerine göre karşılaştırılır. Farklı veri değerlerini karşılaştıralım. Aşağıdaki örneğe bakın:
+
+```js
+let numOne = 3
+let numTwo = 3
+
+console.log(numOne == numTwo) // true ( Burada iki değişkende 3 e eşit olduğu için birbirine eşit olduğu sonucu çıkıyor )
+
+let js = 'JavaScript'
+let py = 'Python'
+
+console.log(js == py) //false ( Burada iki değişkende farklı olduğu ve eşitlenemedikleri için false yani 0 değeri dönüyor )
+
+let lightOn = true
+let lightOff = false
+
+console.log(lightOn == lightOff) //false ( Yukarıdaki örnek gibi eeşit olmadıkları için false yani 0 değeri dönüyor )
+```
+
+### İlkel Olmayan Veri Türleri
+
+*İlkel olmayan* veri türleri düzenlenebilir veya değiştirilebilir. İlkel olmayan veri türlerinin değerini, oluşturulduktan sonra değiştirebiliriz.
+Bir dizi oluşturarak görelim. Dizi, köşeli parantez içindeki veri değerlerinin bir listesidir.Diziler aynı veya farklı veri türlerini içerebilir. Dizi değerleri dizin indekslerine ( dizinine ) göre referans alınır. JavaScript'te dizilerin indeksi sıfırdan başlar. Yani bir dizinin ilk elemanı sıfır indeksinde, ikinci elemanı bir indeksinde, üçüncü elemanı iki indeksinde bulunur.
+( Orjinal anlatıma bağlı kalmak istiyorum lakin bazen anlamsız olabiliyor. Kısaca diziler okunurken 0-1-2-3 .... şeklinde indekslenir. Bir dizinin ilk elemanına erişmek istiyorsanız indeks numarasına 0 yazmalısınız. Aşağıdaki örneği incelerseniz bu karmaşıklığı çözmüş olacaksınız. )
+
+```js
+let nums = [1, 2, 3]
+nums[0] = 10
+
+console.log(nums) // [10, 2, 3] ( nums değişkeninin ilk elemanı yada 0. indeksinin değerini 10 yapmış oldu )
+```
+
+Gördüğünüz gibi "DİZİ" ilkel olmayan bir veri türü değişkenidir. İlkel olmayan veri türleri değere göre karşılaştırılamaz. İlkel olmayan veri türleri aynı özelliklere ve değerlere sahip olsa bile, kesinlikle eşit değildirler.
+
+```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
+```
+
+Temel kural, ilkel olmayan veri türlerini karşılaştıramıyoruz. Dizileri (arrays), fonksiyonları (functions) veya nesneleri (objects) karşılaştırmayın.
+İlkel olmayan değerler, değer yerine referansla karşılaştırıldıkları için referans türleri olarak adlandırılır. İki nesne, yalnızca aynı temel nesneye atıfta bulunuyorlarsa kesinlikle eşittir.
+
+```js
+let nums = [1, 2, 3]
+let numbers = nums
+
+console.log(nums == numbers) // true ( değişken oluştururken numbers'ın değerini nums'a eşitlediği için bunun sonucu true dönmektedir.)
+
+let userOne = {
+name:'Asabeneh',
+role:'teaching',
+country:'Finland'
+}
+
+let userTwo = userOne
+
+console.log(userOne == userTwo) // true ( yukarıdaki ile aynı )
+```
+
+İlkel veri türleri ile ilkel olmayan veri türleri arasındaki farkı anlamakta zorluk çekiyorsan, bunu yaşayan tek kişi değilsin. Sakin ol ve bir sonraki bölüme geç ve bir süre sonra geri gelip burayı tekrar incele. Şimdi sayı türlerine göre veri türlerine başlayalım.
+
+## Sayılar
+
+Sayılar, tüm aritmetik işlemleri yapabilen tam sayılar ve ondalık değerlerdir.
+Hadi sayılar ile ilgili bazı örnekler görelim.
+
+### Sayı Veri Türlerini Bildirme
+
+```js
+let age = 35
+const gravity = 9.81 // yer çekimi kuvvet değeri bu değer haliyle değişmeyeceği için const olarak tanımlanıyor. Değişmez değişkenleri const ile tanımlarsınız. Bunu unutmayın.
+let mass = 72 // kilogram cinsinden kütle
+const PI = 3.14 // pi sayısı matematikte sabit bir sayı olduğu için const ile oluşturulmuş. ( küsüratı almamış )
+
+// daha fazla örnek
+const boilingPoint = 100 // derece cinsinden sıcaklık, suyun sabit olan kaynama noktası ( derecesi )
+const bodyTemp = 37 // derece. İnsan vücudun sabit olan ortalama sıcaklığı
+
+console.log(age, gravity, mass, PI, boilingPoint, bodyTemp)
+```
+
+### Matematik Nesnesi - Objesi ( Math Object )
+
+JavaScript'te Math Objesi, sayılar ile çalışmanız için birçok yöntem sağlar.
+
+```js
+const PI = Math.PI // Buraya kısa bir açıklama getirelim. Math objesi sayesinde PI sayısının değerini otomatik alıyoruz.
+
+console.log(PI) // 3.141592653589793
+
+// En yakın sayıya yuvarlama
+// Eğer .5'in altındaysa aşağıya üstündeyse yukarıya yuvarlar. Örn: 3.14 ise 3 yapar 3.51 ise 4 yapar.
+
+console.log(Math.round(PI)) // 3.14 olduğu için 3 e yuvarlama yapıyor
+
+console.log(Math.round(9.81)) // Ondası 0.5 üstünde olduğu için 10 yapar
+
+console.log(Math.floor(PI)) // floor aşağı yuvarlar Bu 3 olur
+
+console.log(Math.ceil(PI)) // ceil yukarı yuvarlar Bu 4 olur
+
+console.log(Math.min(-5, 3, 20, 4, 5, 10)) // En küçük sayıyı bulmaya yaradığı için sonuç -5 döner
+
+console.log(Math.max(-5, 3, 20, 4, 5, 10)) // En büyük sayıyı bulmaya yaradığı için sonuç 20 döner
+
+const randNum = Math.random() // 0 ile 0.999999 arasında rastgele bir sayı üretir.
+console.log(randNum)
+
+// 0 ile 10 arasında rastgele bir sayı oluşturalım.
+
+const num = Math.floor(Math.random () * 11) // 0 ile 10 arasında rastgele sayı oluşturur
+console.log(num)
+
+//Mutlak değer
+console.log(Math.abs(-10)) // 10
+
+//Kare kök
+console.log(Math.sqrt(100)) // 10
+
+console.log(Math.sqrt(2)) // 1.4142135623730951
+
+// Üs
+console.log(Math.pow(3, 2)) // 9
+
+console.log(Math.E) // 2.718
+
+// Logaritma
+// Returns the natural logarithm with base E of x, Math.log(x)
+console.log(Math.log(2)) // 0.6931471805599453
+console.log(Math.log(10)) // 2.302585092994046
+
+// Sırasıyla 2 ve 10'un doğal logaritmasını döndürür
+console.log(Math.LN2) // 0.6931471805599453
+console.log(Math.LN10) // 2.302585092994046
+
+// Trigonometri
+Math.sin(0)
+Math.sin(60)
+
+Math.cos(0)
+Math.cos(60)
+```
+
+#### Rastgele Sayı Üretme
+
+JavaScript'te Math nesnesi random() methodu 0 ile 0,999999999 arasında bir sayı üretir
+
+```js
+let randomNum = Math.random() // 0 ile 0.999999999 arasında bir sayı üretir
+```
+
+Şimdi 0 ile 10 arasında rastgele bir sayı üretmek için random() methodu'nu nasıl kullanabileceğimizi görelim:
+
+```js
+let randomNum = Math.random() // 0 ile 0.999 arasında oluşturur
+let numBtnZeroAndTen = randomNum * 11
+
+console.log(numBtnZeroAndTen) // Sonuç : minimum 0 ve maksimum 10.99
+
+let randomNumRoundToFloor = Math.floor(numBtnZeroAndTen) // yuvarlama yapıyor
+console.log(randomNumRoundToFloor) // Sonuç 0 ile 10 arasında çıkar
+```
+
+## Strings
+
+Dizeler **_tek_**, **_çift_** ve **_ters tırnak_** arasındaki metinlerdir.
+Bir dize bildirmek için değişken adına, atama operatörüne, tek tırnak, çift tırnak veya ters tırnak içerisinde bir değere ihtiyacımız var.
+Bazı dize örnekleri görelim:
+
+```js
+let space = ' ' // boş alan string tek tırnaklı
+let firstName = 'Asabeneh' // tek tırnaklı string
+let lastName = 'Yetayeh' // tek tırnaklı string
+let country = 'Finland' // tek tırnaklı string
+let city = 'Helsinki' // tek tırnaklı string
+let language = 'JavaScript' // tk tırnaklı string
+let job = 'teacher' // tek tırnaklı string
+let quote = "The saying,'Seeing is Believing' is not correct in 2020." // çift tırnaklı string
+let quotWithBackTick = `The saying,'Seeing is Believing' is not correct in 2020.` // ters tırnaklı string (bu karakteri genellikle klavyenizdeki noktalı virgülü kullanarak yaparsınız. Benim klavyemde alt gr + noktalı virgül ve iki kere tıklanınca çıkıyor)
+```
+
+### String Birleştirme
+
+İki veya daha fazla string'i birbirine bağlama işlemine birleştirme denir.
+Yukarda bulunan string örneklerini kullanarak:
+
+```js
+let fullName = firstName + space + lastName; // birleştirme, iki string'i bir araya getirme.
+console.log(fullName);
+```
+
+```sh
+Asabeneh Yetayeh
+```
+
+String'leri farklı şekildede birleştirebiliriz.
+
+#### Toplama Operatörünü Kullanarak Birleştirme
+
+Ekleme operatörü kullanarak birleştirme eski bir yöntemdir. Bu birleştirme yöntemi sıkıcı ve hataya açıktır. Bu şekilde nasıl birleştirileceğini bilmek iyidir, ancak ES6 şablon dizelerini kullanmanızı şiddetle tavsiye ederim (daha sonra açıklanacaktır).
+
+```js
+// Farklı veri türlerini oluşturma
+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 toplama operatörü ile değişkenleri birleştiriyor
+
+console.log(personInfoOne)
+```
+
+```sh
+Asabeneh Yetayeh. I am 250. I live in Finland
+```
+
+#### Uzun Değişmez Stringler
+
+Stringler tek bir karakter, paragraf yada sayfa olabilir. String uzunluğu çok büyükse tek bir satıra sığmayabilir. String'in bir sonraki satırda devam edeceğini belirtmek için her satırın sonunda ters eğik çizgi karakterini (\\) kullanabiliriz.
+**Örnek:**
+
+```js
+// burada kendinden bahseden bir paragraf yazmış. Bunuda çevirmeyelim :D
+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)
+```
+
+#### String'lerdeki Kaçış Dizileri
+JavaScript ve diğer programlama dillerinde \ (ters eğik çizgi ) ardından bazı karakterler kaçış dizisidir. En yaygın kaçış karakterlerini görelim:
+
+- \n: yeni satır
+- \t: Tab, 8 boşluk anlamına gelir ( klavyedeki tab tuşunu temsil eder )
+- \\\\: Ters eğik çizgi
+- \\': Tek Tırnak (')
+- \\": Çift Tırnak (")
+
+```js
+// kodları console kısmına yazarak denerseniz daha iyi anlarsınız.
+console.log('I hope everyone is enjoying the 30 Days Of JavaScript challenge.\nDo you ?') // Buradakı \n satır sonu anlamına gelir sonrası aşağı iner
+console.log('Days\tTopics\tExercises') // Burada her kelimeden sonra bir tab (\t) tuşuna basılmış etkisi verir
+console.log('Day 1\t3\t5') // \t bir başka örnek
+console.log('Day 2\t3\t5') // \t bir başka örnek
+console.log('Day 3\t3\t5') // \t bir başka örnek
+console.log('Day 4\t3\t5') // \t bir başka örnek
+console.log('This is a backslash symbol (\\)') // Ters eğik çizgi yazmak için \\ kullanılıyor
+console.log('In every programming language it starts with \"Hello, World!\"') // Hello World'ü çift tırnak içine almak için \" Hello World \" kullanılıyor.
+console.log("In every programming language it starts with \'Hello, World!\'") // Hello World'ü tek tırnak içine almak için \' Hello World \' kullanılıyor.
+console.log('The saying \'Seeing is Believing\' isn\'t correct in 2020') // Bu kısımdada alıntıları kullanmak için \ kullanımı gösterilmiş.
+```
+
+Konsol çıktıları :
+
+```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
+```
+
+#### Şablon Değişmezleri (Şablon String'ler)
+
+Şablon string'leri oluşturmak için iki ters tırnak kullanıyoruz. Verileri bir şablon string'i içine ifade olarak ekleme yapabiliriz. Verileri eklemek için, ifadeyi $ (dolar) işareti ile başlayan bir küme parantezinin "{}" içine alırız. Aşağıdaki sözdizimine bakın.
+
+```js
+//Syntax
+`String literal text`
+`String literal text ${expression}`
+```
+
+**Örnek : 1**
+
+```js
+console.log(`The sum of 2 and 3 is 5`) // statik bir veri
+let a = 2
+let b = 3
+console.log(`The sum of ${a} and ${b} is ${a + b}`) // verileri dinamik olarak ekleme
+```
+
+**Örnek :2**
+
+```js
+
+// Bu kısımda yazar + kullanarak ekleme yapmanın diğer yöntemi olan ES6 ekleme yöntemini gösteriyor. Bu daha stabil çalışıyor.
+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 - dize ekleme yöntemi ( ES5 yukarda gösterilmişti )
+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.
+```
+
+Bir string şablonu veya interpolasyon ( matematiksel bir terim ) yöntemi kullanarak, bir değer olabilecek ifadeler veya bazı işlemler ekleyebiliriz.(karşılaştırma, aritmetik işlemler, üçlü işlem)
+
+```js
+let a = 2
+let b = 3
+console.log(`${a} is greater than ${b}: ${a > b}`) // a b den büyüktür yazıyor ve interpolasyon metodu bunun yanlış olduğunu söylecek
+```
+
+```sh
+2 is greater than 3: false
+```
+
+### String Metotları
+
+JavaScript'teki her şey bir nesnedir. Bir string ilkel veri türüyse bunu değiştiremeyiz. String bir nesnenin, birçok string metodu vardır. Birçok string metodu bulunmaktadır, bunlar string'ler ile çalışmamıza yardımcı olurlar. ( stringlerin özelliklerini vb bulma metodları bunlar Örneğe bakın)
+
+1. *length*: String içerisindeki karakterlerin sayısını belirtir. Boşluklar dahildir.
+
+**Örnek :**
+
+```js
+let js = 'JavaScript'
+console.log(js.length) // 10
+let firstName = 'Asabeneh'
+console.log(firstName.length) // 8
+```
+
+2. *String'deki karakterlere erişim*: String içerisinde bulunan her karaktere indeks numarasıyla erişebiliriz. Programlamada sayma 0 dan başlar. String'in ilk dizini 0, son dizini ise toplam uzunluğun -1'dir. ( Kısaca 10 karakter varsa sıralama 0-9 arasında yapılıyor. Resme bakın daha iyi anlayacaksınız.)
+
+ 
+
+'JavaScript' string'indeki farklı karakterlere erişelim.
+
+```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()*: bu metot string verisini büyük harflere dönüştürür.
+
+```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()*: bu metot string verisini küçük harflere dönüştürür.
+
+```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()*: İki arrgüman alır, başlangıç indeksi ve silenecek karakter sayısı.
+
+```js
+let string = 'JavaScript'
+console.log(string.substr(4,6)) // Script
+
+let country = 'Finland'
+console.log(country.substr(3, 4)) // land
+```
+
+6. *substring()*: Başlangıç indeksi ve durma indeksi olmak üzere iki argüman almaktadır.
+
+```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()*: Bu metot bir stringi belirtilen yerden bölmeye yarar. ( array oluşturuyor )
+
+```js
+let string = '30 Days Of JavaScript'
+
+console.log(string.split()) // bu kısımda birşey belirtmediğin için 1 elementli array oluştu -> ["30 Days Of JavaScript"]
+console.log(string.split(' ')) // bu kısımda boşluktan böl dediğimiz için 4 elementli array oluştu -> ["30", "Days", "Of", "JavaScript"]
+
+let firstName = 'Asabeneh'
+
+console.log(firstName.split()) // - > ["Asabeneh"]
+console.log(firstName.split('')) // burada sadece tek tırnak kullandığımız için string'in içindeki tüm karakterleri array haline getirdi -> ["A", "s", "a", "b", "e", "n", "e", "h"]
+
+let countries = 'Finland, Sweden, Norway, Denmark, and Iceland'
+
+console.log(countries.split(',')) // Dikkat edin sadece virgül ile ayırıyor. İknci elementin solunda boşluk oluşuyor. ["Finland", " Sweden", " Norway", " Denmark", " and Iceland"]
+console.log(countries.split(', ')) // Dikkat edin burayada. ', ' virgül ve boşluk bulunmakta bu yüzden elementleri virgülden ayırıp boşluklsuz arrray oluşturuyor. ["Finland", "Sweden", "Norway", "Denmark", "and Iceland"]
+```
+
+8. *trim()*: String'in başında ve sonundaki boşlukları silmeye yarar.
+
+```js
+let string = ' 30 Days Of JavaScript '
+
+console.log(string)
+console.log(string.trim(' '))
+
+let firstName = ' Asabeneh '
+
+console.log(firstName)
+console.log(firstName.trim()) // içinde tırnak kullanmasanız dahi boşlukları siler
+```
+
+```sh
+ 30 Days Of JavasCript
+30 Days Of JavasCript
+ Asabeneh
+Asabeneh
+```
+
+9. *includes()*: Bu metot string içerisinde varlık kontrolü yapmaya yarar. Eğer bulursa true, bulamazsa false döner. ( birebir arama yapar )
+
+```js
+let string = '30 Days Of JavaScript'
+
+console.log(string.includes('Days')) // true
+console.log(string.includes('days')) // false - birebir arama yapar!
+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()*: Bu metot string içerisinde değiştirme yapmamızı sağlar. Eski ve Yeni olmak üzere iki argüman alır.
+
+```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()*: Stringdeki indeksi belirttiğinizde o indeksin değerini yazdırır.
+
+```js
+string.charAt(index)
+```
+
+```js
+let string = '30 Days Of JavaScript'
+console.log(string.charAt(0)) // 3 (0. indeksin değerini döndürdü)
+
+let lastIndex = string.length - 1 // bu kısımda yukardaki değişkenin karakter sayısını alıyor (21) sonra bu sonucu 1 ile çıkartıyor sonuç 20. aşağı bak
+console.log(string.charAt(lastIndex)) // pogramlamada sayma 0 dan başladığı için -1 yapıyor yukarıda console.log da çıkan sonuç "t" olacaktır. Buda 20. karakterdir. İnanmazsan say =) ama sıfırdan başlamayı unutma
+```
+
+12. *charCodeAt()*: String'teki vermiş olduğunuz index değerinin ASCII numarasını döndürür.
+
+```js
+string.charCodeAt(index)
+```
+
+```js
+let string = '30 Days Of JavaScript'
+console.log(string.charCodeAt(3)) // D ASCII 68
+
+let lastIndex = string.length - 1
+console.log(string.charCodeAt(lastIndex)) // t ASCII 116
+
+```
+
+13. *indexOf()*: Bu metot belirtilen değerin indeksini verir. Değer bulunamazsa -1 sonucunu döndürür. ( Birebir arama yapar örneğe bakın )
+
+```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()*: Bu metot belirtilen değerin son değer indeksini verir. Değer bulunamazsa -1 sonucunu döndürür. ( Birebir arama yapar örneğe bakın )
+
+
+```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()*: Bu metot birleştirme işlemini sağlar, birden fazla değer alabilir
+
+```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*: String'in belirtilen değer ile başlayıp başlamadığını kontrol eder. true yada false döndürür.
+
+```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*: String'in belirtilen değer ile bitip bitmediğini kontrol eder. true yada false döndürür.
+
+```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*: Argüman olarak bir alt dize alır ve ilk eşleşmenin dizinini döndürür. Arama değeri bir dize veya normal ifade kalıbı olabilir.
+
+```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 buradaki gi açıklaması bir alt örnekte var
+```
+
+19. *match*: Argüman olarak bir alt dize veya normal ifade kalıbı alır ve eşleşme varsa bir dizi döndürür, değilse null döndürür. Normal bir ifade kalıbının nasıl göründüğünü görelim. / işareti ile başlar ve / işareti ile biter.
+
+```js
+let string = 'love'
+let patternOne = /love/ // koşulsuz
+let patternTwo = /love/gi // g-bütün metinde ara, i - büyük küçük harf duyarsız
+```
+
+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"]
+```
+
+Normal bir ifade kullanarak metinden sayıları çıkaralım. Burası normal ifade bölümü değil, panik yapmayın! Düzenli ifadeleri daha sonra ele alacağız.
+
+```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+/
+
+// kaçış karakterli d, d'nin normal olmadığı anlamına gelir, d bunun yerine bir rakam gibi davranır
+// + bir veya daha fazla basamaklı sayı anlamına gelir,
+// ondan sonra g varsa global demektir, her yerde ara.
+
+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()*: bağımsız değişken olarak bir sayı alır ve stringi sayı kadar döndürür.
+
+```js
+string.repeat(n)
+```
+
+```js
+let string = 'love'
+console.log(string.repeat(10)) // lovelovelovelovelovelovelovelovelovelove
+```
+
+## Veri Türlerini Kontrol Etme ve Döküm
+
+### Veri Türlerini Kontrol Etme
+
+Belirli bir değişkenin veri türünü kontrol etmek için _typeof_ yöntemini kullanırız.
+
+**Örnek:**
+
+```js
+// Farklı javascript veri türleri
+// Farklı veri tipleri tanımlayalım
+
+let firstName = 'Asabeneh' // string
+let lastName = 'Yetayeh' // string
+let country = 'Finland' // string
+let city = 'Helsinki' // string
+let age = 250 // number, benim gerçek yaşım değil merak etme
+let job // undefined, çünkü bir değer atanmamış
+
+console.log(typeof 'Asabeneh') // string
+console.log(typeof firstName) // string
+console.log(typeof 10) // number
+console.log(typeof 3.14) // number
+console.log(typeof true) // boolean
+console.log(typeof false) // boolean
+console.log(typeof NaN) // number
+console.log(typeof job) // undefined
+console.log(typeof undefined) // undefined
+console.log(typeof null) // object
+```
+
+### Veri Türünü Değiştirme (Döküm)
+
+- Döküm: Bir veri tipini başka bir veri tipine dönüştürme. Kullandıklarımız _parseInt()_, _parseFloat()_, _Number()_, _+ sign_, _str()_
+ Aritmetik işlemler yapmadan önce string sayıları önce integer yada float türüne dönüştürmeliyiz yoksa hata alırız.
+
+#### String to Int
+
+
+String bir numarayı sayıya dönüştürebiliriz. Alıntı içerisindeki herhangi bir sayı string numarasıdır. Bir string numarası örneği: '10', '5', vb.
+Aşağıdaki metotları kullanarak string'i sayıya dönüştürebiliriz:
+
+- parseInt()
+- Number()
+- Plus sign(+) // artı işareti demek
+
+```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
+```
+
+#### String to Float
+
+String içindeki ondalık numarayı sayıya çevirebiliriz. Tırnak içerisindeki ondalık sayı string ondalık sayıdır. Bir string ondalık numarası örneği: '9.81', '3.14', '1.44' vb.
+Aşağıdaki metotları kullanarak ondalık stringi sayıya dönüştürebiliriz:
+
+- parseFloat()
+- Number()
+- Plus sign(+)
+
+```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
+```
+
+#### Float to Int
+
+Ondalık sayıları tam sayılara çevirebiliriz. (Int) ( bu aşağıya yuvarlıyor )
+Float'ı int'e dönüştürmek için aşağıdaki metodu kullanıyoruz:
+
+- parseInt()
+
+```js
+let num = 9.81
+let numInt = parseInt(num)
+
+console.log(numInt) // 9
+```
+
+🌕 Harikasın. 2. gün zorluklarını yeni tamamladınız ve mükemmelliğe giden yolda iki adım öndesiniz. Şimdi beyniniz ve kasınız için bazı egzersizler yapın.
+
+## 💻 Gün 2: Egzersizleri
+
+### Exercise: Seviye 1
+
+1. Challenge adında bir değişken tanımlayın ve **'30 Days Of JavaScript'** başlangıç değerine atayın.
+2. __console.log()__ kullanarak tarayıcı konsolunda değişkeni yazdırın,
+3. _console.log()_ kullanarak tarayıcı konsolunda dizenin __length__ değerini yazdırın,
+4. __toUpperCase()__ yöntemini kullanarak tüm dize karakterlerini büyük harflerle değiştirin,
+5. __toLowerCase()__ yöntemini kullanarak tüm dize karakterlerini küçük harflerle değiştirin,
+6. __substr()__ veya __substring()__ yöntemini kullanarak string'in ilk kelimesini kesin-silin (dilimleyin)
+7. *Days Of JavaScript* ifadesini *30 Days Of JavaScript*'ten ayırın.
+8. __includes()__ yöntemini kullanarak string'in __Script__ kelimesini içerip içermediğini kontrol edin
+9. __split()__ yöntemini kullanarak __string__ öğesini bir __array__'ye bölün
+10. 30 Days Of JavaScript dizesini __split()__ yöntemini kullanarak boşlukta bölün
+11. 'Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon' dizeyi virgülden __split__ ve bir dizi olarak değiştirin.
+12. __replace()__ yöntemini kullanarak 30 Days of JavaScript'i 30 Days of Python olarak değiştirin.
+13. 'JavaScript'in 30 Günü' dizesinde dizin 15'teki karakter nedir? __charAt()__ yöntemini kullanın.
+14. __charCodeAt()__ kullanan 'JavaScript'in 30 Günü' dizesindeki J karakter kodu nedir?
+15. 30 Days of JavaScript'te __a__ öğesinin ilk oluşumunun konumunu belirlemek için __indexOf__ kullanın
+16. 30 Days of JavaScript'te __a__ öğesinin son oluşumunun konumunu belirlemek için __lastIndexOf__ kullanın.
+17. Aşağıdaki cümlede __çünkü__ kelimesinin ilk geçtiği yeri bulmak için __indexOf__ kullanın:
+__'Bir cümleyi çünkü ile bitiremezsiniz çünkü çünkü bir bağlaçtır'__
+18. Aşağıdaki cümlede __çünkü__ kelimesinin son geçtiği yeri bulmak için __lastIndexOf__ kullanın:
+__'Bir cümleyi çünkü ile bitiremezsiniz çünkü çünkü bir bağlaçtır'__
+19. Aşağıdaki cümlede __çünkü__ kelimesinin ilk geçtiği yeri bulmak için __search__ kullanın:
+__'Bir cümleyi çünkü ile bitiremezsiniz çünkü çünkü bir bağlaçtır'__
+20. Bir dizgenin başındaki ve sonundaki boşlukları kaldırmak için __trim()__ kullanın. Örneğin '30 Days Of JavaScript'.
+21. *30 Days Of JavaScript* dizesiyle __startsWith()__ yöntemini kullanın ve sonucu doğru yapın
+22. *30 Days Of JavaScript* dizesiyle __endsWith()__ yöntemini kullanın ve sonucu doğru yapın
+23. JavaScript'in 30 Günü'ndeki tüm __a__'leri bulmak için __match()__ yöntemini kullanın
+24. __concat()__ kullanın ve '30 Days of' ve 'JavaScript'i tek bir dize olan '30 Days of JavaScript' ile birleştirin
+25. 30 Gün JavaScript'i 2 kez yazdırmak için __repeat()__ yöntemini kullanın
+
+
+### Egzersiz: Seviye 2
+
+1. console.log() kullanarak aşağıdaki ifadeyi yazdırın:
+
+ ```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()'u kullanarak Rahibe Teresa'nın aşağıdaki alıntısını yazdırın:
+
+ ```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. '10' tipinin tam olarak 10'a eşit olup olmadığını kontrol edin. Değilse tam olarak eşit yapın.
+4. parseFloat('9.8') 10'a tam olarak eşit değilse, 10'a eşit olup olmadığını kontrol edin.
+5. Hem python hem de jargonda 'on' ifadesinin bulunup bulunmadığını kontrol edin
+6. _Umarım bu kurs jargonla dolu değildir_. Cümlede _jargon_ olup olmadığını kontrol edin.
+7. 0 ile 100 arasında rastgele bir sayı üretin.
+8. 50 ile 100 arasında rastgele bir sayı üretin.
+9. Dahil olmak üzere 0 ile 255 arasında rastgele bir sayı oluşturun.
+10. Rastgele bir sayı kullanarak 'JavaScript' dize karakterlerine erişin.
+11. Aşağıdaki kalıbı yazdırmak için console.log() ve kaçış karakterlerini kullanın.
+
+ ```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__ kullanarak __çünkü çünkü__ ifadesini aşağıdaki cümleden ayırın:__'Bir cümleyi çünkü ile bitiremezsiniz çünkü çünkü bir bağlaçtır'__
+
+### Egzersiz: Seviye 3
+
+1. 'Aşk bu dünyadaki en iyi şeydir. Bazıları aşkını buldu ve bazıları hala aşkını arıyor.' Bu cümledeki __love__ kelimesini sayın.
+2. Aşağıdaki cümledeki tüm __çünkü__ sayısını saymak için __match()__ kullanın:__'Bir cümleyi çünkü ile bitiremezsiniz çünkü çünkü bir bağlaçtır'__
+3. Aşağıdaki metni temizleyin ve en sık kullanılan kelimeyi bulun (ipucu, değiştirme ve normal ifadeleri kullanın).
+
+ ```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. Aşağıdaki metinden sayıları çıkararak kişinin yıllık toplam gelirini hesaplayın.
+
+'Aylık maaşından 5000 euro, yıllık 10000 euro ikramiye, ayda 15000 euro online kurstan kazanıyor.'
+
+🎉 TEBRİKLER ! 🎉
+
+[<< Gün 1](../readMe.md) | [Gün 3 >>](../03_Day_Booleans_operators_date/03_booleans_operators_date.md)
diff --git a/Turkish/03_Day_Booleans_operators_date/03_booleans_operators_date.md b/Turkish/03_Day_Booleans_operators_date/03_booleans_operators_date.md
new file mode 100644
index 000000000..65b7271f9
--- /dev/null
+++ b/Turkish/03_Day_Booleans_operators_date/03_booleans_operators_date.md
@@ -0,0 +1,637 @@
+
+
30 Days Of JavaScript: Booleans (Boole Değerler), Operators (Operatörler), Date (Tarih Objesi)
+
+[<< Gün 2](../02_Day_Data_types/02_day_data_types.md) | [Gün 4 >>](../04_Day_Conditionals/04_day_conditionals.md)
+
+
+
+- [📔 Gün 3](#-gün-3)
+ - [Boolean Değerleri](#boolean-degerleri)
+ - [Doğru Değerleri](#doğru-değerleri)
+ - [Yanlış Değerleri](#yanlış-değerleri)
+ - [Tanımsız](#tanımsız)
+ - [Boş](#boş)
+ - [Operatörler](#operatörler)
+ - [Atama Operatörleri](#atama-operatörleri)
+ - [Aritmetik Operatörleri](#aritmetik-operatörleri)
+ - [Karşılaştırma Operatörleri](#karşılaştırma-operatörleri)
+ - [Mantıksal Operatörler](#mantıksal-operatörler)
+ - [Arttırma Operatörü](#arttırma-operatörü)
+ - [Azaltma Operatörü](#azaltma-operatörü)
+ - [Koşul Operatörü](#koşul-operatörü)
+ - [Operatör Önceliği](#operatör-önceliği)
+ - [Window Metotları](#window-metotları)
+ - [Window alert() metot](#window-alert-metot)
+ - [Window prompt() metot](#window-prompt-metot)
+ - [Window confirm() metot](#window-confirm-metot)
+ - [Date Objesi](#date-objesi)
+ - [Bir Zaman Objesi Oluşturma](#bir-zaman-objesi-oluşturma)
+ - [Tam Yılı Almak](#tam-yılı-almak)
+ - [Ayı Almak](#ayı-almak)
+ - [Tarihi Almak](#tarihi-almak)
+ - [Günü Almak](#günü-almak)
+ - [Saati Almak](#saati-almak)
+ - [Dakikayı Almak](#dakikayı-almak)
+ - [Saniyeyi Almak](#saniyeyi-almak)
+ - [Zamanı Almak](#zamanı-almak)
+ - [💻 Gün 3: Egzersizleri](#-gün-3-egzersizleri)
+ - [Egzersiz: Seviye 1](#egzersiz-seviye-1)
+ - [Egzersiz: Seviye 2](#egzersiz-seviye-2)
+ - [Egzersiz: Seviye 3](#egzersiz-seviye-3)
+
+# 📔 Gün 3
+
+## Boolean Değerleri
+
+Boolean ver türü iki değerden birini temsil eder :_true_ yada _false_. Boolean değeri doğru veya yanlıştır. Karşılaştırma operatörlerini kullandığınızda sonuc netleşecektir. Herhangi bir karşılaştırma sonucu doğru veya yanlış olan bir boolean değeri döndürür.
+
+**Örnek: Boolean Deperleri**
+
+```js
+let isLightOn = true // ışık açık doğru
+let isRaining = false // yağıyor yanlış
+let isHungry = false // aç yanlış
+let isMarried = true // evli doğru
+let truValue = 4 > 3 // true -- doğru
+let falseValue = 4 < 3 // false -- yanlış
+```
+
+Boolean değerlerinin doğru yada yanlış olduğunu kabul etmiştik.
+
+### Doğru Değerleri (true)
+
+- Sıfır hariç tüm sayılar (pozitif ve negatif) doğrudur
+- Boş bir dize ('') dışında tüm dizeler doğrudur
+- Boole değeri doğru
+
+### Yanlış Değerleri (false)
+
+- 0
+- 0n
+- null
+- undefined
+- NaN
+- the boolean false
+- '', "", ``, empty string
+
+Bu doğru ve yanlış değerleri hatırlamakta fayda var. Daha sonraki bölümde, onları karar vermek için koşullarla kullanacağız.
+
+## Tanımsız (Undefined)
+
+Bir değişken bildirirsek ve bir değer atamazsak, değer tanımsız olacaktır. Buna ek olarak, eğer bir fonksiyon değer döndürmüyorsa tanımsız olacaktır.
+
+
+```js
+let firstName
+console.log(firstName) //tanımlanmamış, çünkü henüz bir değer atanmamış.
+```
+
+## Boş (Null)
+
+```js
+let empty = null
+console.log(empty) // -> null(boş) , değer yok anlamına gelir
+```
+
+## Operatörler
+
+### Atama Operatörleri
+
+JavaScript'te eşittir işareti bir atama operatörüdür. Değişken atamak için kullanılır.
+
+```js
+let firstName = 'Asabeneh'
+let country = 'Finland'
+```
+
+Atama Operatörleri
+
+
+
+### Aritmetik Operatörleri
+
+Aritmetik operatörler matematiksel operatörlerdir.
+
+- Toplama(+): a + b
+- Çıkarma(-): a - b
+- Çarpma(*): a * b
+- Bölme(/): a / b
+- Kalan(Bölmedeki kalan)(%): a % b
+- (Örneğe Bak) Üstel Sayı (**): a ** b
+
+```js
+let numOne = 4
+let numTwo = 3
+let sum = numOne + numTwo // toplama
+let diff = numOne - numTwo // çıkarma
+let mult = numOne * numTwo // çarpma
+let div = numOne / numTwo // bölme
+let remainder = numOne % numTwo // kalanı bulma (bölmedeki kalan oluyor bu Biraz matematik :D )
+let powerOf = numOne ** numTwo // buda üstel sayı anlamına geliyor Örnek: 4 Üssü 3 Kaçtır? Biraz matematik 2 :D
+
+console.log(sum, diff, mult, div, remainder, powerOf) // 7,1,12,1.33,1, 64 ---- Sonuçları console.log'a tek tek yazıp deneyin
+
+```
+
+```js
+const PI = 3.14
+let radius = 100 // metre cinsinden uzunluk
+
+// Bir dairenin alanını hesaplayalım
+const areaOfCircle = PI * radius * radius
+console.log(areaOfCircle) // 314 m
+
+
+const gravity = 9.81 // m/s2 cinsinden ( metre saniye cinsi )
+let mass = 72 // kilogram cinsinden
+
+// Bir cismin ağırlığını hesaplayalım
+const weight = mass * gravity
+console.log(weight) // 706.32 N(Newton)
+
+const boilingPoint = 100 // oC cinsinden sıcaklık, suyun kaynama noktası
+const bodyTemp = 37 // oC cinsinden vücut ısısı
+
+
+// Dize enterpolasyonu kullanarak dizeyi sayılarla birleştirme
+/*
+ The boiling point of water is 100 oC. // Suyun kaynama noktası 100 oC'dir.
+ Human body temperature is 37 oC. // İnsan vücut sıcaklığı 37 oC'dir.
+ The gravity of earth is 9.81 m/s2. // Dünyanın yerçekimi 9.81 m/s2'dir.
+ */
+console.log(
+ `The boiling point of water is ${boilingPoint} oC.\nHuman body temperature is ${bodyTemp} oC.\nThe gravity of earth is ${gravity} m / s2.`
+)
+```
+
+### Karşılaştırma Operatörleri
+
+Programlamada değerleri karşılaştırırız, iki değeri karşılaştırmak için karşılaştırma operatörlerini kullanırız. Bir değerin diğer değere eşit veya büyük olup olmadığını kontrol ederiz.
+
+
+**Örnek: Karşılaştırma Operatörleri**
+
+```js
+console.log(3 > 2) // true, çünkü 3 2 den büyüktür
+console.log(3 >= 2) // true, çünkü 3 2 den büyüktür
+console.log(3 < 2) // false, çünkü 3 2 den büyüktür
+console.log(2 < 3) // true, çünkü 2 3 den küçüktür
+console.log(2 <= 3) // true, çünkü 2 3 den küçüktür
+console.log(3 == 2) // false, çünkü 3 2 ye eşit değildir
+console.log(3 != 2) // true, çünkü 3 2 ye eşit değildir
+console.log(3 == '3') // true, sadece değeri karşılaştırıyor
+console.log(3 === '3') // false, hem değeri hemde veri türünü karşılaştırıyor o yüzden yanlış. Birisi int değeri birisi string değerinden ( Bu denklik operatörü )
+console.log(3 !== '3') // true, hem değeri hemde veri türünü karşılaştırıyor o yüzden doğru. (Bu denk değil operatörü)
+console.log(3 != 3) // false, değeri karşılaştırıyor
+console.log(3 !== 3) // false, hem değeri hem de veri türünü karşılaştırıyor
+console.log(0 == false) // true, eşdeğer
+console.log(0 === false) // false, tam olarak aynı değil
+console.log(0 == '') // true, eşdeğer
+console.log(0 == ' ') // true, eşdeğer
+console.log(0 === '') // false, tam olarak aynı değil
+console.log(1 == true) // true, eşdeğer
+console.log(1 === true) // false, tam olarak aynı değil
+console.log(undefined == null) // true
+console.log(undefined === null) // false
+console.log(NaN == NaN) // false, eşit değil
+console.log(NaN === NaN) // false
+console.log(typeof NaN) // number
+
+console.log('mango'.length == 'avocado'.length) // false
+console.log('mango'.length != 'avocado'.length) // true
+console.log('mango'.length < 'avocado'.length) // true
+console.log('milk'.length == 'meat'.length) // true
+console.log('milk'.length != 'meat'.length) // false
+console.log('tomato'.length == 'potato'.length) // true
+console.log('python'.length > 'dragon'.length) // false
+```
+
+Yukarıdaki karşılaştırmaları biraz mantıkla anlamaya çalışın. Herhangi bir mantık olmadan hatırlamak zor olabilir.
+JavaScript bir şekilde kablolu bir programlama dilidir. JavaScript kodu çalışır ve size bir sonuç verir, ancak bunda iyi değilseniz, istenen sonuç olmayabilir.
+
+Temel kural olarak, eğer bir değer == ile doğru değilse, === ile eşit olmayacaktır. === kullanmak, == kullanmaktan daha güvenlidir. Aşağıdaki [bağlantı](https://dorey.github.io/JavaScript-Equality-Table/) veri türlerinin kapsamlı bir karşılaştırma listesine sahiptir.
+
+### Mantıksal Operatörler
+
+Aşağıdaki semboller ortak mantıksal operatörlerdir:
+&&(ve işareti) , || (boru -veya-) ve !(olumsuzlama).
+&& operatörü, yalnızca iki işlenen doğruysa doğru olur.
+|| operatör, işlenenlerden herhangi birinin doğru olması durumunda gerçekleşir.
+! operatör true - false ve false - true değerini olumsuzlar.
+
+```js
+// && ve işareti operatörü örneği ( ampersand olarak anlandırılıyor)
+
+const check = 4 > 3 && 10 > 5 // true && true -> true
+const check = 4 > 3 && 10 < 5 // true && false -> false
+const check = 4 < 3 && 10 < 5 // false && false -> false
+
+// || boru veya operatör, örnek
+
+const check = 4 > 3 || 10 > 5 // true || true -> true
+const check = 4 > 3 || 10 < 5 // true || false -> true
+const check = 4 < 3 || 10 < 5 // false || false -> false
+
+//! olumsuzlama örnekleri
+
+let check = 4 > 3 // true
+let check = !(4 > 3) // false
+let isLightOn = true
+let isLightOff = !isLightOn // false
+let isMarried = !false // true
+```
+
+### Arttırma Operatörü
+
+JavaScript'te, bir değişkende saklanan bir değeri artırmak için artırma operatörünü kullanırız. Artış, artış öncesi veya sonrası olabilir. Her birini görelim:
+
+1. Öncesi Artış
+
+```js
+let count = 0
+console.log(++count) // 1
+console.log(count) // 1
+```
+
+1. Sonrası Artış
+
+```js
+let count = 0
+console.log(count++) // 0
+console.log(count) // 1
+```
+
+Artış sonrası zamanın çoğunu kullanırız. En azından artım sonrası operatörünü nasıl kullanacağınızı hatırlamalısınız.
+
+
+### Azaltma Operatörü
+
+JavaScript'te, bir değişkende saklanan bir değeri azaltmak için azaltma operatörünü kullanırız. Azaltma, eksiltme öncesi veya sonrası olabilir. Her birini görelim:
+
+1. Öncesi Azaltma
+
+```js
+let count = 0
+console.log(--count) // -1
+console.log(count) // -1
+```
+
+2. Sonrası Azaltma
+
+```js
+let count = 0
+console.log(count--) // 0
+console.log(count) // -1
+```
+
+### Koşul Operatörü (Ternary - Üçlü )
+
+Üçlü operatör bir koşul yazmaya izin verir.
+Koşullar yazmanın başka bir yolu da üçlü operatörleri kullanmaktır. Aşağıdaki örneklere bakın:
+
+```js
+let isRaining = true
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+isRaining = false
+
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+```
+
+```sh
+You need a rain coat.
+No need for a rain coat.
+```
+
+```js
+let number = 5
+number > 0
+ ? console.log(`${number} is a positive number`)
+ : console.log(`${number} is a negative number`)
+number = -5
+
+number > 0
+ ? console.log(`${number} is a positive number`)
+ : console.log(`${number} is a negative number`)
+```
+
+```sh
+5 is a positive number
+-5 is a negative number
+```
+
+### Operatör Önceliği
+
+Bu [bağlantıdan](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence) operatör önceliği hakkında okumanızı tavsiye ederim.
+
+## Window Metotları
+
+### Window alert() metot
+
+En başta gördüğünüz gibi alert() metodu, belirtilen bir mesaj ve bir Tamam butonu ile bir uyarı kutusu görüntüler. Yerleşik bir yöntemdir ve argüman alır.
+
+```js
+alert(message)
+```
+
+```js
+alert('Welcome to 30DaysOfJavaScript')
+```
+
+Yıkıcı ve sinir bozucu olduğu için çok fazla uyarı kullanmayın, sadece test etmek için kullanın.
+
+### Window prompt() metot
+
+Pencere yöntemleri, tarayıcınızda giriş değerlerini almak için bir giriş içeren bir bilgi istemi kutusu görüntüler ve giriş verileri bir değişkende saklanabilir. prompt() yöntemi iki argüman alır. İkinci argüman isteğe bağlıdır.
+
+```js
+prompt('required text', 'optional text')
+```
+
+```js
+let number = prompt('Enter number', 'number goes here')
+console.log(number)
+```
+
+### Window confirm() metot
+
+confirm() yöntemi, bir Tamam ve İptal düğmesiyle birlikte belirli bir mesaj içeren bir iletişim kutusu görüntüler.
+Bir onay kutusu genellikle bir kullanıcıdan bir şeyi yürütmek için izin istemek için kullanılır. Pencere confirm() argüman olarak bir dize alır.
+Tamam'a tıklamak doğru değeri verir, İptal düğmesine tıklamak yanlış değeri verir.
+
+```js
+const agree = confirm('Are you sure you like to delete? ')
+console.log(agree) // result will be true or false based on what you click on the dialog box
+```
+
+Bunların hepsi window yöntemleri değil, window yöntemlerine derinlemesine girmek için ayrı bir bölümümüz olacak.
+
+## Date Objesi
+
+Zaman önemli bir şeydir. Belirli bir faaliyetin veya olayın zamanını bilmek isteriz. JavaScript'te geçerli saat ve tarih, JavaScript Date Objesi kullanılarak oluşturulur. Date objesini kullanarak oluşturduğumuz nesne, tarih ve saat ile çalışmak için birçok yöntem sunar. Bir tarih nesnesi değerlerinden tarih ve saat bilgisi almak için kullandığımız yöntemler, bilgiyi sağladığı için _get_ kelimesi ile başlamaktadır.
+_getFullYear(), getMonth(), getDate(), getDay(), getHours(), getMinutes, getSeconds(), getMilliseconds(), getTime(), getDay()_
+
+
+
+
+
+### Bir Zaman Objesi Oluşturma
+
+Bir kez zaman objesi oluşturduğumuzda zaman objesi, zaman hakkında bilgi sağlayacaktır. Bir zaman objesi oluşturalım.
+
+```js
+const now = new Date()
+console.log(now) // Sat Jan 04 2020 00:56:41 GMT+0200 (Eastern European Standard Time)
+```
+
+Bir time objesi oluşturduk ve tablo üzerinde bahsettiğimiz get yöntemlerini kullanarak objeden herhangi bir tarih saat bilgisine ulaşabiliyoruz.
+
+### Tam Yılı Almak
+
+Bir zaman objesinden tam yılı çıkaralım veya alalım.
+
+```js
+const now = new Date()
+console.log(now.getFullYear()) // 2020
+```
+
+### Ayı Almak
+
+Bir zaman objesinden ayı çıkaralım veya alalım.
+
+```js
+const now = new Date()
+console.log(now.getMonth()) // Bunu yazdığınızda muhtemelen bulunduğunuz aydan bir önceki ayın sayısını alıcaktır çünkü aylar 0-11 arasında oluşuyor. Ocak 1 değil 0. ay oluyor aralıkta 11. ay oluyor.
+```
+
+### Tarihi Almak
+
+Bir zaman objesinden ayın tarihini çıkaralım veya alalım.
+
+```js
+const now = new Date()
+console.log(now.getDate()) // yukardaki örnekte bulunan açıklamaya ek olarak geçen ayın gün sayısını verecektir.
+```
+
+### Günü Almak
+
+Bir zaman objesinden haftanın gününü çıkaralım veya alalım.
+
+```js
+const now = new Date()
+console.log(now.getDay()) // 6, because the day is Saturday which is the 7th day
+// Sunday is 0, Monday is 1 and Saturday is 6
+// Getting the weekday as a number (0-6)
+```
+
+### Saati Almak
+
+Bir zaman objesinden saatleri çıkaralım veya alalım.
+
+```js
+const now = new Date()
+console.log(now.getHours())
+```
+
+### Dakikayı Almak
+
+Bir zaman objesinden dakikaları çıkaralım veya alalım.
+
+```js
+const now = new Date()
+console.log(now.getMinutes())
+```
+
+### Saniyeyi Almak
+
+Bir zaman objesinden saniyeleri çıkaralım veya alalım.
+
+```js
+const now = new Date()
+console.log(now.getSeconds())
+```
+
+### Zamanı Almak
+
+Bu metot 1 Ocak 1970'den itibaren milisaniye cinsinden süre verir. Unix zamanı olarak da bilinir. Unix zamanını iki şekilde alabiliriz:
+
+1. _getTime()_ Kullanımı
+
+```js
+const now = new Date() //
+console.log(now.getTime()) // çıktı farklı olacaktır , 1 Ocak 1970 den kullandığınız zaman arasındaki süreyi milisaniye cinsinden verecektir.
+```
+
+1. _Date.now()_ Kullanımı
+
+```js
+const allSeconds = Date.now() //
+console.log(allSeconds) // çıktı farklı olacaktır , 1 Ocak 1970 den kullandığınız zaman arasındaki süreyi milisaniye cinsinden verecektir.
+
+const timeInSeconds = new Date().getTime()
+console.log(allSeconds == timeInSeconds) // true
+```
+
+Bu değerleri insan tarafından okunabilir bir zaman biçimine biçimlendirelim.
+
+**Örnek:**
+
+```js
+const now = new Date()
+const year = now.getFullYear() // yılı döndürür
+const month = now.getMonth() + 1 // ayı döndürür (0 - 11) olduğu için +1 ekliyor
+const date = now.getDate() // günü döndürür (1 - 31)
+const hours = now.getHours() // sayıyı döndürür (0 - 23)
+const minutes = now.getMinutes() // sayıyı döndürür (0 -59)
+
+console.log(`${date}/${month}/${year} ${hours}:${minutes}`) // çıktı farklı olacaktır
+```
+
+🌕 Sınırsız bir enerjiniz var. 3. gün zorluklarını yeni tamamladınız ve mükemmelliğe giden yolda üç adım öndesiniz. Şimdi beyniniz ve kasınız için bazı egzersizler yapın.
+
+## 💻 Gün 3: Egzersizleri
+
+### Egzersiz: Seviye 1
+
+1. firstName, lastName, country, city, age, isMarried, year değişkenlerini oluşturun ve bunlara değer atayın. Farklı veri türlerini kontrol etmek için typeof operatörünü kullanın.
+2. '10' türünün 10'a eşit olup olmadığını kontrol edin
+3. parseInt('9.8') 10'a eşit olup olmadığını kontrol edin
+4. Boolean değeri, doğru veya yanlıştır.
+ 1. Doğruluk değeri sağlayan üç JavaScript ifadesi yazın.
+ 2. Yanlış değer sağlayan üç JavaScript ifadesi yazın.
+
+5. console.log() kullanmadan önce aşağıdaki karşılaştırma ifadesinin sonucunu bulun. Sonuca karar verdikten sonra console.log() kullanarak onaylayın.
+ 1. 4 > 3
+ 2. 4 >= 3
+ 3. 4 < 3
+ 4. 4 <= 3
+ 5. 4 == 4
+ 6. 4 === 4
+ 7. 4 != 4
+ 8. 4 !== 4
+ 9. 4 != '4'
+ 10. 4 == '4'
+ 11. 4 === '4'
+ 12. Python ve jargonun uzunluğunu bulun ve yanlış bir karşılaştırma ifadesi yapın.
+
+6. console.log() kullanmadan önce aşağıdaki ifadelerin sonucunu bulun. Sonuca karar verdikten sonra console.log() kullanarak onaylayın.
+ 1. 4 > 3 && 10 < 12
+ 2. 4 > 3 && 10 > 12
+ 3. 4 > 3 || 10 < 12
+ 4. 4 > 3 || 10 > 12
+ 5. !(4 > 3)
+ 6. !(4 < 3)
+ 7. !(false)
+ 8. !(4 > 3 && 10 < 12)
+ 9. !(4 > 3 && 10 > 12)
+ 10. !(4 === '4')
+ 11. Hem dragon hem de python'da 'on' yoktur.
+
+7. Aşağıdaki etkinlikleri yapmak için Date nesnesini kullanın.
+ 1. Bugün yıl nedir?
+ 2. Bugünün ayı rakam olarak nedir?
+ 3. Bugünün tarihi nedir?
+ 4. Bugün sayı olarak gün nedir?
+ 5. Şimdi saat kaç?
+ 6. Dakika kaç şimdi?
+ 7. 1 Ocak 1970'den bugüne kadar geçen saniye sayısını bulun.
+
+### Egzersiz: Seviye 2
+
+1. Kullanıcıdan üçgenin tabanını ve yüksekliğini girmesini ve bir üçgenin alanını hesaplamasını isteyen bir komut dosyası yazın (alan = 0,5 x b x h).
+
+ ```sh
+ Enter base: 20
+ Enter height: 10
+ The area of the triangle is 100
+ ```
+
+1. Kullanıcıdan üçgenin a kenarını, b kenarını ve c kenarını girmesini ve üçgenin çevresini hesaplamasını isteyen bir komut dosyası yazın (çevre = a + b + c)
+
+ ```sh
+ Enter side a: 5
+ Enter side b: 4
+ Enter side c: 3
+ The perimeter of the triangle is 12
+ ```
+
+1. Komut istemini kullanarak uzunluk ve genişliği alın ve bir dikdörtgenin alanını hesaplayın (alan = uzunluk x genişlik ve dikdörtgenin çevresi (çevre = 2 x (uzunluk + genişlik))
+1. Komut istemini kullanarak yarıçapı alın ve bir dairenin alanını (alan = pi x r x r) ve bir dairenin çevresini (c = 2 x pi x r) hesaplayın, burada pi = 3.14.
+1. y = 2x -2'nin eğimini, x kesme noktasını ve y kesme noktasını hesaplayın
+1. Eğim m = (y2-y1)/(x2-x1). (2, 2) noktası ile (6,10) noktası arasındaki eğimi bulun
+1. Yukarıdaki iki sorunun eğimini karşılaştırın.
+1. y'nin değerini hesaplayın (y = x2 + 6x + 9). Farklı x değerleri kullanmayı deneyin ve y'nin hangi x değerinin 0 olduğunu bulun.
+1. Kullanıcıdan saat ve saat başına oran girmesini isteyen bir komut dosyası yazın. Kişinin ücretini hesapla?
+
+ ```sh
+ Enter hours: 40
+ Enter rate per hour: 28
+ Your weekly earning is 1120
+ ```
+
+1. Adınızın uzunluğu 7'den büyükse, adınız uzun, yoksa adınızın kısa olduğunu söyleyin.
+1. Adınızın uzunluğunu ve soyadınızın uzunluğunu karşılaştırın ve bu çıktıyı almalısınız.
+
+ ```js
+ let firstName = 'Asabeneh'
+ let lastName = 'Yetayeh'
+ ```
+
+ ```sh
+ Your first name, Asabeneh is longer than your family name, Yetayeh
+ ```
+
+1. İki değişken _myAge_ ve _yourAge_ bildirin ve bunlara başlangıç değerleri ile myAge ve yourAge atayın.
+
+ ```js
+ let myAge = 250
+ let yourAge = 25
+ ```
+
+ ```sh
+ I am 225 years older than you.
+ ```
+
+1. İstemi kullanarak, kullanıcının doğduğu yılı alır ve kullanıcı 18 veya daha büyükse, kullanıcıya belirli bir süre beklemesini söylemediği takdirde, kullanıcının araba kullanmasına izin verir.
+ ```sh
+
+ Enter birth year: 1995
+ You are 25. You are old enough to drive
+
+ Enter birth year: 2005
+ You are 15. You will be allowed to drive after 3 years.
+ ```
+
+1. Kullanıcıdan yıl sayısını girmesini isteyen bir komut dosyası yazın. Bir kişinin yaşayabileceği saniye sayısını hesaplayın. Birinin sadece yüz yıl yaşadığını varsayalım
+
+ ```sh
+ Enter number of years you live: 100
+ You lived 3153600000 seconds.
+ ```
+
+1. Tarih saat nesnesini kullanarak insan tarafından okunabilir bir saat biçimi oluşturun
+ 1. YYYY-MM-DD HH:mm
+ 2. DD-MM-YYYY HH:mm
+ 3. DD/MM/YYYY HH:mm
+
+### Egzersiz: Seviye 3
+
+1. Tarih saat nesnesini kullanarak insan tarafından okunabilir bir saat biçimi oluşturun. Saat ve dakika her zaman iki basamaklı olmalıdır (7 saat 07 ve 5 dakika 05 olmalıdır)
+ 1. YYY-MM-DD HH:mm eg. 20120-01-02 07:05
+
+[<< Gün 2](../02_Day_Data_types/02_day_data_types.md) | [Gün 4 >>](../04_Day_Conditionals/04_day_conditionals.md)
diff --git a/Turkish/04_Day_Conditionals/04_day_conditionals.md b/Turkish/04_Day_Conditionals/04_day_conditionals.md
new file mode 100644
index 000000000..18c4d1ab2
--- /dev/null
+++ b/Turkish/04_Day_Conditionals/04_day_conditionals.md
@@ -0,0 +1,386 @@
+
+
+[<< Gün 3](../03_Day_Booleans_operators_date/03_booleans_operators_date.md) | [Gün 5 >>](../05_Day_Arrays/05_day_arrays.md)
+
+
+
+- [📔 Gün 4](#-gün-4)
+ - [Conditionals - Koşullar](#conditionals-koşullar)
+ - [If](#if)
+ - [If Else](#if-else)
+ - [If Else if Else](#if--else-if-else)
+ - [Switch](#switch)
+ - [Ternary Operatörü](#ternary-operatörü)
+ - [💻 Egzersizler](#-exercises)
+ - [Egzersiz: Seviye 1](#egzersiz-seviye-1)
+ - [Egzersiz: Seviye 2](#egzersiz-seviye-2)
+ - [Egzersiz: Seviye 3](#egzersiz-seviye-3)
+
+# 📔 Gün 4
+
+## Conditionals - Koşullar
+
+Koşullu ifadeler, farklı koşullara dayalı kararlar vermek için kullanılır.
+Varsayılan olarak, JavaScript komut dosyasındaki ifadeler yukarıdan aşağıya doğru uygulanır. İşleme mantığı bunu gerektiriyorsa, ardışık yürütme akışı iki şekilde değiştirilebilir:
+
+- Koşullu yürütme: Belirli bir ifade doğruysa, bir veya daha fazla ifadeden oluşan bir blok yürütülür.
+- Tekrarlayan yürütme : Belirli bir ifade doğru olduğu sürece, bir veya daha fazla ifadeden oluşan bir blok tekrar tekrar yürütülecektir. Bu bölümde _if_, _else_ , _else if_ deyimlerini ele alacağız. Önceki bölümlerde öğrendiğimiz karşılaştırma ve mantıksal operatörler burada faydalı olacaktır.
+
+Koşullar aşağıdaki yollarla uygulanabilir:
+
+- if
+- if else
+- if else if else
+- switch
+- ternary operator
+
+### If
+
+JavaScript ve diğer programlama dillerinde _if_ anahtar kelimesi, bir koşulun doğru olup olmadığını kontrol etmek ve blok kodunu yürütmek için kullanılır. Bir if koşulu kullanmak oluşturmak için normal parantez ve küme parantezlerine ihtiyaç duyurulur. ({})
+
+```js
+// syntax
+if (condition) {
+ //kodun bu kısmı doğru koşul için çalışır
+}
+```
+
+**Örnek:**
+
+```js
+let num = 3
+if (num > 0) {
+ console.log(`${num} is a positive number`)
+}
+// 3 pozitif bir sayıdır
+```
+
+Yukarıdaki koşul örneğinde görebileceğiniz gibi 3, 0'dan büyüktür, yani pozitif bir sayıdır. Koşul doğruydu ve kod bloğu yürütüldü. Ancak koşul yanlışsa herhangi bir sonuç göremeyiz.
+
+```js
+let isRaining = true
+if (isRaining) {
+ console.log('Remember to take your rain coat.')
+}
+```
+Aynısı ikinci koşul için de geçerlidir, isRaining false ise if bloğu yürütülmez ve herhangi bir çıktı görmeyiz. Yanlış bir koşulun sonucunu görmek için, _else_ ile başka bir bloğumuz olmalıdır.
+
+### If Else
+
+Koşul doğruysa, ilk blok yürütülür, doğru değilse, __else__ koşul yürütülür.
+
+```js
+// syntax
+if (condition) {
+ // kodun bu kısmı doğru koşul için çalışır
+} else {
+ // kodun bu kısmı yanlış koşul için çalışır
+}
+```
+
+```js
+let num = 3
+if (num > 0) {
+ console.log(`${num} is a positive number`)
+} else {
+ console.log(`${num} is a negative number`)
+}
+// 3 pozitif bir sayıdır
+
+num = -3
+if (num > 0) {
+ console.log(`${num} is a positive number`)
+} else {
+ console.log(`${num} is a negative number`)
+}
+// -3 negatif bir sayıdır
+```
+
+```js
+let isRaining = true
+if (isRaining) {
+ console.log('You need a rain coat.')
+} else {
+ console.log('No need for a rain coat.')
+}
+// Bir yağmurluğa ihtiyacın var.
+
+isRaining = false
+if (isRaining) {
+ console.log('You need a rain coat.')
+} else {
+ console.log('No need for a rain coat.')
+}
+// Yağmurluğa gerek yok.
+```
+
+Son koşul yanlıştır, bu nedenle else bloğu yürütülmüştür. Ya ikiden fazla koşulumuz varsa? Bu durumda *else if* koşullarını kullanırdık.
+
+
+### If Else if Else
+
+Hayatımızda günlük kararlar veririz. Kararları bir veya iki koşulu kontrol ederek değil, birden çok koşula göre veririz. Günlük hayatımızda olduğu gibi programlama da şartlarla doludur. Birden fazla koşulumuz olduğunda *else if* kullanırız.
+
+```js
+// syntax
+if (condition) {
+ // code
+} else if (condition) {
+ // code
+} else {
+ // code
+
+}
+```
+
+**Örnek:**
+
+```js
+let a = 0
+if (a > 0) {
+ console.log(`${a} is a positive number`)
+} else if (a < 0) {
+ console.log(`${a} is a negative number`)
+} else if (a == 0) {
+ console.log(`${a} is zero`)
+} else {
+ console.log(`${a} is not a number`)
+}
+```
+
+```js
+// if else if else
+let weather = 'sunny'
+if (weather === 'rainy') {
+ console.log('You need a rain coat.')
+} else if (weather === 'cloudy') {
+ console.log('It might be cold, you need a jacket.')
+} else if (weather === 'sunny') {
+ console.log('Go out freely.')
+} else {
+ console.log('No need for rain coat.')
+}
+```
+
+#### Çevirmen Açıklaması
+
+Arkadaşlar anlatıcı belirtmemiş lakin ben araya bunu şıkıştırayım. if doğruluğu kontrol eder bir kere kullanılır, else ise if çalışmadığında devreye girer buda bir kere kullanılır.
+Birden fazla if yada else kullanamazsınız. Zaten birden fazla koşulu sorgulamak için else if blogu bulunmaktadır. Normalde else if açıklamasında bunu anlamanız gerekir.
+Lakin ekstra bir açıklama yapalım kafanızda tam oturmuş olsun konu. Mutlu kalın.
+
+
+### Switch
+
+Switch, **if else if else** için bir alternatiftir.
+Switch ifadesi bir *switch* anahtar sözcüğüyle başlar, ardından bir parantez ve kod bloğu gelir. Kod bloğunun içinde farklı durumlarımız olacak. Case bloğu, switch parantezindeki değer vaka değeriyle eşleşirse çalışır. Break ifadesi, koşul yerine getirildikten sonra kod yürütmesini sonlandırmak içindir. Default blok, tüm durumlar koşulu karşılamıyorsa çalışır.
+
+
+```js
+switch(caseValue){
+ case 1:
+ // code
+ break
+ case 2:
+ // code
+ break
+ case 3:
+ // code
+ break
+ default:
+ // code
+}
+```
+
+```js
+let weather = 'cloudy'
+switch (weather) {
+ case 'rainy':
+ console.log('You need a rain coat.')
+ break
+ case 'cloudy':
+ console.log('It might be cold, you need a jacket.')
+ break
+ case 'sunny':
+ console.log('Go out freely.')
+ break
+ default:
+ console.log(' No need for rain coat.')
+}
+
+// Switch Diğer Örnekler
+let dayUserInput = prompt('What day is today ?')
+let day = dayUserInput.toLowerCase()
+
+switch (day) {
+ case 'monday':
+ console.log('Today is Monday')
+ break
+ case 'tuesday':
+ console.log('Today is Tuesday')
+ break
+ case 'wednesday':
+ console.log('Today is Wednesday')
+ break
+ case 'thursday':
+ console.log('Today is Thursday')
+ break
+ case 'friday':
+ console.log('Today is Friday')
+ break
+ case 'saturday':
+ console.log('Today is Saturday')
+ break
+ case 'sunday':
+ console.log('Today is Sunday')
+ break
+ default:
+ console.log('It is not a week day.')
+}
+
+```
+
+// Durumlarda koşulları kullanmak için örnekler
+
+```js
+let num = prompt('Enter number');
+switch (true) {
+ case num > 0:
+ console.log('Number is positive');
+ break;
+ case num == 0:
+ console.log('Numbers is zero');
+ break;
+ case num < 0:
+ console.log('Number is negative');
+ break;
+ default:
+ console.log('Entered value was not a number');
+}
+```
+
+### Ternary Operatörü
+
+Koşullar yazmanın başka bir yolu da üçlü operatörleri kullanmaktır. Bunu diğer bölümlerde ele aldık, ancak burada da belirtmek gerekir.
+
+```js
+let isRaining = true
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+```
+
+🌕 Olağanüstü birisin ve olağanüstü bir potansiyelin var. 4. gün zorluklarını yeni tamamladınız ve mükemmelliğe giden yolda dört adım öndesiniz. Şimdi beyniniz ve kasınız için bazı egzersizler yapın.
+
+## 💻 Egzersizler
+
+### Egzersiz: Seviye 1
+
+1. prompt(“Enter your age:”) ile kullanıcı girdisi alın. Kullanıcı 18 veya daha büyükse, geri bildirimde bulunun:'Sürecek kadar yaşlısınız', ancak 18 değilse, 18 yaşına girmesi gereken yıl sayısını beklemeye başlayarak başka bir geri bildirim verin.
+
+ ```sh
+ Enter your age: 30
+ You are old enough to drive.
+
+ Enter your age:15
+ You are left with 3 years to drive.
+ ```
+
+1. if… else kullanarak myAge ve yourAge değerlerini karşılaştırın. Karşılaştırmaya dayanarak ve sonucu kimin daha yaşlı olduğunu (ben veya siz) belirterek konsola kaydedin. Yaşı girdi olarak almak için komut prompt(“Enter your age:”) kullanın.
+
+ ```sh
+ Enter your age: 30
+ You are 5 years older than me.
+ ```
+
+1. a, b'den büyükse, 'a b'den büyüktür', aksi takdirde 'a, b'den küçüktür' döndürür. şekilde uygulamaya çalışın
+
+ - using if else
+ - ternary operator.
+
+ ```js
+ let a = 4
+ let b = 3
+ ```
+
+ ```sh
+ 4 is greater than 3
+ ```
+
+1. Çift sayılar 2'ye tam bölünür kalan sıfırdır. Bir sayının çift olup olmadığını veya JavaScript kullanıp kullanmadığını nasıl kontrol edersiniz?
+
+ ```sh
+ Enter a number: 2
+ 2 is an even number
+
+ Enter a number: 9
+ 9 is is an odd number.
+ ```
+
+### Egzersiz: Seviye 2
+
+1. Öğrencilere puanlarına göre not verebilecek bir kod yazın:
+ - 80-100, A
+ - 70-89, B
+ - 60-69, C
+ - 50-59, D
+ - 0-49, F
+1. Mevsimin Sonbahar, Kış, İlkbahar veya Yaz olup olmadığını kontrol edin.
+ Değerler :
+ - Eylül, Ekim veya Kasım, mevsim sonbahardır.
+ - Aralık, Ocak veya Şubat, mevsim kıştır.
+ - Mart, Nisan veya Mayıs mevsimi bahardır
+ - Haziran, Temmuz veya Ağustos, mevsim yazdır
+
+1. Bir günün hafta sonu mu yoksa iş günü mü olduğunu kontrol edin. Komut dosyanız girdi olarak gün alacaktır.
+
+```sh
+ What is the day today? Saturday
+ Saturday is a weekend.
+
+ What is the day today? saturDaY
+ Saturday is a weekend.
+
+ What is the day today? Friday
+ Friday is a working day.
+
+ What is the day today? FrIDAy
+ Friday is a working day.
+ ```
+
+### Egzersiz: Seviye 3
+
+1. Bir aydaki gün sayısını söyleyen bir program yazın.
+
+ ```sh
+ Enter a month: January
+ January has 31 days.
+
+ Enter a month: JANUARY
+ January has 31 day
+
+ Enter a month: February
+ February has 28 days.
+
+ Enter a month: FEbruary
+ February has 28 days.
+ ```
+
+1. Bir aydaki gün sayısını söyleyen bir program yazın, şimdi artık yılı düşünün.
+
+
+🎉 TEBRİKLER ! 🎉
+
+[<< Gün 3](../03_Day_Booleans_operators_date/03_booleans_operators_date.md) | [Gün 5 >>](../05_Day_Arrays/05_day_arrays.md)
diff --git a/Turkish/05_Day_Arrays/05_day_arrays.md b/Turkish/05_Day_Arrays/05_day_arrays.md
new file mode 100644
index 000000000..f17f6141a
--- /dev/null
+++ b/Turkish/05_Day_Arrays/05_day_arrays.md
@@ -0,0 +1,1536 @@
+
+
+
+
+
+
+[<< 5. Gün](../05_Day_Arrays/05_day_arrays.md) | [7. Gün >>](../07_Day_Functions/07_day_functions.md)
+
+
+
+- [📔 6. gün](#-day-6)
+ - [Loops - Döngüler](#loops)
+ - [For Döngüsü](#for-loop---for-döngüsü)
+ - [while Döngüsü](#while-loop---while-döngüsü)
+ - [do while Döngüsü](#do-while-loop-do-while-döngüsü)
+ - [for of Döngüsü](#for-of-loop---for-of-döngüsü)
+ - [break](#break)
+ - [continue](#continue)
+ - [💻 Alıştırmalar - Pratik: 6. Gün](#💻-alıştırma---prtik-6-gün)
+ - [Alıştırmalar - Pratik: 1. Seviye](#pratik-1-seviye)
+ - [Alıştırmalar - Pratik: 2. Seviye](#pratik-2-seviye)
+ - [Alıştırmalar - Pratik: 3. Seviye](#pratik-3-seviye)
+
+# 📔 6. Gün
+
+## Loops - Döngüler
+
+Yazılım kariyerimizde bir çok defa aynı işi tekrar tekrar yapmamız gerekebilir. Basit olarak Console.log() kullanarak 0'den 100'e kadar çıktı yazdırmayı deneyelim. Bu basit uygulamayı gerçekleştirmek bile 2 ila 5 dakika arasında zamanımızı alabilir; bu tür yorucu ve tekrarlayan görevler döngü kullanılarak gerçekleştirilebilir. Videoları izlemeyi tercih ediyorsanız. [video örnekleri](https://www.youtube.com/channel/UCM4xOopkYiPwJqyKsSqL9mw)
+
+Tekrar eden görevleri gerçekleştirmek için programlama dillerinde farklı döngü türleri kullanırız. Aşağıdaki örnekler, JavaScript ve diğer programlama dillerinde yaygın olarak kullanılan döngülerdir.
+
+### for Loop - for Döngüsü
+
+```js
+// For Döngüsünün yapısı
+for(başlangıç_değeri, şart, arttırma/azaltma){
+ // uygulamak istediğimiz kod
+}
+```
+
+```js
+for(let i = 0; i <= 5; i++){
+ console.log(i)
+}
+
+// 0 1 2 3 4 5
+```
+
+```js
+for(let i = 5; i >= 0; i--){
+ console.log(i)
+}
+
+// 5 4 3 2 1 0
+```
+
+```js
+for(let i = 0; i <= 5; i++){
+ console.log(`${i} * ${i} = ${i * i}`)
+}
+```
+
+```sh
+0 * 0 = 0
+1 * 1 = 1
+2 * 2 = 4
+3 * 3 = 9
+4 * 4 = 16
+5 * 5 = 25
+```
+
+```js
+const countries = ['Finland', 'Sweden', 'Denmark', 'Norway', 'Iceland']
+const newArr = []
+for(let i = 0; i < countries.length; i++){
+ newArr.push(countries[i].toUpperCase())
+}
+
+// ["FINLAND", "SWEDEN", "DENMARK", "NORWAY", "ICELAND"]
+```
+
+Dizideki tüm elemanları toplama
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+let sum = 0
+for(let i = 0; i < numbers.length; i++){
+ sum = sum + numbers[i]
+ // daha pratik kullanım için, sum += numbers[i]
+
+}
+
+console.log(sum) // 15
+```
+
+Mevcut diziyi temel alan yeni bir dizi oluşturma
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+const newArr = []
+let sum = 0
+for(let i = 0; i < numbers.length; i++){
+ newArr.push( numbers[i] ** 2)
+
+}
+
+console.log(newArr) // [1, 4, 9, 16, 25]
+```
+
+```js
+const countries = ['Finland', 'Sweden', 'Norway', 'Denmark', 'Iceland']
+const newArr = []
+for(let i = 0; i < countries.length; i++){
+ newArr.push(countries[i].toUpperCase())
+}
+
+console.log(newArr) // ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
+```
+
+### while loop - while Döngüsü
+
+while anahtar kelimesinin yanında belirtilen şarta doğru olduğu sürece çalışan bir döngü türüdür. Eğer koşul sürekli doğru çıkacak şekilde ayarlanırsa while döngüsü uygulama kasten kesilmediği sürece sonsuza kadar devam edebilir. Bu yüzden buraya dikkat etmek gerekebilir.
+
+```js
+let i = 0
+while (i <= 5) {
+ console.log(i)
+ i++
+}
+
+// 0 1 2 3 4 5
+```
+
+### do while loop do while döngüsü
+
+
+do while döngüsü Koşul ile belirtilen alanın doğru olup olmadığına bakmadan kod bloğunu bir kez çalıştırır ve daha sonra Koşul ile belirtilen alan doğru (true) olduğu sürece kod bloğunun çalışması için kullanılır.
+
+```js
+let i = 0
+do {
+ console.log(i)
+ i++
+} while (i <= 5)
+
+// 0 1 2 3 4 5
+```
+
+### for of loop - for of döngüsü
+
+ES6, geleneksel bir döngüden daha basit olan bir döngü olan yeni bir döngü yöntemi sunar ve her tür için ve giriş döngülerinin eksikliklerini telafi eder.
+
+`for..of `Deyimi, yinelenen nesneler üzerinde yinelemek için bir döngü oluşturur. ES6'da tanıtılan `for..of` döngü , yeni yinelemeli protokollerin yerini alır. `for..in` ve `forEach()` destekler. `for..of` Array (Diziler), String (Metinler), Map (Haritalar), Set (Kümeler), Array benzeri nesneler (örneğin arguments veya NodeList), ve diğer yinelenen veri yapıları arasında yineleme yapmanızı sağlar.
+
+```js
+for (const element of arr) {
+ // uygulamak istediğimiz kod
+}
+```
+
+```js
+
+const numbers = [1, 2, 3, 4, 5]
+
+for (const num of numbers) {
+ console.log(num)
+}
+
+// 1 2 3 4 5
+
+for (const num of numbers) {
+ console.log(num * num)
+}
+
+// 1 4 9 16 25
+
+// array içindeki tüm nsayıları toplama
+let sum = 0
+for (const num of numbers) {
+ sum = sum + num
+ // daha pratik kullanım için, sum += num
+ // bundan sonra pratik olan bu syntax türünün kullanacağız(+=, -=, *=, /= etc)
+}
+console.log(sum) // 15
+
+const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+]
+
+for (const tech of webTechs) {
+ console.log(tech.toUpperCase())
+}
+
+// HTML CSS JAVASCRIPT REACT NODE MONGODB
+
+for (const tech of webTechs) {
+ console.log(tech[0]) // her öğenin yalnızca ilk harfini alın, H C J R N M
+}
+
+```
+
+```js
+const countries = ['Finland', 'Sweden', 'Norway', 'Denmark', 'Iceland']
+const newArr = []
+for(const country of countries){
+ newArr.push(country.toUpperCase())
+}
+
+console.log(newArr) // ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
+```
+
+### break
+
+Break, bir döngüyü kesmek için kullanılır.
+
+```js
+for(let i = 0; i <= 5; i++){
+ if(i == 3){
+ break;
+ }
+ console.log(i)
+}
+
+// 0 1 2
+```
+
+ i değeri 3 sayısına eşit olduğunda döngüyü durdurur
+### continue
+
+Belirli bir döngü aşamasını atlamak için `continue` anahtar kelimesi kullanılır.
+
+```js
+for(let i = 0; i <= 5; i++){
+ if(i == 3){
+ continue
+ }
+ console.log(i)
+}
+
+// 0 1 2 4 5
+```
+
+🌕 Adım adım öğrenmeye devam. 6. günü başarıyla bitirdiğmize göre şimdi sıra alıştırma ve pratik yapmada.
+
+## 💻 Alıştırma - Prtik: 6. Gün
+
+### Pratik: 1. seviye
+
+ ```js
+ const countries = [
+ 'Albania',
+ 'Bolivia',
+ 'Canada',
+ 'Denmark',
+ 'Ethiopia',
+ 'Finland',
+ 'Germany',
+ 'Hungary',
+ 'Ireland',
+ 'Japan',
+ 'Kenya'
+ ]
+
+ const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+ ]
+
+ const mernStack = ['MongoDB', 'Express', 'React', 'Node']
+ ```
+
+1. while ve do while kullanarak 0 dan 10'a kadar giden bir döngü kurun.
+2. while ve do while kullanarak 10 dan 0'a kadar giden bir döngü kurun.
+3. 0'dan n' e kadar giden bir for döngüsü kurun.
+4. Console.log() kullanarak aşağıdaki çıktıyı almayı deneyin.
+
+ ```js
+ #
+ ##
+ ###
+ ####
+ #####
+ ######
+ #######
+ ```
+
+5. Aşağıdaki çıktıyı almak için bir döngü kurun:
+
+ ```sh
+ 0 x 0 = 0
+ 1 x 1 = 1
+ 2 x 2 = 4
+ 3 x 3 = 9
+ 4 x 4 = 16
+ 5 x 5 = 25
+ 6 x 6 = 36
+ 7 x 7 = 49
+ 8 x 8 = 64
+ 9 x 9 = 81
+ 10 x 10 = 100
+ ```
+
+6. Aşağıdaki çıktıyı almak için bir döngü kurun:
+
+ ```sh
+ i i^2 i^3
+ 0 0 0
+ 1 1 1
+ 2 4 8
+ 3 9 27
+ 4 16 64
+ 5 25 125
+ 6 36 216
+ 7 49 343
+ 8 64 512
+ 9 81 729
+ 10 100 1000
+ ```
+
+7. 0'dan 100'e kadar olan çift sayıları bir döngü yardımı ile ekrana yazdırın.
+8. 0'dan 100'e kadar olan tek sayıları bir döngü yardımı ile ekrana yazdırın
+9. 0'dan 100'e kadar olan asal sayıları bir döngü yardımı ile ekrana yazdırın
+10. 0 ile 100 arasındaki tüm sayıların toplamını ekrana yazıdırn
+
+ ```sh
+ 0 ile 100 arasındaki sayıların toplamı: 5050.
+ ```
+
+11. 0 ile 100 arasındaki tek ve çift sayıların toplamını bulun
+
+ ```sh
+ Çift sayıların toplamı 2550
+ Tek sayıların toplamı 2500
+ ```
+
+### Pratik: 2. seviye
+
+1. Herhangi bir sayıda rastgele id numarası atayan bir fonksiyon yazın
+
+ ```sh
+ fe3jo1gl124g
+ ```
+
+ ```sh
+ xkqci4utda1lmbelpkm03rba
+ ```
+
+2. Rastgele hexadecimal sayı üreten bir fonksiyon yazın.
+
+ ```sh
+ '#ee33df'
+ ```
+
+3. Rastgele bir rgb renk numarası oluşturan fonksiyon yazın.
+
+ ```sh
+ rgb(240,180,80)
+ ```
+
+ ```sh
+ ["ALBANIA", "BOLIVIA", "CANADA", "DENMARK", "ETHIOPIA", "FINLAND", "GERMANY", "HUNGARY", "IRELAND", "JAPAN", "KENYA"]
+ ```
+
+4. Yukarıdaki array'i kullanarak rastgele yeni bir dizi oluşturun.
+
+5. Yukarıdaki array'i kullanarak ülkelerin harf uzunluklarını içeren bir dizi olşturun'.
+
+ ```sh
+ [7, 7, 6, 7, 8, 7, 7, 7, 7, 5, 5]
+ ```
+
+6. Yukarıdaki diziyi kullanarak aşağıdaki diziyi oluşturun:
+
+ ```sh
+ [
+ ['Albania', 'ALB', 7],
+ ['Bolivia', 'BOL', 7],
+ ['Canada', 'CAN', 6],
+ ['Denmark', 'DEN', 7],
+ ['Ethiopia', 'ETH', 8],
+ ['Finland', 'FIN', 7],
+ ['Germany', 'GER', 7],
+ ['Hungary', 'HUN', 7],
+ ['Ireland', 'IRE', 7],
+ ['Iceland', 'ICE', 7],
+ ['Japan', 'JAP', 5],
+ ['Kenya', 'KEN', 5]
+ ]
+ ```
+
+7. Yukarıdaki ülkeler dizisinde "land" sözcüğünü içeren bir ülke veya ülke olup olmadığını kontrol edin. "land" içeren ülkeler varsa bunu dizi halinde yazdırın.
+
+ ```sh
+ ['Finland','Ireland', 'Iceland']
+ ```
+
+8. Yukarıdaki ülkeler dizisinde "ia" sözcüğünü içeren bir ülke veya ülke olup olmadığını kontrol edin. "ia" içeren ülkeler varsa bunu dizi halinde yazdırın..
+
+ ```sh
+ ['Albania', 'Bolivia','Ethiopia']
+ ```
+
+9. Yukarıdaki ülkeler dizisini kullanarak en fazla karakter içeren ülkeyi bulun.
+
+ ```sh
+ Ethiopia
+ ```
+
+10. Yukarıdaki ülkeler dizisini kullanarak, yalnızca 5 karakter içeren ülkeyi bulun.
+
+ ```sh
+ ['Japan', 'Kenya']
+ ```
+
+
+### Pratik: 3. seviye
+
+1. Countries dizisini kopyalayın(Avoid mutation)
+2. Diziler değişebilir. Dizinin orjinalini değişirmeden bir kopyasını oluşturun. Oluşturduğunuz diziyi alfabetik olarak sıralayın ve sortedCountries dizisine atayın
+3. webTechs dzisini ve mernStack dizisini sıralayın
+4. [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js)inden "land" sözüğü ile biten ülkeleri farklı bir diziye atayın
+5. [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) inden en uzun karakterli ülkeyi bulun
+6. [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) inde 4 karakterli ülkeleri yazdırın
+7. [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) inde iki veya daha fazla kelime içieren ülkeleri farklı bir diziye atayın
+8. [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) i ters çevirin ve ülkelerin tüm harflerini büyük hale gertirin
+
+🎉 Tebrikler ! 🎉
+
+[<< 6. Gün](../05_Day_Arrays/05_day_arrays.md) | [7. Gün >>](../07_Day_Functions/07_day_functions.md)
diff --git a/Turkish/06_Day_Loops_Donguler/06_day_starter/data/countries.js b/Turkish/06_Day_Loops_Donguler/06_day_starter/data/countries.js
new file mode 100644
index 000000000..d0c4ec4b1
--- /dev/null
+++ b/Turkish/06_Day_Loops_Donguler/06_day_starter/data/countries.js
@@ -0,0 +1,195 @@
+const countries = [
+ 'Afghanistan',
+ 'Albania',
+ 'Algeria',
+ 'Andorra',
+ 'Angola',
+ 'Antigua and Barbuda',
+ 'Argentina',
+ 'Armenia',
+ 'Australia',
+ 'Austria',
+ 'Azerbaijan',
+ 'Bahamas',
+ 'Bahrain',
+ 'Bangladesh',
+ 'Barbados',
+ 'Belarus',
+ 'Belgium',
+ 'Belize',
+ 'Benin',
+ 'Bhutan',
+ 'Bolivia',
+ 'Bosnia and Herzegovina',
+ 'Botswana',
+ 'Brazil',
+ 'Brunei',
+ 'Bulgaria',
+ 'Burkina Faso',
+ 'Burundi',
+ 'Cambodia',
+ 'Cameroon',
+ 'Canada',
+ 'Cape Verde',
+ 'Central African Republic',
+ 'Chad',
+ 'Chile',
+ 'China',
+ 'Colombi',
+ 'Comoros',
+ 'Congo (Brazzaville)',
+ 'Congo',
+ 'Costa Rica',
+ "Cote d'Ivoire",
+ 'Croatia',
+ 'Cuba',
+ 'Cyprus',
+ 'Czech Republic',
+ 'Denmark',
+ 'Djibouti',
+ 'Dominica',
+ 'Dominican Republic',
+ 'East Timor (Timor Timur)',
+ 'Ecuador',
+ 'Egypt',
+ 'El Salvador',
+ 'Equatorial Guinea',
+ 'Eritrea',
+ 'Estonia',
+ 'Ethiopia',
+ 'Fiji',
+ 'Finland',
+ 'France',
+ 'Gabon',
+ 'Gambia, The',
+ 'Georgia',
+ 'Germany',
+ 'Ghana',
+ 'Greece',
+ 'Grenada',
+ 'Guatemala',
+ 'Guinea',
+ 'Guinea-Bissau',
+ 'Guyana',
+ 'Haiti',
+ 'Honduras',
+ 'Hungary',
+ 'Iceland',
+ 'India',
+ 'Indonesia',
+ 'Iran',
+ 'Iraq',
+ 'Ireland',
+ 'Israel',
+ 'Italy',
+ 'Jamaica',
+ 'Japan',
+ 'Jordan',
+ 'Kazakhstan',
+ 'Kenya',
+ 'Kiribati',
+ 'Korea, North',
+ 'Korea, South',
+ 'Kuwait',
+ 'Kyrgyzstan',
+ 'Laos',
+ 'Latvia',
+ 'Lebanon',
+ 'Lesotho',
+ 'Liberia',
+ 'Libya',
+ 'Liechtenstein',
+ 'Lithuania',
+ 'Luxembourg',
+ 'Macedonia',
+ 'Madagascar',
+ 'Malawi',
+ 'Malaysia',
+ 'Maldives',
+ 'Mali',
+ 'Malta',
+ 'Marshall Islands',
+ 'Mauritania',
+ 'Mauritius',
+ 'Mexico',
+ 'Micronesia',
+ 'Moldova',
+ 'Monaco',
+ 'Mongolia',
+ 'Morocco',
+ 'Mozambique',
+ 'Myanmar',
+ 'Namibia',
+ 'Nauru',
+ 'Nepal',
+ 'Netherlands',
+ 'New Zealand',
+ 'Nicaragua',
+ 'Niger',
+ 'Nigeria',
+ 'Norway',
+ 'Oman',
+ 'Pakistan',
+ 'Palau',
+ 'Panama',
+ 'Papua New Guinea',
+ 'Paraguay',
+ 'Peru',
+ 'Philippines',
+ 'Poland',
+ 'Portugal',
+ 'Qatar',
+ 'Romania',
+ 'Russia',
+ 'Rwanda',
+ 'Saint Kitts and Nevis',
+ 'Saint Lucia',
+ 'Saint Vincent',
+ 'Samoa',
+ 'San Marino',
+ 'Sao Tome and Principe',
+ 'Saudi Arabia',
+ 'Senegal',
+ 'Serbia and Montenegro',
+ 'Seychelles',
+ 'Sierra Leone',
+ 'Singapore',
+ 'Slovakia',
+ 'Slovenia',
+ 'Solomon Islands',
+ 'Somalia',
+ 'South Africa',
+ 'Spain',
+ 'Sri Lanka',
+ 'Sudan',
+ 'Suriname',
+ 'Swaziland',
+ 'Sweden',
+ 'Switzerland',
+ 'Syria',
+ 'Taiwan',
+ 'Tajikistan',
+ 'Tanzania',
+ 'Thailand',
+ 'Togo',
+ 'Tonga',
+ 'Trinidad and Tobago',
+ 'Tunisia',
+ 'Turkey',
+ 'Turkmenistan',
+ 'Tuvalu',
+ 'Uganda',
+ 'Ukraine',
+ 'United Arab Emirates',
+ 'United Kingdom',
+ 'United States',
+ 'Uruguay',
+ 'Uzbekistan',
+ 'Vanuatu',
+ 'Vatican City',
+ 'Venezuela',
+ 'Vietnam',
+ 'Yemen',
+ 'Zambia',
+ 'Zimbabwe'
+]
diff --git a/Turkish/06_Day_Loops_Donguler/06_day_starter/index.html b/Turkish/06_Day_Loops_Donguler/06_day_starter/index.html
new file mode 100644
index 000000000..2b6cbabfe
--- /dev/null
+++ b/Turkish/06_Day_Loops_Donguler/06_day_starter/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+ 30DaysOfJavaScript:06 Day
+
+
+
+
30DaysOfJavaScript:06 Day
+
Loops
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Turkish/06_Day_Loops_Donguler/06_day_starter/scripts/main.js b/Turkish/06_Day_Loops_Donguler/06_day_starter/scripts/main.js
new file mode 100644
index 000000000..421fb87a4
--- /dev/null
+++ b/Turkish/06_Day_Loops_Donguler/06_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/Turkish/07_Day_Functions/07_day_functions.md b/Turkish/07_Day_Functions/07_day_functions.md
new file mode 100644
index 000000000..74e185863
--- /dev/null
+++ b/Turkish/07_Day_Functions/07_day_functions.md
@@ -0,0 +1,717 @@
+
+
+[<< 6. Gün](../06_Day_Loops_Donguler/06_day_loops.md) | [8. Gün >>](../08_Day_Objects/08_day_objects.md)
+
+
+
+- [📔 7. Gün](#-day-7)
+ - [Functions - Fonksiyonlar](#functions---fonksiyonlar)
+ - [Klasik fonksiyon Tanımlama](#klasik-fonksiyon-tanımlama)
+ - [Anonymous Function - İsimsiz fonksiyon](#anonymous-function---i̇simsiz-fonksiyon)
+ - [Expression Function](#expression-function)
+ - [Parametresiz ve dönüş değeri olmayan fonksiyon](#parametresiz-ve-dönüş-değeri-olamayan-fonksiyon)
+ - [Fonksiyonlarda return kullanımı](#bir-değer-döndüren-fonksiyon)
+ - [Bir parametreli fonksiyon](#parametreli-fonksiyon)
+ - [İki parametreli fonksiyon](#i̇ki-parametreli-fonksiyon)
+ - [Çok parametreli fonksiyon](#çok-parametreli-fonksiyon)
+ - [Sınırsız sayıda parametreyle çalışan fonksiyon](#sınırsız-sayıda-parametreyle-çalışan-fonksiyon)
+ - [Klasik fonksiyonda sınırsız sayıda parametre](#klasik-fonksiyonda-sınırsız-sayıda-parametre)
+ - [Kendi kendine çağırılan fonksiyon - Self Invokinf function](#kendi-kendine-çağırılan-fonksiyon)
+ - [Arrow Function](#arrow-function)
+ - [Arrow function'da sınırsız sayıda parametre](#arrow-functionda-sınırsız-sayıda-parametre)
+ - [Default parametre ile fonksiyon kullanımı](#default-parametre-ile-fonksiyon-kullanımı)
+ - [Function declaration versus Arrow function](#function-declaration-versus-arrow-function)
+ - [💻 Exercises](#-exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
+
+# 📔 7. Gün
+
+## Functions - Fonksiyonlar
+
+
+Şimdiye kadar birçok JavaScript fonksiyonu yazdık. Bu bölümde, custom fonksiyonlara odaklanacağız. Fonksiyon yazmaya başlamadan önce, fonksiyonun ne olduğunu ve neden fonksiyona ihtiyacımız olduğunu bakalım.
+
+Bir fonksiyon, belirli bir görevi gerçekleştirmek üzere tasarlanmış ve yeniden kullanılabilir bir kod bloğu veya programlama tanımıdır.
+
+Bir fonksiyon, `function` anahtar kelimesi ardından gelen o fonksiyona ait fonksiyon ismi ve parantezler ile tanımlanır. Bu paranteler fonksiyona parametre atayabilmemizi sağlar. Şayet fonksiyon parametre alırsa bu parametre fonksiyon scope'u içerisinde geçerli olan bir değişkendir. Farklı bir kullanım olarak da bu parametreye default değerler atayabiliriz. Eğer bir fonksiyon yardımı ile veri taşımak istiyorsak söz konusu fonksiyonun belirli bir veri türünü geriye değişken olarak döndürmesi gerekir. Daha sonra dönen bu değişkeni bir başka değişkene atayarak kullanabilir.
+
+Fonksiyon kullanmanın avantajları:
+
+- temiz ve okunması kolay
+- yeniden kullanılabilir
+- kolay test edilir
+
+Bir fonksiyon birkaç şekilde tanımlanabilir:
+
+- _Klasik Declaration function_
+- _Expression function_
+- _Anonymous function_
+- _Arrow function_
+
+### Klasik Fonksiyon Tanımlama
+
+Bir fonksiyonun nasıl tanımlanacağını ve çağırılacağını görelim.
+
+```js
+//parametresiz fonksiyon tanımıı
+function functionName() {
+ // istenilen kod parçası
+}
+functionName() // fonksiyon, fonksiyon adı ve parantezler ile çağırılır
+```
+
+### Anonymous Function - İsimsiz Fonksiyon
+
+
+```js
+const anonymousFun = function() {
+ console.log(
+ 'İsimsiz bir fonksiyonum ve değerim anonim olarak saklanıyor'
+ )
+}
+```
+
+### Expression Function
+
+
+Expression function, isimsiz fonksiyonlardır. İsimsiz bir fonksiyon oluşturduktan sonra bir değişkene atayarak kullanırız. Fonksiyondan bir değer geri döndürmek için değişkeni çağırmalıyız. Örnek vemrek gerekirse.
+
+```js
+
+// Function expression
+const square = function() {
+ console.log("Bu bir expression function türünde fonksiyondur")
+}
+
+```
+
+### Parametresiz ve dönüş değeri olamayan fonksiyon
+
+Fonksiyon, parametre olmadan tanımlanabilir. (Şu ana kadar tanımladıklarımız zaten parametresizdi)
+
+**Example:**
+
+```js
+function square() {
+ let num = 2
+ let square = num * num
+ console.log(square)
+}
+
+square() // 4
+
+// parametresiz fonksiyon örnek 2:
+function addTwoNumbers() {
+ let numOne = 10
+ let numTwo = 20
+ let sum = numOne + numTwo
+
+ console.log(sum)
+}
+
+addTwoNumbers() // fonksiyon, kendisine verilen isim ile çağırılmalı
+```
+
+```js
+ function printFullName (){
+ let firstName = 'Asabeneh'
+ let lastName = 'Yetayeh'
+ let space = ' '
+ let fullName = firstName + space + lastName
+ console.log(fullName)
+}
+
+printFullName() // fonksiyon çağırımına bir örnek
+```
+
+### Bir değer döndüren fonksiyon
+
+Fonksiyonlar geriye bir değer döndürebilir. bu işlemi `return` anahtar kelimesini kullanarak sağlarız. Normal fonksiyondan farklı olarak bir field'a atanabilir veya bir metot içerisinde parametre olarak kullanılabilir.
+
+```js
+function printFullName (){
+ let firstName = 'Asabeneh'
+ let lastName = 'Yetayeh'
+ let space = ' '
+ let fullName = firstName + space + lastName
+ return fullName
+}
+console.log(printFullName())
+```
+
+```js
+
+ function addTwoNumbers() {
+ let numOne = 2
+ let numTwo = 3
+ let total = numOne + numTwo
+ return total
+
+ }
+
+console.log(addTwoNumbers())
+```
+
+### Parametreli fonksiyon
+
+Bir fonksiyonda farklı veri türlerini (number, string, boolean, object, function) parametre olarak geçebiliriz.
+
+```js
+// bir parametreli fonksiyon
+function functionName(parm1) {
+ // istenilen kod parçası
+}
+functionName(parm1) // fonksiyonu çağırma sırasında parantezler arasına bir parametreye ihtiyaç duyar
+
+function areaOfCircle(r) {
+ let area = Math.PI * r * r
+ return area
+}
+
+console.log(areaOfCircle(10)) // bağımsız bir değişkenle çağırılmalı
+
+function square(number) {
+ return number * number
+}
+
+console.log(square(10))
+```
+
+### İki parametreli fonksiyon
+
+```js
+// iki parametreli fonksiyon
+function functionName(parm1, parm2) {
+ //istenilen kod parçası
+}
+functionName(parm1, parm2) //fonksiyonu çağırma sırasında parantezler arasında iki tane parametreye ihtiyaç duyar
+
+// Parametresiz fonksiyon giriş yapmaz, bu nedenle parametrelerle bir fonksiyon yapalım
+function sumTwoNumbers(numOne, numTwo) {
+ let sum = numOne + numTwo
+ console.log(sum)
+}
+sumTwoNumbers(10, 20) // fonksiyon çağırımı
+// Bir fonksiyon değer döndürmezse veri depolayamaz, bu nedenle değer döndürmelidir.
+
+function sumTwoNumbers(numOne, numTwo) {
+ let sum = numOne + numTwo
+ return sum
+}
+
+console.log(sumTwoNumbers(10, 20))
+function printFullName(firstName, lastName) {
+ return `${firstName} ${lastName}`
+}
+console.log(printFullName('Asabeneh', 'Yetayeh'))
+```
+
+### Çok parametreli fonksiyon
+
+```js
+// çok parametreli fonksiyon
+function functionName(parm1, parm2, parm3,...){
+ //istenilen kod parçası
+}
+functionName(parm1,parm2,parm3,...) // fonksiyon çağırımı sırasında birden çok parametreye ihtiyaç duyar
+
+
+// bu fonksiyon, bir diziyi parametre olarak alır ve dizideki sayıları toplar
+function sumArrayValues(arr) {
+ let sum = 0;
+ for (let i = 0; i < arr.length; i++) {
+ sum = sum + arr[i];
+ }
+ return sum;
+}
+const numbers = [1, 2, 3, 4, 5];
+ //fonksiyon çağırımı
+console.log(sumArrayValues(numbers));
+
+
+ const areaOfCircle = (radius) => {
+ let area = Math.PI * radius * radius;
+ return area;
+ }
+console.log(areaOfCircle(10))
+
+```
+
+### Sınırsız sayıda parametreyle çalışan fonksiyon
+
+Fonksiyonlarla çalışırken kaç tane parametre gerekebileceğini bilemeyebiliriz. Javascript'te bu durumda bize sınırsız sayıda parametre alan fonksiyon yazabilme imkanı tanır. Bu şekilde bir fonksiyon tanımlamanın iki yolu vardır.
+
+#### Klasik fonksiyonda sınırsız sayıda parametre
+
+ A function declaration provides a function scoped arguments array like object. Any thing we passed as argument in the function can be accessed from arguments object inside the functions. Let us see an example
+
+ Bu fonksiyonun tanımlanmasını fonksiyon scope'nda object temelli arguments anahtar kelimesi ile erişilir. Parametre olarak atanan her öğeye arguments üzerinden ulaşabiliriz. Bir örneğine bakmak gerekirse;
+
+ ```js
+// arguments nesnesine erişelim
+
+function sumAllNums() {
+ console.log(arguments)
+}
+
+sumAllNums(1, 2, 3, 4)
+// Arguments(4) [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]
+
+```
+
+```js
+// fonksiyon tanımı
+
+function sumAllNums() {
+ let sum = 0
+ for (let i = 0; i < arguments.length; i++) {
+ sum += arguments[i]
+ }
+ return sum
+}
+
+console.log(sumAllNums(1, 2, 3, 4)) // 10
+console.log(sumAllNums(10, 20, 13, 40, 10)) // 93
+console.log(sumAllNums(15, 20, 30, 25, 10, 33, 40)) // 173
+```
+
+> Arrow function'da sınırsız sayıda parametre konusunu Arraw fonksiyonu gördükten sonra görebilirsiniz.
+
+
+### Kendi kendine çağırılan fonksiyon
+
+JavaScript sözdiziminde birçok ilginç şey vardır, bunlardan biri kendi kendine çalışan (kendi kendini çağıran) fonksiyonların tanımıdır. Böyle bir fonksiyonu şu şekilde tanımlayabiliriz:
+
+```js
+(function(n) {
+ console.log(n * n)
+})(2) // 4, but instead of just printing if we want to return and store the data, we do as shown below
+
+let squaredNum = (function(n) {
+ return n * n
+})(10)
+
+console.log(squaredNum)
+```
+
+Yukarıdaki fonksiyon, tanımlandıktan hemen sonra çağrılır. Kendi kendini çağıran işlevlerin yararı, global ad alanını karıştırmadan (herhangi bir global bildirmeden) kodu bir kez yürütmemize olanak vermeleridir.
+
+### Arrow Function
+
+Klasik fonksiyona alternatif olarak kullanılan arrow function sözdiziminde ufak bir farklılık vardır. `function` anahtar kelimesi yerine `=>` işareti kullanılır.
+
+Sırasıyla aynı fonksiyonun klasik ve arrow function halini yazalım
+
+```js
+function square(n) {
+ return n * n
+}
+
+console.log(square(2)) // 4
+
+const square = n => {
+ return n * n
+}
+
+console.log(square(2)) // -> 4
+
+// kod bloğumuzda sadece bir satır kod varsa bu fonksiyon şu şekilde yazılabilir.
+const square = n => n * n // -> 4
+```
+
+```js
+const changeToUpperCase = arr => {
+ const newArr = []
+ for (const element of arr) {
+ newArr.push(element.toUpperCase())
+ }
+ return newArr
+}
+
+const countries = ['Finland', 'Sweden', 'Norway', 'Denmark', 'Iceland']
+console.log(changeToUpperCase(countries))
+
+// ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
+```
+
+```js
+const printFullName = (firstName, lastName) => {
+ return `${firstName} ${lastName}`
+}
+
+console.log(printFullName('Asabeneh', 'Yetayeh'))
+```
+
+Yukarıdaki fonksiyon yalnızca geri dönüş ifadesine sahiptir, bu nedenle bunu aşağıdaki şekilde açıkça iade edebiliriz.
+```js
+const printFullName = (firstName, lastName) => `${firstName} ${lastName}`
+
+console.log(printFullName('Asabeneh', 'Yetayeh'))
+```
+
+#### Arrow function'da sınırsız sayıda parametre
+
+ Arrow function, klasik fonksiyon gibi arguments nesnesine sahip değildir. Arrow function'da sınırsız sayıda parametre kullanmak istersek spread operatör (...) ve hemen ardından parametre adı kullanılır. Fonksiyonda bağımsız değişken olarak geçtiğimiz her şeye arrow functionda dizi olarak erişilebilir. Bir örnek görelim
+
+ ```js
+// arguments nesnesine erişmemize bir örnek
+
+const sumAllNums = (...args) => {
+ // console.log(arguments), arguments nesnesi bulunamadı
+ // bunun yerine spread operator (...) ve parametre adı kullanalım
+ console.log(args)
+}
+
+sumAllNums(1, 2, 3, 4)
+// [1, 2, 3, 4]
+
+```
+
+```js
+// function declaration
+
+const sumAllNums = (...args) => {
+ let sum = 0
+ for (const element of args) {
+ sum += element
+ }
+ return sum
+}
+
+console.log(sumAllNums(1, 2, 3, 4)) // 10
+console.log(sumAllNums(10, 20, 13, 40, 10)) // 93
+console.log(sumAllNums(15, 20, 30, 25, 10, 33, 40)) // 173
+```
+
+### Default parametre ile fonksiyon kullanımı
+
+
+Bazen parametrelere default değerler geçmek isteyebiliriz. Bu durumda fonksiyon çağırımı sırasında söz konusu parametreyi vermek zorunda olmadan kullanabiliriz. Eğer bu parametreyi vermezsek fonksiyon işlevinin parametrenin default değerini kullanarak tamamlayacaktır.
+
+```js
+// syntax - söz dizimi
+// fonksiyon tanımı
+function functionName(param = value) {
+ //codes
+}
+
+// fonksiyon çağırımı
+functionName()
+functionName(arg)
+```
+
+**Example:**
+
+```js
+function greetings(name = 'Peter') {
+ let message = `${name}, welcome to 30 Days Of JavaScript!`
+ return message
+}
+
+console.log(greetings())
+console.log(greetings('Asabeneh'))
+```
+
+```js
+function generateFullName(firstName = 'Asabeneh', lastName = 'Yetayeh') {
+ let space = ' '
+ let fullName = firstName + space + lastName
+ return fullName
+}
+
+console.log(generateFullName())
+console.log(generateFullName('David', 'Smith'))
+```
+
+```js
+function calculateAge(birthYear, currentYear = 2019) {
+ let age = currentYear - birthYear
+ return age
+}
+
+console.log('Age: ', calculateAge(1819))
+```
+
+```js
+function weightOfObject(mass, gravity = 9.81) {
+ let weight = mass * gravity + ' N' // değer önce dize olarak değiştirilmelidir
+ return weight
+}
+
+console.log('Weight of an object in Newton: ', weightOfObject(100)) // 9.81 Dünya yüzeyinde yerçekimi
+console.log('Weight of an object in Newton: ', weightOfObject(100, 1.62)) // Ay yüzeyinde yerçekimi
+```
+
+Yukarıdaki fonksiyonları bir de arrow function kullanarak tanımlayalım
+
+```js
+// syntax - söz dizimi
+// fonksiyonu tanımlama
+const functionName = (param = value) => {
+ //codes
+}
+
+// fonksiyonu çağırma
+functionName()
+functionName(arg)
+```
+
+**Example:**
+
+```js
+const greetings = (name = 'Peter') => {
+ let message = name + ', welcome to 30 Days Of JavaScript!'
+ return message
+}
+
+console.log(greetings())
+console.log(greetings('Asabeneh'))
+```
+
+```js
+const generateFullName = (firstName = 'Asabeneh', lastName = 'Yetayeh') => {
+ let space = ' '
+ let fullName = firstName + space + lastName
+ return fullName
+}
+
+console.log(generateFullName())
+console.log(generateFullName('David', 'Smith'))
+```
+
+```js
+
+const calculateAge = (birthYear, currentYear = 2019) => currentYear - birthYear
+console.log('Age: ', calculateAge(1819))
+```
+
+```js
+const weightOfObject = (mass, gravity = 9.81) => mass * gravity + ' N'
+
+console.log('Weight of an object in Newton: ', weightOfObject(100)) // 9.81 Dünya yüzeyinde yerçekimi
+console.log('Weight of an object in Newton: ', weightOfObject(100, 1.62)) // Ay yüzeyinde yerçekimi
+```
+
+### Function declaration versus Arrow function
+
+Diğer bölümde ele alınacaktır.
+
+🌕 Serinin 7. gününü de başarıyla tamamladın. Durmak yok yola devam
+
+
+
+## 💻 Exercises
+
+### Exercises: Level 1
+
+1. Declare a function _fullName_ and it print out your full name.
+2. Declare a function _fullName_ and now it takes firstName, lastName as a parameter and it returns your full - name.
+3. Declare a function _addNumbers_ and it takes two two parameters and it returns sum.
+4. An area of a rectangle is calculated as follows: _area = length x width_. Write a function which calculates _areaOfRectangle_.
+5. A perimeter of a rectangle is calculated as follows: _perimeter= 2x(length + width)_. Write a function which calculates _perimeterOfRectangle_.
+6. A volume of a rectangular prism is calculated as follows: _volume = length x width x height_. Write a function which calculates _volumeOfRectPrism_.
+7. Area of a circle is calculated as follows: _area = π x r x r_. Write a function which calculates _areaOfCircle_
+8. Circumference of a circle is calculated as follows: _circumference = 2πr_. Write a function which calculates _circumOfCircle_
+9. Density of a substance is calculated as follows:_density= mass/volume_. Write a function which calculates _density_.
+10. Speed is calculated by dividing the total distance covered by a moving object divided by the total amount of time taken. Write a function which calculates a speed of a moving object, _speed_.
+11. Weight of a substance is calculated as follows: _weight = mass x gravity_. Write a function which calculates _weight_.
+12. Temperature in oC can be converted to oF using this formula: _oF = (oC x 9/5) + 32_. Write a function which convert oC to oF _convertCelsiusToFahrenheit_.
+13. Body mass index(BMI) is calculated as follows: _bmi = weight in Kg / (height x height) in m2_. Write a function which calculates _bmi_. BMI is used to broadly define different weight groups in adults 20 years old or older.Check if a person is _underweight, normal, overweight_ or _obese_ based the information given below.
+
+ - The same groups apply to both men and women.
+ - _Underweight_: BMI is less than 18.5
+ - _Normal weight_: BMI is 18.5 to 24.9
+ - _Overweight_: BMI is 25 to 29.9
+ - _Obese_: BMI is 30 or more
+
+14. Write a function called _checkSeason_, it takes a month parameter and returns the season:Autumn, Winter, Spring or Summer.
+15. Math.max returns its largest argument. Write a function findMax that takes three arguments and returns their maximum with out using Math.max method.
+
+ ```js
+ console.log(findMax(0, 10, 5))
+ 10
+ console.log(findMax(0, -10, -2))
+ 0
+ ```
+
+### Exercises: Level 2
+
+1. Linear equation is calculated as follows: _ax + by + c = 0_. Write a function which calculates value of a linear equation, _solveLinEquation_.
+1. Quadratic equation is calculated as follows: _ax2 + bx + c = 0_. Write a function which calculates value or values of a quadratic equation, _solveQuadEquation_.
+
+ ```js
+ console.log(solveQuadratic()) // {0}
+ console.log(solveQuadratic(1, 4, 4)) // {-2}
+ console.log(solveQuadratic(1, -1, -2)) // {2, -1}
+ console.log(solveQuadratic(1, 7, 12)) // {-3, -4}
+ console.log(solveQuadratic(1, 0, -4)) //{2, -2}
+ console.log(solveQuadratic(1, -1, 0)) //{1, 0}
+ ```
+
+1. Declare a function name _printArray_. It takes array as a parameter and it prints out each value of the array.
+1. Write a function name _showDateTime_ which shows time in this format: 08/01/2020 04:08 using the Date object.
+
+ ```sh
+ showDateTime()
+ 08/01/2020 04:08
+ ```
+
+1. Declare a function name _swapValues_. This function swaps value of x to y.
+
+ ```js
+ swapValues(3, 4) // x => 4, y=>3
+ swapValues(4, 5) // x = 5, y = 4
+ ```
+
+1. Declare a function name _reverseArray_. It takes array as a parameter and it returns the reverse of the array (don't use method).
+
+ ```js
+ console.log(reverseArray([1, 2, 3, 4, 5]))
+ //[5, 4, 3, 2, 1]
+ console.log(reverseArray(['A', 'B', 'C']))
+ //['C', 'B', 'A']
+ ```
+
+1. Declare a function name _capitalizeArray_. It takes array as a parameter and it returns the - capitalizedarray.
+1. Declare a function name _addItem_. It takes an item parameter and it returns an array after adding the item
+1. Declare a function name _removeItem_. It takes an index parameter and it returns an array after removing an item
+1. Declare a function name _sumOfNumbers_. It takes a number parameter and it adds all the numbers in that range.
+1. Declare a function name _sumOfOdds_. It takes a number parameter and it adds all the odd numbers in that - range.
+1. Declare a function name _sumOfEven_. It takes a number parameter and it adds all the even numbers in that - range.
+1. Declare a function name evensAndOdds . It takes a positive integer as parameter and it counts number of evens and odds in the number.
+
+ ```sh
+ evensAndOdds(100);
+ The number of odds are 50.
+ The number of evens are 51.
+ ```
+
+1. Write a function which takes any number of arguments and return the sum of the arguments
+
+ ```js
+ sum(1, 2, 3) // -> 6
+ sum(1, 2, 3, 4) // -> 10
+ ```
+
+1. Writ a function which generates a _randomUserIp_.
+1. Write a function which generates a _randomMacAddress_
+1. Declare a function name _randomHexaNumberGenerator_. When this function is called it generates a random hexadecimal number. The function return the hexadecimal number.
+
+ ```sh
+ console.log(randomHexaNumberGenerator());
+ '#ee33df'
+ ```
+
+1. Declare a function name _userIdGenerator_. When this function is called it generates seven character id. The function return the id.
+
+ ```sh
+ console.log(userIdGenerator());
+ 41XTDbE
+ ```
+
+### Exercises: Level 3
+
+1. Modify the _userIdGenerator_ function. Declare a function name _userIdGeneratedByUser_. It doesn’t take any parameter but it takes two inputs using prompt(). One of the input is the number of characters and the second input is the number of ids which are supposed to be generated.
+
+ ```sh
+ userIdGeneratedByUser()
+ 'kcsy2
+ SMFYb
+ bWmeq
+ ZXOYh
+ 2Rgxf
+ '
+ userIdGeneratedByUser()
+ '1GCSgPLMaBAVQZ26
+ YD7eFwNQKNs7qXaT
+ ycArC5yrRupyG00S
+ UbGxOFI7UXSWAyKN
+ dIV0SSUTgAdKwStr
+ '
+ ```
+
+1. Write a function name _rgbColorGenerator_ and it generates rgb colors.
+
+ ```sh
+ rgbColorGenerator()
+ rgb(125,244,255)
+ ```
+
+1. Write a function **_arrayOfHexaColors_** which return any number of hexadecimal colors in an array.
+1. Write a function **_arrayOfRgbColors_** which return any number of RGB colors in an array.
+1. Write a function **_convertHexaToRgb_** which converts hexa color to rgb and it returns an rgb color.
+1. Write a function **_convertRgbToHexa_** which converts rgb to hexa color and it returns an hexa color.
+1. Write a function **_generateColors_** which can generate any number of hexa or rgb colors.
+
+ ```js
+ console.log(generateColors('hexa', 3)) // ['#a3e12f', '#03ed55', '#eb3d2b']
+ console.log(generateColors('hexa', 1)) // '#b334ef'
+ console.log(generateColors('rgb', 3)) // ['rgb(5, 55, 175)', 'rgb(50, 105, 100)', 'rgb(15, 26, 80)']
+ console.log(generateColors('rgb', 1)) // 'rgb(33,79, 176)'
+ ```
+
+1. Call your function _shuffleArray_, it takes an array as a parameter and it returns a shuffled array
+1. Call your function _factorial_, it takes a whole number as a parameter and it return a factorial of the number
+1. Call your function _isEmpty_, it takes a parameter and it checks if it is empty or not
+1. Call your function _sum_, it takes any number of arguments and it returns the sum.
+1. Write a function called _sumOfArrayItems_, it takes an array parameter and return the sum of all the items. Check if all the array items are number types. If not give return reasonable feedback.
+1. Write a function called _average_, it takes an array parameter and returns the average of the items. Check if all the array items are number types. If not give return reasonable feedback.
+1. Write a function called _modifyArray_ takes array as parameter and modifies the fifth item of the array and return the array. If the array length is less than five it return 'item not found'.
+
+ ```js
+ console.log(modifyArray(['Avocado', 'Tomato', 'Potato','Mango', 'Lemon','Carrot']);
+ ```
+
+ ```sh
+ ['Avocado', 'Tomato', 'Potato','Mango', 'LEMON', 'Carrot']
+ ```
+
+ ```js
+ console.log(modifyArray(['Google', 'Facebook','Apple', 'Amazon','Microsoft', 'IBM']);
+ ```
+
+ ```sh
+ ['Google', 'Facebook','Apple', 'Amazon','MICROSOFT', 'IBM']
+ ```
+
+ ```js
+ console.log(modifyArray(['Google', 'Facebook','Apple', 'Amazon']);
+ ```
+
+ ```sh
+ 'Not Found'
+ ```
+
+1. Write a function called _isPrime_, which checks if a number is prime number.
+1. Write a functions which checks if all items are unique in the array.
+1. Write a function which checks if all the items of the array are the same data type.
+1. JavaScript variable name does not support special characters or symbols except \$ or \_. Write a function **isValidVariable** which check if a variable is valid or invalid variable.
+1. Write a function which returns array of seven random numbers in a range of 0-9. All the numbers must be unique.
+
+ ```js
+ sevenRandomNumbers()
+ [(1, 4, 5, 7, 9, 8, 0)]
+ ```
+
+1. Write a function called reverseCountries, it takes countries array and first it copy the array and returns the reverse of the original array
+
+🎉 CONGRATULATIONS ! 🎉
+
+[<< Day 6](../06_Day_Loops/06_day_loops.md) | [Day 8 >>](../08_Day_Objects/08_day_objects.md)
diff --git a/Turkish/07_Day_Functions/07_day_starter/data/countries.js b/Turkish/07_Day_Functions/07_day_starter/data/countries.js
new file mode 100644
index 000000000..d0c4ec4b1
--- /dev/null
+++ b/Turkish/07_Day_Functions/07_day_starter/data/countries.js
@@ -0,0 +1,195 @@
+const countries = [
+ 'Afghanistan',
+ 'Albania',
+ 'Algeria',
+ 'Andorra',
+ 'Angola',
+ 'Antigua and Barbuda',
+ 'Argentina',
+ 'Armenia',
+ 'Australia',
+ 'Austria',
+ 'Azerbaijan',
+ 'Bahamas',
+ 'Bahrain',
+ 'Bangladesh',
+ 'Barbados',
+ 'Belarus',
+ 'Belgium',
+ 'Belize',
+ 'Benin',
+ 'Bhutan',
+ 'Bolivia',
+ 'Bosnia and Herzegovina',
+ 'Botswana',
+ 'Brazil',
+ 'Brunei',
+ 'Bulgaria',
+ 'Burkina Faso',
+ 'Burundi',
+ 'Cambodia',
+ 'Cameroon',
+ 'Canada',
+ 'Cape Verde',
+ 'Central African Republic',
+ 'Chad',
+ 'Chile',
+ 'China',
+ 'Colombi',
+ 'Comoros',
+ 'Congo (Brazzaville)',
+ 'Congo',
+ 'Costa Rica',
+ "Cote d'Ivoire",
+ 'Croatia',
+ 'Cuba',
+ 'Cyprus',
+ 'Czech Republic',
+ 'Denmark',
+ 'Djibouti',
+ 'Dominica',
+ 'Dominican Republic',
+ 'East Timor (Timor Timur)',
+ 'Ecuador',
+ 'Egypt',
+ 'El Salvador',
+ 'Equatorial Guinea',
+ 'Eritrea',
+ 'Estonia',
+ 'Ethiopia',
+ 'Fiji',
+ 'Finland',
+ 'France',
+ 'Gabon',
+ 'Gambia, The',
+ 'Georgia',
+ 'Germany',
+ 'Ghana',
+ 'Greece',
+ 'Grenada',
+ 'Guatemala',
+ 'Guinea',
+ 'Guinea-Bissau',
+ 'Guyana',
+ 'Haiti',
+ 'Honduras',
+ 'Hungary',
+ 'Iceland',
+ 'India',
+ 'Indonesia',
+ 'Iran',
+ 'Iraq',
+ 'Ireland',
+ 'Israel',
+ 'Italy',
+ 'Jamaica',
+ 'Japan',
+ 'Jordan',
+ 'Kazakhstan',
+ 'Kenya',
+ 'Kiribati',
+ 'Korea, North',
+ 'Korea, South',
+ 'Kuwait',
+ 'Kyrgyzstan',
+ 'Laos',
+ 'Latvia',
+ 'Lebanon',
+ 'Lesotho',
+ 'Liberia',
+ 'Libya',
+ 'Liechtenstein',
+ 'Lithuania',
+ 'Luxembourg',
+ 'Macedonia',
+ 'Madagascar',
+ 'Malawi',
+ 'Malaysia',
+ 'Maldives',
+ 'Mali',
+ 'Malta',
+ 'Marshall Islands',
+ 'Mauritania',
+ 'Mauritius',
+ 'Mexico',
+ 'Micronesia',
+ 'Moldova',
+ 'Monaco',
+ 'Mongolia',
+ 'Morocco',
+ 'Mozambique',
+ 'Myanmar',
+ 'Namibia',
+ 'Nauru',
+ 'Nepal',
+ 'Netherlands',
+ 'New Zealand',
+ 'Nicaragua',
+ 'Niger',
+ 'Nigeria',
+ 'Norway',
+ 'Oman',
+ 'Pakistan',
+ 'Palau',
+ 'Panama',
+ 'Papua New Guinea',
+ 'Paraguay',
+ 'Peru',
+ 'Philippines',
+ 'Poland',
+ 'Portugal',
+ 'Qatar',
+ 'Romania',
+ 'Russia',
+ 'Rwanda',
+ 'Saint Kitts and Nevis',
+ 'Saint Lucia',
+ 'Saint Vincent',
+ 'Samoa',
+ 'San Marino',
+ 'Sao Tome and Principe',
+ 'Saudi Arabia',
+ 'Senegal',
+ 'Serbia and Montenegro',
+ 'Seychelles',
+ 'Sierra Leone',
+ 'Singapore',
+ 'Slovakia',
+ 'Slovenia',
+ 'Solomon Islands',
+ 'Somalia',
+ 'South Africa',
+ 'Spain',
+ 'Sri Lanka',
+ 'Sudan',
+ 'Suriname',
+ 'Swaziland',
+ 'Sweden',
+ 'Switzerland',
+ 'Syria',
+ 'Taiwan',
+ 'Tajikistan',
+ 'Tanzania',
+ 'Thailand',
+ 'Togo',
+ 'Tonga',
+ 'Trinidad and Tobago',
+ 'Tunisia',
+ 'Turkey',
+ 'Turkmenistan',
+ 'Tuvalu',
+ 'Uganda',
+ 'Ukraine',
+ 'United Arab Emirates',
+ 'United Kingdom',
+ 'United States',
+ 'Uruguay',
+ 'Uzbekistan',
+ 'Vanuatu',
+ 'Vatican City',
+ 'Venezuela',
+ 'Vietnam',
+ 'Yemen',
+ 'Zambia',
+ 'Zimbabwe'
+]
diff --git a/Turkish/07_Day_Functions/07_day_starter/index.html b/Turkish/07_Day_Functions/07_day_starter/index.html
new file mode 100644
index 000000000..8a97e13a8
--- /dev/null
+++ b/Turkish/07_Day_Functions/07_day_starter/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+ 30DaysOfJavaScript:07 Day
+
+
+
+
30DaysOfJavaScript:07 Day
+
Functions
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Turkish/07_Day_Functions/07_day_starter/scripts/main.js b/Turkish/07_Day_Functions/07_day_starter/scripts/main.js
new file mode 100644
index 000000000..421fb87a4
--- /dev/null
+++ b/Turkish/07_Day_Functions/07_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/Turkish/08_Day_Objects/08_day_objects.md b/Turkish/08_Day_Objects/08_day_objects.md
new file mode 100644
index 000000000..ea0605a5e
--- /dev/null
+++ b/Turkish/08_Day_Objects/08_day_objects.md
@@ -0,0 +1,598 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Turkish/08_Day_Objects/08_day_starter/scripts/main.js b/Turkish/08_Day_Objects/08_day_starter/scripts/main.js
new file mode 100644
index 000000000..421fb87a4
--- /dev/null
+++ b/Turkish/08_Day_Objects/08_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/Turkish/09_Day_Higher_order_functions/09_day_higher_order_functions.md b/Turkish/09_Day_Higher_order_functions/09_day_higher_order_functions.md
new file mode 100644
index 000000000..65715005a
--- /dev/null
+++ b/Turkish/09_Day_Higher_order_functions/09_day_higher_order_functions.md
@@ -0,0 +1,725 @@
+
+
30 Günde Javascript: Yüksek Dereceden -High Order- Fonksiyonlar
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Turkish/09_Day_Higher_order_functions/09_day_starter/scripts/main.js b/Turkish/09_Day_Higher_order_functions/09_day_starter/scripts/main.js
new file mode 100644
index 000000000..421fb87a4
--- /dev/null
+++ b/Turkish/09_Day_Higher_order_functions/09_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/Turkish/10_Day_Sets_And_Maps/10_day_Sets_and_Maps.md b/Turkish/10_Day_Sets_And_Maps/10_day_Sets_and_Maps.md
new file mode 100644
index 000000000..fe9667b81
--- /dev/null
+++ b/Turkish/10_Day_Sets_And_Maps/10_day_Sets_and_Maps.md
@@ -0,0 +1,444 @@
+
+
+[<< Gün 13](../13_Day_Console_object_methods/13_day_console_object_methods.md) | [Gün 15>>](../15_Day_Classes/15_day_classes.md)
+
+
+
+- [Gün 14](#day-14)
+ - [Error Handling](#error-handling)
+ - [Error Types](#error-types)
+ - [Exercises](#exercises)
+ - [Exercises:Level 1](#exerciseslevel-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises:Level](#exerciseslevel)
+
+# Gün 14
+
+## Error Handling
+
+JavaScript geniş yazılmış bir dildir. Bazı zamanlar, tanımsız bir değişkene erişmeye veya tanımsız bir işlevi çağırmaya çalıştığınızda bir çalışma zamanı hatası alırsınız.
+
+JavaScript, Python veya Java'ya benzer, try-catch-finally bloğunu kullanarak çalışma zamanı hatalarını yakalamak için bir hata işleme mekanizması sağlar.
+
+```js
+try {
+ // hata verilebilicek kod
+} catch (err) {
+ // bir hata oluşursa çalıştırılacak kod
+} finally {
+ // bir hatanın oluşup oluşmadığına bakılmaksızın yürütülecek kod
+}
+```
+
+**try**: try bloğunda hata oluşturabilecek kodu yazın. try ifadesi, yürütülürken hatalar için test edilecek bir kod bloğu tanımlamamızı sağlar.
+
+**catch**: Bir hata oluştuğunda catch bloğunda bir şeyler yapmak için kod yazın. Catch bloğu, size hata bilgisi verecek parametrelere sahip olabilir. Yakalama bloğu, bir hatayı günlüğe kaydetmek veya kullanıcıya belirli mesajları görüntülemek için kullanılır.
+
+**finally**: finally bloğu, bir hata oluşmasından bağımsız olarak her zaman yürütülür. finally bloğu, kalan görevi tamamlamak veya try bloğunda hata oluşmadan önce değişmiş olabilecek değişkenleri sıfırlamak için kullanılabilir.
+
+**Örnek:**
+
+```js
+try {
+ let lastName = 'Yetayeh'
+ let fullName = fistName + ' ' + lastName
+} catch (err) {
+ console.log(err)
+}
+```
+
+```sh
+ReferenceError: fistName is not defined
+ at :4:20
+```
+
+```js
+try {
+ let lastName = 'Yetayeh'
+ let fullName = fistName + ' ' + lastName
+} catch (err) {
+ console.error(err) // we can use console.log() or console.error()
+} finally {
+ console.log('In any case I will be executed')
+}
+```
+
+```sh
+ReferenceError: fistName is not defined
+ at :4:20
+In any case it will be executed
+```
+
+Catch bloğu bir parametre alır. Catch bloğuna parametre olarak e, err veya error iletmek yaygındır. Bu parametre bir nesnedir ve isim ve mesaj anahtarlarına sahiptir. Adı ve mesajı kullanalım.
+
+```js
+try {
+ let lastName = 'Yetayeh'
+ let fullName = fistName + ' ' + lastName
+} catch (err) {
+ console.log('Name of the error', err.name)
+ console.log('Error message', err.message)
+} finally {
+ console.log('In any case I will be executed')
+}
+```
+
+```sh
+Name of the error ReferenceError
+Error message fistName is not defined
+In any case I will be executed
+```
+
+throw: throw ifadesi özel bir hata oluşturmamıza izin verir. Bir dize, sayı, boolean veya bir nesne aracılığıyla yapabiliriz. Bir istisna atmak için throw ifadesini kullanın. Bir throw exception yazdığınızda, expression specifies değerini belirtir. Aşağıdakilerin her biri throw exception atar:
+
+```js
+throw 'Error2' // generates an exception with a string value
+throw 42 // generates an exception with the value 42
+throw true // generates an exception with the value true
+throw new Error('Required') // generates an error object with the message of Required
+```
+
+```js
+const throwErrorExampleFun = () => {
+ let message
+ let x = prompt('Enter a number: ')
+ try {
+ if (x == '') throw 'empty'
+ if (isNaN(x)) throw 'not a number'
+ x = Number(x)
+ if (x < 5) throw 'too low'
+ if (x > 10) throw 'too high'
+ } catch (err) {
+ console.log(err)
+ }
+}
+throwErrorExampleFun()
+```
+
+### Error Types
+
+- ReferenceError: Geçersiz bir referans oluşturur. Tanımlanmamış bir değişken kullanırsak bir ReferenceError atılır.
+
+```js
+let firstName = 'Asabeneh'
+let fullName = firstName + ' ' + lastName
+
+console.log(fullName)
+```
+
+```sh
+Uncaught ReferenceError: lastName is not defined
+ at :2:35
+```
+
+- SyntaxError: Bir syntax(sözdizim) hatası oluşturur.
+
+```js
+let square = 2 x 2
+console.log(square)
+
+console.log('Hello, world")
+```
+
+```sh
+Uncaught SyntaxError: Unexpected identifier
+```
+
+- TypeError: Bir type hatası oluşturur
+
+```js
+let num = 10
+console.log(num.toLowerCase())
+```
+
+```sh
+Uncaught TypeError: num.toLowerCase is not a function
+ at :2:17
+```
+
+Bunlar, kod yazarken karşılaşabileceğiniz yaygın hatalardan bazılarıdır. Hataları anlamak, hangi hataları yaptığınızı bilmenize yardımcı olabilir ve kodunuzda hızlı bir şekilde hata ayıklamanıza yardımcı olur.
+
+🌕 Kusursuzsun. Artık hataların nasıl ele alınacağını biliyorsunuz ve beklenmeyen kullanıcı girdilerini işleyen sağlam bir uygulama yazabilirsiniz. 14. gün zorluklarını yeni tamamladınız ve mükemmelliğe giden yolda 14 adım öndesiniz. Şimdi beyniniz ve kasınız için bazı egzersizler yapın.
+
+## Egzersizler
+
+### Egzersiz:Seviye 1
+
+Pratik
+
+### Egzersiz: Seviye 2
+
+Pratik
+
+### Egzersiz: Seviye 3
+
+Pratik
+
+🎉 TEBRİKLER ! 🎉
+
+[<< Gün 13](../13_Day_Console_object_methods/13_day_console_object_methods.md) | [Gün 15>>](../15_Day_Classes/15_day_classes.md)
diff --git a/Turkish/15_Day_Classes/15_day_classes.md b/Turkish/15_Day_Classes/15_day_classes.md
new file mode 100644
index 000000000..3d783b4fa
--- /dev/null
+++ b/Turkish/15_Day_Classes/15_day_classes.md
@@ -0,0 +1,715 @@
+
+
+[<< Gün 16](../16_Day_JSON/16_day_json.md) | [Gün 18 >>](../18_Day_Promises/18_day_promises.md)
+
+
+
+- [Gün 17](#day-17)
+ - [HTML5 Web Storage(Depolama)](#html5-web-storage)
+ - [sessionStorage](#sessionstorage)
+ - [localStorage](#localstorage)
+ - [Web Storages Kullanım Durumu(alanlar)](#use-case-of-web-storages)
+ - [HTML5 Web Depolama Nesneleri](#html5-web-storage-objects)
+ - [Öğeyi localStorage'a ayarlama](#setting-item-to-the-localstorage)
+ - [Öğeyi localStorage'dan alma](#getting-item-from-localstorage)
+ - [localStorage'ı temizleme](#clearing-the-localstorage)
+ - [Egzersizler](#exercises)
+ - [Egzersiz: Seviye 1](#exercises-level-1)
+ - [Egzersiz: Seviye 2](#exercises-level-2)
+ - [Egzersiz: Seviye 3](#exercises-level-3)
+
+# Gün 17
+
+## HTML5 Web Storage(Depolama)
+
+Web Depolama (sessionStorage ve localStorage), geleneksel tanımlama bilgilerine göre önemli avantajlar sunan yeni bir HTML5 API'sidir. HTML5'ten önce, uygulama verilerinin her sunucu isteğine dahil olan çerezlerde saklanması gerekiyordu. Web depolaması daha güvenlidir ve büyük miktarda veri web sitesi performansını etkilemeden local(yerel) olarak depolanabilir. Çerezlerin birçok web tarayıcısında veri depolama sınırı, çerez başına yaklaşık 4 KB'dir. Web Storage çok daha büyük verileri (en az 5MB) depolayabiliriz ve asla sunucuya aktarılmaz. Aynı veya bir kaynaktan gelen tüm siteler aynı verileri depolayabilir ve bunlara erişebilir.
+
+Depolanan verilere JavaScript kullanılarak erişilebilir; bu, geleneksel olarak sunucu tarafı programlama ve ilişkisel veritabanlarını içeren birçok şeyi yapmak için istemci tarafı komut dosyası oluşturma yeteneğinden yararlanmanızı sağlar. İki Web Depolama nesnesi vardır:
+
+- sessionStorage
+- localStorage
+
+localStorage, sessionStorage'a benzer, ancak localStorage'da depolanan verilerin sona erme süresi olmamasına rağmen, sessionStorage'da depolanan verilerin sayfa oturumu sona erdiğinde, yani sayfa kapatıldığında silinmesi dışında.
+
+localStorage veya sessionStorage'da depolanan verilerin sayfanın protokolüne özel olduğuna dikkat edilmelidir.
+
+Anahtarlar ve değerler her zaman dizelerdir (nesnelerde olduğu gibi tamsayı tuşlarının otomatik olarak dizelere dönüştürüleceğini unutmayın).
+
+
+
+### sessionStorage
+
+sessionStorage yalnızca tarayıcı sekmesinde veya pencere oturumunda kullanılabilir. Verileri tek bir web sayfası oturumunda depolamak için tasarlanmıştır. Bu, pencere kapatılırsa oturum verilerinin kaldırılacağı anlamına gelir. sessionStorage ve localStorage benzer yöntemlere sahip olduğundan, sadece localStorage'a odaklanacağız.
+
+### localStorage
+
+HTML5 localStorage, son kullanma verisi olmadan tarayıcıda veri depolamak için kullanılan web depolama API'sinin para birimidir. Veriler, tarayıcı kapatıldıktan sonra bile tarayıcıda mevcut olacaktır. localStorage, tarayıcı oturumları arasında bile tutulur. Bu, tarayıcı kapatılıp yeniden açıldığında ve ayrıca sekmeler ve pencereler arasında anında verilerin hala mevcut olduğu anlamına gelir.
+
+Web Depolama verileri, her iki durumda da farklı tarayıcılar arasında mevcut değildir. Örneğin, Firefox'ta oluşturulan depolama nesnelerine tıpkı çerezler gibi Internet Explorer'da erişilemez.
+Yerel depolama üzerinde çalışmak için beş yöntem vardır:
+_setItem(), getItem(), removeItem(), clear(), key()_
+
+### Web Storages Kullanım Durumu(alanlar)
+
+Web Depolarının bazı kullanım durumları şunlardır:
+
+- verileri geçici olarak depolamak
+- kullanıcının alışveriş sepetine koyduğu ürünleri kaydetme
+- veriler, sayfa istekleri, birden çok tarayıcı sekmesi arasında ve ayrıca localStorage kullanılarak tarayıcı oturumları arasında kullanılabilir hale getirilebilir
+- localStorage kullanılarak tamamen çevrimdışı olarak kullanılabilir
+- Web Depolama, sonraki isteklerin sayısını en aza indirmek için istemcide bazı statik veriler depolandığında harika bir performans kazancı olabilir. Görüntüler bile Base64 kodlaması kullanılarak dizelerde saklanabilir.
+- kullanıcı kimlik doğrulama yöntemi için kullanılabilir
+
+Yukarıda bahsedilen örnekler için localStorage kullanmak mantıklıdır. O halde sessionStorage'ı ne zaman kullanmamız gerektiğini merak ediyor olabilirsiniz.
+
+Bazı durumlarda, pencere kapanır kapanmaz verilerden kurtulmak istiyoruz. Ya da uygulamanın başka bir pencerede açık olan aynı uygulamaya müdahale etmesini istemiyorsak. Bu senaryolar en iyi şekilde sessionStorage ile sunulur.
+
+Şimdi, bu Web Depolama API'lerinden nasıl yararlanılacağını görelim.
+
+## HTML5 Web Depolama Nesneleri
+
+HTML web depolama, istemcide veri depolamak için iki nesne sağlar:
+
+- window.localStorage - son kullanma tarihi olmayan verileri depolar
+- window.sessionStorage - bir oturum için veri depolar (tarayıcı sekmesi kapatıldığında veriler kaybolur) Çoğu modern tarayıcı Web Depolamayı destekler, ancak localStorage ve sessionStorage için tarayıcı desteğini kontrol etmek iyidir. Web Depolama nesneleri için mevcut yöntemleri görelim.
+
+Web Depolama Nesneleri:
+
+- _localStorage_ - localStorage nesnesini görüntülemek için
+- _localStorage.clear()_ - localStrogedaki her şeyi kaldırmak için
+- _localStorage.setItem()_ - verileri localStorage'da depolamak için. Bir anahtar ve bir değer parametresi alır.
+- _localStorage.getItem()_ - localStorage'da depolanan verileri görüntülemek için. Parametre olarak bir anahtar alır.
+- _localStorage.removeItem()_ - depolanan öğeyi localStorage'dan kaldırmak için. Parametre olarak bir anahtar alır.
+- _localStorage.key()_ - localStorage'da depolanan verileri görüntülemek için. Parametre olarak indeks alır.
+
+
+
+### Öğeyi localStorage'a ayarlama
+
+Bir localStorage'da saklanacak verileri ayarladığımızda, bir dize olarak saklanacaktır. Bir diziyi veya nesneyi depoluyorsak, orijinal verinin dizi yapısını veya nesne yapısını kaybetmediğimiz sürece, formatı korumak için önce onu dizgelendirmemiz gerekir.
+
+Verileri localStorage'da _localStorage.setItem_ yöntemini kullanarak depolarız.
+
+```js
+//syntax
+localStorage.setItem('key', 'value')
+```
+
+- String ifadeleri localStorage üzerinde saklama
+
+```js
+localStorage.setItem('firstName', 'Asabeneh') // değer string olduğundan onu stringleştirmeyiz
+console.log(localStorage)
+```
+
+```sh
+Storage {firstName: 'Asabeneh', length: 1}
+```
+
+- Number ifadeleri localStorage üzerinde saklama
+
+```js
+localStorage.setItem('age', 200)
+console.log(localStorage)
+```
+
+```sh
+ Storage {age: '200', firstName: 'Asabeneh', length: 2}
+```
+
+- Bir diziyi localStorage'da depolamak. Bir diziyi, nesneyi veya nesne dizisini depoluyorsak, önce nesneyi dizgelendirmemiz gerekir. Aşağıdaki örneğe bakın.
+
+```js
+const skills = ['HTML', 'CSS', 'JS', 'React']
+//Biçimi korumak için önce skills dizisinin dizilmesi gerekir.
+const skillsJSON = JSON.stringify(skills, undefined, 4)
+localStorage.setItem('skills', skillsJSON)
+console.log(localStorage)
+```
+
+```sh
+Storage {age: '200', firstName: 'Asabeneh', skills: 'HTML,CSS,JS,React', length: 3}
+```
+
+```js
+let skills = [
+ { tech: 'HTML', level: 10 },
+ { tech: 'CSS', level: 9 },
+ { tech: 'JS', level: 8 },
+ { tech: 'React', level: 9 },
+ { tech: 'Redux', level: 10 },
+ { tech: 'Node', level: 8 },
+ { tech: 'MongoDB', level: 8 }
+]
+
+let skillJSON = JSON.stringify(skills)
+localStorage.setItem('skills', skillJSON)
+```
+
+- Bir nesneyi localStorage'da depolamak. Nesneleri bir localStorage'a depolamadan önce, nesnenin dizelenmesi gerekir.
+
+```js
+const user = {
+ firstName: 'Asabeneh',
+ age: 250,
+ skills: ['HTML', 'CSS', 'JS', 'React']
+}
+
+const userText = JSON.stringify(user, undefined, 4)
+localStorage.setItem('user', userText)
+```
+
+### Öğeyi localStorage'dan alma
+
+_localStorage.getItem()_ yöntemini kullanarak yerel depodan veri alıyoruz..
+
+```js
+//syntax
+localStorage.getItem('key')
+```
+
+```js
+let firstName = localStorage.getItem('firstName')
+let age = localStorage.getItem('age')
+let skills = localStorage.getItem('skills')
+console.log(firstName, age, skills)
+```
+
+```sh
+ 'Asabeneh', '200', '['HTML','CSS','JS','React']'
+```
+
+Gördüğünüz gibi skills string formatında. Normal diziye ayrıştırmak için JSON.parse() kullanalım.
+
+```js
+let skills = localStorage.getItem('skills')
+let skillsObj = JSON.parse(skills, undefined, 4)
+console.log(skillsObj)
+```
+
+```sh
+['HTML','CSS','JS','React']
+```
+
+### localStorage'ı temizleme
+
+Clear yöntemi, yerel depolamada depolanan her şeyi temizleyecektir.
+
+```js
+localStorage.clear()
+```
+
+🌕 Kararlısınız. Artık Web Depolama biliyorsunuz ve küçük verileri istemci tarayıcılarında nasıl depolayacağınızı biliyorsunuz. Büyüklüğe giden yolda 17 adım öndesin. Şimdi beyniniz ve kasınız için bazı egzersizler yapın.
+
+## Egzersizler
+
+### Egzersiz: Seviye 1
+
+1. Adınızı, soyadınızı, yaşınızı, ülkenizi, şehrinizi tarayıcınızın localStorage'ında saklayın.
+
+### Egzersiz: Seviye 2
+
+1. Bir öğrenci nesnesi oluşturun. Öğrenci nesnesinin adı, soyadı, yaşı, becerileri, ülkesi, kayıtlı anahtarları ve anahtarların değerleri olacaktır. Öğrenci nesnesini tarayıcınızın localStorage'ında saklayın.
+
+### Egzersiz: Seviye 3
+
+1. personAccount adlı bir nesne oluşturun. ad, soyad, gelirler, giderler özelliklerine sahip olup totalIncome, totalExpense, accountInfo,addIncome, addExpense ve accountBalance yöntemlerine sahip olsun. Gelirler bir dizi gelirdir ve tanımı ve giderleri de bir dizi gider ve tanımıdır.
+
+🎉 TEBRİKLER ! 🎉
+
+[<< Gün 16](../16_Day_JSON/16_day_json.md) | [Gün 18 >>](../18_Day_Promises/18_day_promises.md)
diff --git a/Turkish/18_Day_Promises/18_day_promises.md b/Turkish/18_Day_Promises/18_day_promises.md
new file mode 100644
index 000000000..c3cab0f6e
--- /dev/null
+++ b/Turkish/18_Day_Promises/18_day_promises.md
@@ -0,0 +1,272 @@
+
+
+[<< Gün 17](../17_Day_Web_storages/17_day_web_storages.md) | [Gün 19>>](../19_Day_Closures/19_day_closures.md)
+
+
+
+- [Gün 18](#gün-18)
+ - [Promise](#promise)
+ - [Callbacks](#callbacks)
+ - [Promise yapıcısı](#promise-constructor)
+ - [Fetch API](#fetch-api)
+ - [Async ve Await](#async-and-await)
+ - [Egzersizler](#egzersizler)
+ - [Egzersiz: Seviye 1](#egzersiz-level-1)
+ - [Egzersiz: Seviye 2](#egzersiz-level-2)
+ - [Egzersiz: Seviye 3](#egzersiz-level-3)
+
+# Gün 18
+
+## Promise
+
+Biz insanlar, belirli bir zamanda bir faaliyette bulunma sözü veririz veya alırız. Sözümüzü tutarsak başkalarını mutlu ederiz, ama sözümüzü tutmazsak hoşnutsuzluklara yol açabilir. JavaScript'te promise(söz) vermenin yukarıdaki örneklerle ortak bir yanı vardır.
+
+Bir promise, JavaScript'te asynchronous işlemleri işlemenin bir yoludur. Asynchronous bir eylemin nihai başarı değeri veya başarısızlık nedeni ile işleyicilere izin verir. Bu, asynchronous yöntemlerin synchronous yöntemler gibi değerler döndürmesine olanak tanır: asynchronous yöntem, nihai değeri hemen döndürmek yerine, gelecekte bir noktada değeri sağlama sözü verir.
+
+Bir Promise şu durumlardan birindedir:
+
+- pending: başlangıç durumunda, ne tamamlandı ne de reddedildi.
+- fulfilled: işlemin başarıyla tamamlandığı anlamına gelir.
+- rejected: işlemin başarısız olduğu anlamına gelir.
+
+Bekleyen bir promise ya bir değerle yerine getirilebilir(fulfilled) ya da bir sebeple (error) rejected olabilir. Bu seçeneklerden herhangi biri gerçekleştiğinde, bir sözün o zaman yöntemiyle sıraya alınan ilişkili işleyiciler çağrılır. (Karşılık gelen bir işleyici(handler) eklendiğinde promise zaten fulfilled veya rejected ise, işleyici(handler) çağrılır, bu nedenle asynchronous bir işlemin tamamlanması ile işleyicilerinin eklenmesi arasında bir yarış koşulu yoktur.)
+
+As the Promise.prototype.then() and Promise.prototype.catch() methods return promises, they can be chained.
+
+## Callbacks
+
+Promise çok iyi anlamak için önce callback mantığını anlayalım. Aşağıdaki callback örneklerini görelim. Aşağıdaki kod bloklarında, callback ve promise arasındaki farkları fark edeceksiniz.
+
+- callback
+ Let us see a callback function which can take two parameters. The first parameter is err and the second is result. If the err parameter is false, there will not be error other wise it will return an error.
+
+In this case the err has a value and it will return the err block.
+
+```js
+//Callback
+const doSomething = callback => {
+ setTimeout(() => {
+ const skills = ['HTML', 'CSS', 'JS']
+ callback('It did not go well', skills)
+ }, 2000)
+}
+
+const callback = (err, result) => {
+ if (err) {
+ return console.log(err)
+ }
+ return console.log(result)
+}
+
+doSomething(callback)
+```
+
+```sh
+// 2 saniye sonra yazdırıcak
+It did not go well
+```
+
+Bu durumda hata yanlıştır ve sonuç olan else bloğunu döndürür.
+
+```js
+const doSomething = callback => {
+ setTimeout(() => {
+ const skills = ['HTML', 'CSS', 'JS']
+ callback(false, skills)
+ }, 2000)
+}
+
+doSomething((err, result) => {
+ if (err) {
+ return console.log(err)
+ }
+ return console.log(result)
+})
+```
+
+```sh
+// 2 saniye sonra yazdırıcak
+["HTML", "CSS", "JS"]
+```
+
+### Promise yapıcısı
+
+Promise yapıcısını kullanarak bir promise oluşturabiliriz. `new` anahtar kelimesini, ardından `Promise` kelimesini ve ardından bir parantez kullanarak yeni bir promise oluşturabiliriz. Parantez içinde bir `callback` işlevi alır. Promise callback fonksiyonu, `resolve` ve `reject` fonksiyonları olmak üzere iki parametreye sahiptir.
+
+```js
+// syntax
+const promise = new Promise((resolve, reject) => {
+ resolve('success')
+ reject('failure')
+})
+```
+
+```js
+// Promise
+const doPromise = new Promise((resolve, reject) => {
+ setTimeout(() => {
+ const skills = ['HTML', 'CSS', 'JS']
+ if (skills.length > 0) {
+ resolve(skills)
+ } else {
+ reject('Something wrong has happened')
+ }
+ }, 2000)
+})
+
+doPromise
+ .then(result => {
+ console.log(result)
+ })
+ .catch(error => console.log(error))
+```
+
+```sh
+["HTML", "CSS", "JS"]
+```
+
+Yukarıdaki promise kararlılıkla yerine getirilmiştir. Promise'ın reject ile kararlaştırıldığı başka bir örnek verelim.
+
+```js
+// Promise
+const doPromise = new Promise((resolve, reject) => {
+ setTimeout(() => {
+ const skills = ['HTML', 'CSS', 'JS']
+ if (skills.includes('Node')) {
+ resolve('fullstack developer')
+ } else {
+ reject('Something wrong has happened')
+ }
+ }, 2000)
+})
+
+doPromise
+ .then(result => {
+ console.log(result)
+ })
+ .catch(error => console.error(error))
+```
+
+```sh
+Something wrong has happened
+```
+
+## Fetch API
+
+Fetch API'si, kaynakları (ağ genelindekiler dahil) almak için bir interface sağlar. XMLHttpRequest kullanan herkese tanıdık gelecektir, ancak yeni API daha güçlü ve esnek bir özellik seti sağlar. Bu görevde, url ve APIS istemek için fetch kullanacağız. Buna ek olarak, fetch API'sini kullanarak ağ kaynaklarına erişimde promise kullanım durumunu gösterelim.
+
+```js
+const url = 'https://restcountries.com/v2/all' // countries api
+fetch(url)
+ .then(response => response.json()) // API verilerine JSON olarak erişme
+ .then(data => {
+ // verileri almak
+ console.log(data)
+ })
+ .catch(error => console.error(error)) // yanlış bir şey olursa işleme hatası
+```
+
+## Async ve Await
+
+Async ve Await, promise yerine getirmenin zarif bir yoludur. Anlaşılması kolay ve yazması temiz.
+
+```js
+const square = async function (n) {
+ return n * n
+}
+
+square(2)
+```
+
+```sh
+Promise {: 4}
+```
+
+Bir fonksiyonun önündeki async kelimesi, fonksiyonun bir promise vereceği anlamına gelir. Yukarıdaki kare fonksiyonu bir değer yerine bir promise verir.
+
+Promise gelen değere nasıl erişiriz? Promise verilen değere erişmek için, wait anahtar sözcüğünü kullanacağız.
+
+```js
+const square = async function (n) {
+ return n * n
+}
+const value = await square(2)
+console.log(value)
+```
+
+```sh
+4
+```
+
+Şimdi, yukarıdaki örnekte de görebileceğiniz gibi, bir fonksiyonun önüne async yazarak bir promise oluşturun ve bir promise değer almak için bekliyoruz. Async ve await birlikte çalışır, biri olmadan diğeri olamaz.
+
+API verilerini hem promise yöntemini kullanarak hem de async ve await yöntemini kullanarak getirelim.
+
+- promise
+
+```js
+const url = 'https://restcountries.com/v2/all'
+fetch(url)
+ .then(response => response.json())
+ .then(data => {
+ console.log(data)
+ })
+ .catch(error => console.error(error))
+```
+
+- async ve await
+
+```js
+const fetchData = async () => {
+ try {
+ const response = await fetch(url)
+ const countries = await response.json()
+ console.log(countries)
+ } catch (err) {
+ console.error(err)
+ }
+}
+console.log('===== async and await')
+fetchData()
+```
+
+🌕 Sen gerçeksin ve sözünü tuttun ve 18. güne ulaştın. Sözünü tut ve azimle meydan oku. Büyüklüğe giden yolda 18 adım öndesin. Şimdi beyniniz ve kaslarınız için bazı egzersizler yapın
+
+## Egzersizler
+
+```js
+const countriesAPI = 'https://restcountries.com/v2/all'
+const catsAPI = 'https://api.thecatapi.com/v1/breeds'
+```
+
+### Egzersiz: Seviye 1
+
+1. Fetch kullanarak countriesAPI'sini okuyun ve country, capital, languages, population ve area adını yazdırın.
+
+### Egzersiz: Seviye 2
+
+1. Tüm kedi adlarını catNames değişkenine yazdırın.
+
+### Egzersiz: Seviye 3
+
+1. catsAPI'sini okuyun ve kedinin ortalama ağırlığını metrik birimde bulun.
+2. countriesAPI'sini okuyun ve en büyük(largest) 10 ülkeyi bulun.
+3. countriesAPI'sini okuyun ve dünyada resmi olarak kullanılan toplam dil sayısını bulun.
+
+🎉 TEBRİKLER ! 🎉
+
+[<< Gün 17](../17_Day_Web_storages/17_day_web_storages.md) | [Gün 19>>](../19_Day_Closures/19_day_closures.md)
diff --git a/Turkish/19_Day_Closures/19_day_closures.md b/Turkish/19_Day_Closures/19_day_closures.md
new file mode 100644
index 000000000..503f8b8ce
--- /dev/null
+++ b/Turkish/19_Day_Closures/19_day_closures.md
@@ -0,0 +1,104 @@
+
+
+[<< Gün 19](../19_Day_Closures/19_day_closures.md) | [Gün 21 >>](../21_Day_DOM/21_day_dom.md)
+
+
+- [Gün 20](#gun-20)
+ - [Temiz Kod Yazmak](#temiz-kod-yazmak)
+ - [JavaScript Stil Kılavuzu](#javaScript-stil-kılavuzu)
+ - [Neden stil kılavuzuna ihtiyacımız var?](#neden-stil-kılavuzuna-ihtiyacımız-var)
+ - [Airbnb JavaScript Style Guide](#airbnb-javascript-style-guide)
+ - [Standard JavaScript Style Guide](#standard-javascript-style-guide)
+ - [Google JavaScript Style Guide](#google-javascript-style-guide)
+ - [JavaScript Kodlama Kuralları](#javaScript-kodlama-kuralları)
+ - [30DaysOfJavaScript'te kullanılan kurallar](#30DaysOfJavaScript-kullanılan-kurallar)
+ - [Değişkenler](#Degiskenler)
+ - [Arrays(Diziler)](#arrays)
+ - [Fonksiyonlar](#fonksiyonlar)
+ - [Döngüler](#donguler)
+ - [Nesneler](#nesneler)
+ - [Koşullar](#kosullar)
+ - [Sınıflar](#sınıflar)
+
+# Gün 20
+
+## Temiz Kod Yazmak
+
+### JavaScript Stil Kılavuzu
+
+JavaScript stil kılavuzu, JavaScript kodunun nasıl yazılması ve düzenlenmesi gerektiğini söyleyen bir dizi standarttır. Bu bölümde JavaScript rehberlerinden ve temiz kod nasıl yazılırdan bahsedeceğiz.
+
+JavaScript bir programlama dilidir ve insan dili gibi syntax(sözdizimi) yapısına sahiptir. JavaScript'in sözdizimi, kolaylık ve basitlik adına belirli bir stil yönergesini izleyerek yazılmalıdır.
+
+### Neden stil kılavuzuna ihtiyacımız var?
+
+Çok uzun zamandır tek başına kodlama yapıyorsun ama şimdi bir ekip halinde çalışıyorsun gibi düşünelim. Tek çalıştığın sürece nasıl kod yazdığınız bu kadar önemli değil, ancak 10 veya 20 veya daha fazla geliştirici ekibinde bir projede ve aynı kod tabanı üzerinde çalıştığınızda, kod dağınık ve yönetilmesi zor olacaktır. İzlenecek herhangi bir yönerge yoktur.
+
+Kendi yönergelerinizi ve sözleşmelerinizi geliştirebilir veya iyi geliştirilmiş yönergeleri de uyarlayabilirsiniz. Bize en yaygın bilinen yönergeleri bildirin.
+En yaygın JavaScript Stil Kılavuzları
+
+- Airbnb JavaScript Style Guide
+- JavaScript Standard Style Guide
+- Google JavaScript Style Guide
+
+#### Airbnb JavaScript Style Guide
+
+Airbnb, internetteki en popüler JavaScript stil kılavuzlarından birine sahiptir. JavaScript'in neredeyse her yönünü de kapsar ve birçok geliştirici ve şirket tarafından benimsenmiştir. [Airbnb stil rehberine](https://github.com/airbnb/javascript) göz atabilirsiniz. ben de denemenizi tavsiye ederim. Stillerinin kullanımı çok kolay ve anlaşılması kolaydır.
+
+#### Standard JavaScript Style Guide
+
+Bu kılavuz Airbnb kadar popüler değil ama bakmaya değer. [Stil kılavuzlarında](https://standardjs.com/) noktalı virgülü kaldırdılar.
+
+#### Google JavaScript Style Guide
+
+Google'ın yönergesi hakkında pek bir şey söylemiyorum ve kullanmadım, bunun yerine şu [link'e](https://google.github.io/styleguide/jsguide.html) bir göz atmanızı öneririm.
+
+### JavaScript Kodlama Kuralları
+
+Bu görevde ayrıca genel JavaScript kodlama yazım kurallarını ve kılavuzlarını kullandık. Kodlama kuralları, bir kişi, bir ekip veya bir şirket tarafından geliştirilen programlama için stil yönergeleridir.
+
+Kodlama kuralları aşağıdakilere yardımcı olur:
+
+- temiz kod yazmak
+- kod okunabilirliğini geliştirmek
+- kodun yeniden kullanılabilirliğini ve sürdürülebilirliğini geliştirmek için
+
+Kodlama kuralları şunları içerir:
+
+- Değişkenler için adlandırma ve bildirim kuralları
+- Fonksiyonlar için adlandırma ve bildirim kuralları
+- Boşluk, girinti ve yorumların kullanımına ilişkin kurallar
+- Programlama uygulamaları ve ilkeleri
+
+#### 30DaysOfJavaScript'te kullanılan kurallar
+
+Bu meydan okumada normal JavaScript kuralını takip ediyoruz, ancak yazma tercihimi de ekledim.
+
+- Değişkenler ve fonksiyonlar için camelCase kullandık.
+- Tüm değişken isimleri bir harfle başlar.
+- Sabitler, diziler, nesneler ve işlevler için *const* kullanmayı seçtik. Çift alıntı yerine tek tırnak veya ters tik kullanmayı tercih ettik. Tek alıntı moda oluyor.
+- Kodumuzdan noktalı virgülleri de kaldırdık ama bu kişisel tercih meselesidir.
+- Aritmetik operatörler, atama operatörleri ve virgülden sonra boşluk
+- Fonksiyon bildirimi yerine arrow function
+- Fonksiyon bir satır ise, implicit return yerine explicit return
+- Bir nesnenin son değerinin sonunda virgül yok
+- Daha uzun versiyon yerine +=, -=, *= /=, **= bunu tercih ediyoruz
+- console.log()'u kullandığımızda, konsolun nereden geldiğini belirlemek için bir etiket dizgisi ile yazdırmak iyidir.
+
+#### Değişkenler
+
+```js
+let firstName = 'Asabeneh'
+let lastName = 'Yetayeh'
+let country = 'Finland'
+let city = 'Helsinki'
+const PI = Math.PI
+const gravity = 9.81
+```
+
+#### Arrays(Diziler)
+
+Dizi isimlerini çoğul yapmayı seçtik
+
+- names
+- numbers
+- countries
+- languages
+- skills
+- fruits
+- vegetables
+
+```js
+// arrays
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+const numbers = [0, 3.14, 9.81, 37, 98.6, 100]
+const countries = ['Finland', 'Denmark', 'Sweden', 'Norway', 'Iceland']
+const languages = ['Amharic', 'Arabic', 'English', 'French', 'Spanish']
+const skills = ['HTML', 'CSS', 'JavaScript', 'React', 'Python']
+const fruits = ['banana', 'orange', 'mango', 'lemon']
+const vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
+```
+
+#### Fonksiyonlar
+
+Şimdiye kadar çok tanıdık fonksiyon declaration, expression fonksiyon, arrow fonksiyon ve anonymous fonksiyon sahipsiniz. Bu zorlukta, diğer fonksiyonlar yerine arrow fonksiyonunu kullanma eğilimindeyiz. Arrow fonksiyonu, diğer fonksiyonların yerine geçmez. Ayrıca arrow fonksiyon ve fonksiyon declaration tam olarak aynı değildir. Bu yüzden ne zaman kullanacağınızı ve ne zaman kullanmayacağınızı bilmelisiniz. Farkı diğer bölümlerde ayrıntılı olarak ele alacağım. Fonksiyon bir satır ise, implicit return yerine explicit return kullanacağız.
+
+```js
+// bir kişinin tam adını döndüren fonksiyon
+const printFullName = (firstName, lastName) => firstName + ' ' + lastName
+// bir sayının karesini döndüren fonksiyon
+const square = (n) => n * n
+// rastgele hexa renkleri oluşturan fonksiyon
+const hexaColor = () => {
+ const str = '0123456789abcdef'
+ let hexa = '#'
+ let index
+ for (let i = 0; i < 6; i++) {
+ index = Math.floor(Math.random() * str.length)
+ hexa += str[index]
+ }
+ return hexa
+}
+// tarih ve saati gösteren bir fonskiyon
+const showDateTime = () => {
+ const now = new Date()
+ const year = now.getFullYear()
+ const month = now.getMonth() + 1
+ const date = now.getDate()
+ let hours = now.getHours()
+ let minutes = now.getMinutes()
+ if (hours < 10) {
+ hours = '0' + hours
+ }
+ if (minutes < 10) {
+ minutes = '0' + minutes
+ }
+ const dateMonthYear = date + '.' + month + '.' + year
+ const time = hours + ':' + minutes
+ const fullTime = dateMonthYear + ' ' + time
+ return fullTime
+}
+```
+
+`new Dat().toLocaleString()` geçerli tarih ve saati görüntülemek için de kullanılabilir. `toLocaleString()` yöntemleri farklı argümanlar alır. Bu [bağlantıdan](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString) tarih ve saat hakkında daha fazla bilgi edinebilirsiniz.
+
+#### Döngüler
+
+Bu zorluklarda birçok döngü türünü ele alıyoruz. Normal for döngüsü, while döngüsü, do while döngüsü, for of döngüsü, forEach döngüsü ve for in döngüsü.
+Bunları nasıl kullandığımızı görelim:
+
+```js
+for (let i = 0; i < n; i++){
+ console.log()
+}
+// dizi değişkenlerini tanımlıyoruz
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+// normal for döngüsü kullanarak bir diziyi yineleme
+let len = names.length;
+for(let i = 0; i < len; i++){
+ console.log(names[i].toUpperCase())
+}
+// for of kullanarak bir diziyi yinelemek
+for( const name of names) {
+ console.log(name.toUpperCase())
+}
+// forEach kullanarak bir diziyi yineleme
+names.forEach((name) => name.toUpperCase())
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: ['HTML','CSS','JavaScript','React','Node','MongoDB','Python','D3.js'],
+ isMarried: true
+}
+for(const key in person) {
+ console.log(key)
+}
+```
+
+#### Nesneler
+
+Nesne değişmezini *const* ile tanımlarız.
+
+```js
+// nesne değişmezi tanımlama
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: ['HTML','CSS','JavaScript','TypeScript', 'React','Node','MongoDB','Python','D3.js'],
+ isMarried: true
+}
+// nesne anahtarları aracılığıyla yineleme
+for(const key in person) {
+ console.log(key, person[key])
+}
+```
+
+#### Koşullar
+
+ Önceki zorluklarda if, if else, if else if else, switch ve üçlü operatörleri bahsetmiştik.
+
+ ```js
+ // syntax(sözdimi)
+if (condition) {
+ // kodun bu kısmı doğru koşul için çalıştırılır
+} else {
+ // kodun bu kısmı yanlış koşul için çalıştırılır
+}
+ ```
+
+ ```js
+ // if else
+let num = 3
+if (num > 0) {
+ console.log(`${num} is a positive number`)
+} else {
+ console.log(`${num} is a negative number`)
+}
+// 3 is a positive number
+ ```
+
+ ```js
+ // if else if else if else
+let a = 0
+if (a > 0) {
+ console.log(`${a} is a positive number`)
+} else if (a < 0) {
+ console.log(`${a} is a negative number`)
+} else if (a == 0) {
+ console.log(`${a} is zero`)
+} else {
+ console.log(`${a} is not a number`)
+}
+ ```
+
+ ```js
+ // Daha fazla switch kullanımı
+let dayUserInput = prompt('What day is today ?')
+let day = dayUserInput.toLowerCase()
+switch (day) {
+ case 'monday':
+ console.log('Today is Monday')
+ break
+ case 'tuesday':
+ console.log('Today is Tuesday')
+ break
+ case 'wednesday':
+ console.log('Today is Wednesday')
+ break
+ case 'thursday':
+ console.log('Today is Thursday')
+ break
+ case 'friday':
+ console.log('Today is Friday')
+ break
+ case 'saturday':
+ console.log('Today is Saturday')
+ break
+ case 'sunday':
+ console.log('Today is Sunday')
+ break
+ default:
+ console.log('It is not a week day.')
+}
+ ```
+
+ ```js
+ // ternary (Üçlü)
+ let isRaining = true
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+ ```
+
+#### Sınıflar
+
+Sınıfı büyük harfle başlayan CamelCase ile tanımlıyoruz
+
+```js
+// syntax
+class ClassName {
+ // code goes here
+}
+```
+
+```js
+// sınıfımızı oluşturuyoruz
+class Person {
+ constructor(firstName, lastName) {
+ console.log(this) // buradan çıktı alıyoruz
+ this.firstName = firstName
+ this.lastName = lastName
+ }
+}
+```
+
+Takip ettiğiniz stil kılavuzu ne olursa olsun tutarlı olun. Bazı programlama paradigmalarını ve tasarım modellerini takip edin. Unutmayın, kodunuzu belirli bir düzende veya şekilde yazmazsanız, kodunuzu okumak zor olacaktır. Bu nedenle, okunabilir kod yazarak kendiniz veya kodunuzu okuyacak biri için bir iyilik yapın.
+
+🌕 Düzenlisin. Artık temiz kod yazmayı biliyorsun, böylece İngilizce bilen herkes kodunuzu anlayabilir. Her zaman ilerliyorsunuz ve mükemmelliğe giden yolda 20 adım öndesiniz.
+
+🎉 TEBRİKLER ! 🎉
+
+[<< Gün 19](../19_Day_Closures/19_day_closures.md) | [Gün 21 >>](../21_Day_DOM/21_day_dom.md)
\ No newline at end of file
diff --git a/Turkish/21_Day_DOM/21_day_dom.md b/Turkish/21_Day_DOM/21_day_dom.md
new file mode 100644
index 000000000..e7b37dded
--- /dev/null
+++ b/Turkish/21_Day_DOM/21_day_dom.md
@@ -0,0 +1,409 @@
+
+
+[<< Gün 20](../20_Day_Writing_clean_codes/20_day_writing_clean_codes.md) | [Gün 22 >>](../22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md)
+
+
+
+- [Day 21](#day-21)
+ - [Belge Nesne Modeli (DOM) - Gün 21](#belge-nesne-modeli-dom---gün-21)
+ - [Elementi al](#elementi-al)
+ - [Etiket adına göre elementleri almak](#etiket-adına-göre-elementleri-almak)
+ - [Sınıf adına göre elementleri almak](#sınıf-adına-göre-elementleri-almak)
+ - [Id'ye göre bir elementi almak](#idye-göre-bir-elementi-almak)
+ - [querySelector yöntemi kullanarak elementleri almak](#queryselector-yöntemi-kullanarak-elementleri-almak)
+ - [Öznitelik eklemek](#öznitelik-eklemek)
+ - [setAttribute() metodu kullanarak öznitelik ekleme](#setattribute-metodu-kullanarak-öznitelik-ekleme)
+ - [SetAttribute olmadan öznitelik ekleme](#setattribute-olmadan-öznitelik-ekleme)
+ - [classList kullanarak sınıf ekleme](#classlist-kullanarak-sınıf-ekleme)
+ - [remove kullanarak sınıfı kaldırma](#remove-kullanarak-sınıfı-kaldırma)
+ - [HTML elemanına metin ekleme](#html-elemanına-metin-ekleme)
+ - [textContent kullanarak metin içeriği ekleme](#textcontent-kullanarak-metin-içeriği-ekleme)
+ - [innerHTML kullanarak Metin İçeriği Ekleme](#innerhtml-kullanarak-metin-i̇çeriği-ekleme)
+ - [Metin İçeriği](#metin-i̇çeriği)
+ - [Inner HTML](#inner-html)
+ - [Style elşeöe](#style-elşeöe)
+ - [Style Rengi Ekleme](#style-rengi-ekleme)
+ - [Arka plan rengi ekleme](#arka-plan-rengi-ekleme)
+ - [Yazı tipi boyutu ekleme](#yazı-tipi-boyutu-ekleme)
+ - [Egzersizler](#egzersizler)
+ - [Egzersiz: Level 1](#egzersiz-level-1)
+ - [Egzersiz: Level 2](#egzersiz-level-2)
+ - [Egzersiz: Level 3](#egzersiz-level-3)
+ - [DOM: Mini Proje 1](#dom-mini-proje-1)
+
+# Day 21
+
+## Belge Nesne Modeli (DOM) - Gün 21
+
+HTML belgesi JavaScript nesnesi olarak yapılandırılmıştır. Her HTML elementi farklı özelliklere sahiptir ve bunları manipüle etmek için kullanılabilir. JavaScript kullanarak HTML elementlerini almak, oluşturmak, eklemek veya kaldırmak mümkündür. Örnekler aşağıda incelenebilir. JavaScript ile HTML elementi seçmek, CSS ile seçmek ile benzerdir. HTML elementini seçmek için etiket adı, id, sınıf adı veya diğer öznitelikler kullanılır.
+
+### Elementi al
+
+JavaScript kullanarak zaten oluşturulmuş elementlere veya elementlere erişebiliriz. Elementlere erişmek veya almak için farklı metodlar kullanırız. Aşağıdaki kodda dört _h1_ elementi var. _h1_ elementlerine erişmek için farklı metodları inceleyelim.
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
First Title
+
Second Title
+
Third Title
+
+
+
+
+```
+
+#### Etiket adına göre elementleri almak
+
+**_getElementsByTagName():_** bir etiket adını dize olarak alan bir parametre alır ve bu yöntem bir HTMLCollection nesnesi döndürür. HTMLCollection bir HTML elementlerinin array benzeri bir nesnesidir. Uzunluk özelliği koleksiyonun boyutunu sağlar. Bu yöntemi kullandığımızda, index kullanarak veya her bir öğeyi tek tek geçerek bireysel elementlere erişiriz. HTMLCollection tüm dizi yöntemlerini desteklemez, bu yüzden forEach yerine düzenli for döngüsü kullanmalıyız.
+
+```js
+// syntax
+document.getElementsByTagName('tagname')
+```
+
+```js
+const allTitles = document.getElementsByTagName('h1')
+
+console.log(allTitles) //HTMLCollections
+console.log(allTitles.length) // 4
+
+for (let i = 0; i < allTitles.length; i++) {
+ console.log(allTitles[i]) // prints each elements in the HTMLCollection
+}
+```
+
+#### Sınıf adına göre elementleri almak
+
+**_getElementsByClassName()_** metodu bir HTMLCollection nesnesi döndürür. HTMLCollection, HTML elementlerinin dizi benzeri bir listesidir. Uzunluk özelliği koleksiyonun boyutunu sağlar. Tüm HTMLCollection elementlerini dolaşmak mümkündür. Örnek aşağıda gösterilmektedir.
+
+```js
+//syntax
+document.getElementsByClassName('classname')
+```
+
+```js
+const allTitles = document.getElementsByClassName('title')
+
+console.log(allTitles) //HTMLCollections
+console.log(allTitles.length) // 4
+
+for (let i = 0; i < allTitles.length; i++) {
+ console.log(allTitles[i]) // prints each elements in the HTMLCollection
+}
+```
+
+#### Id'ye göre bir elementi almak
+
+**_getElementsById()_** tek bir HTML elementine yönelir. Id'yi # olmadan bir argüman olarak geçiririz.
+
+```js
+//syntax
+document.getElementById('id')
+```
+
+```js
+let firstTitle = document.getElementById('first-title')
+console.log(firstTitle) //
First Title
+```
+
+#### querySelector yöntemi kullanarak elementleri almak
+
+_document.querySelector_ yöntemi etiket adı, kimlik veya sınıf adına göre HTML veya HTML elementlerini seçebilir.
+
+**_querySelector:_** etiket adı, kimlik veya sınıf tarafından seçilen HTML elementini seçmek için kullanılabilir. Etiket adı kullanılırsa, yalnızca ilk element seçilir.
+
+```js
+let firstTitle = document.querySelector('h1') // select the first available h1 element
+let firstTitle = document.querySelector('#first-title') // select id with first-title
+let firstTitle = document.querySelector('.title') // select the first available element with class title
+```
+
+**_querySelectorAll:_** etiket adı veya sınıf tarafından seçilen html elementlerini seçmek için kullanılabilir. Döndürülen nodeList bir dizi benzeri nesne olup, dizi yöntemlerini destekler. Her nodeList öğesini dolaşmak için **_for döngüsü_** veya **_forEach_** kullanabiliriz.
+
+```js
+const allTitles = document.querySelectorAll('h1') # selects all the available h1 elements in the page
+
+console.log(allTitles.length) // 4
+for (let i = 0; i < allTitles.length; i++) {
+ console.log(allTitles[i])
+}
+
+allTitles.forEach(title => console.log(title))
+const allTitles = document.querySelectorAll('.title') // the same goes for selecting using class
+```
+
+### Öznitelik eklemek
+
+HTML açılır etiketinde bir öznitelik eklenir ve element hakkında ek bilgi verir. Yaygın HTML öznitelikleri: id, class, src, style, href,disabled, title, alt. Dördüncü başlık için id ve class ekleyelim.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles[3].className = 'title'
+titles[3].id = 'fourth-title'
+```
+
+#### setAttribute() metodu kullanarak öznitelik ekleme
+
+**_setattribute()_** metodu, herhangi bir html öznitelik ekler. İki parametre alır: öznitelik türü ve öznitelik adı.
+Dördüncü başlık için class ve id özniteliği ekleyelim.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles[3].setAttribute('class', 'title')
+titles[3].setAttribute('id', 'fourth-title')
+```
+
+#### SetAttribute olmadan öznitelik ekleme
+
+Normalde bir nitelik atamak için normal nesne atama yöntemini kullanabiliriz ancak bu tüm elemanlar için geçerli olmayabilir. Bazı nitelikler DOM nesnesi özellikleridir ve direk olarak atanabilirler. Örneğin, id ve class gibi.
+
+```js
+//another way to setting an attribute
+titles[3].className = 'title'
+titles[3].id = 'fourth-title'
+```
+
+#### classList kullanarak sınıf ekleme
+
+classList yöntemi ek sınıf eklemek için iyi bir yöntemdir. Eğer bir sınıf var ise, orijinal sınıfı geçersiz kılmaz, aksine eleman için ek sınıf ekler.
+
+```js
+//another way to setting an attribute: append the class, doesn't over ride
+titles[3].classList.add('title', 'header-title')
+```
+
+#### remove kullanarak sınıfı kaldırma
+
+Eklemeye benzer şekilde, bir elemandan sınıfı da kaldırabiliriz. Bir elemandan belirli bir sınıfı kaldırabiliriz.
+
+```js
+//another way to setting an attribute: append the class, doesn't over ride
+titles[3].classList.remove('title', 'header-title')
+```
+
+#### HTML elemanına metin ekleme
+
+HTML bir açılış etiketi, bir kapatma etiketi ve bir metin içeriğinden oluşur. Metin içeriğini _textContent_ özelliği veya \*innerHTML kullanarak ekleyebiliriz.
+
+#### textContent kullanarak metin içeriği ekleme
+
+_textContent_ özelliği HTML elemanına metin eklemek için kullanılır.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles[3].textContent = 'Fourth Title'
+```
+
+#### innerHTML kullanarak Metin İçeriği Ekleme
+
+Birçok insan _textContent_ ve _innerHTML_ arasında karışır. _textContent_ bir HTML elemanına metin eklemek için tasarlanmıştır ancak innerHTML bir metin veya HTML elemanı veya elemanları bir çocuk olarak ekleyebilir.
+
+#### Metin İçeriği
+
+Biz bir metin atamak için *textContent* HTML nesne özelliğini kullanırız.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles[3].textContent = 'Fourth Title'
+```
+
+##### Inner HTML
+
+Bir ebeveyn elemana tamamen yeni bir child içeriği eklemek veya değiştirmek istediğimizde innerHTML özelliğini kullanırız. Atadığımız değer HTML elemanlarından oluşan bir dizi olacaktır.
+
+```html
+
+
+
+ JavaScript for Everyone:DOM
+
+
+
+
Asabeneh Yetayeh challenges in 2020
+
30DaysOfJavaScript Challenge
+
+
+
+
+
+```
+
+innerHTML özelliği, bir üst elemanın tüm çocuklarını kaldırmamıza da olanak tanır. removeChild() kullanmak yerine aşağıdaki yöntemi tavsiye ederim.
+
+```html
+
+
+
+ JavaScript for Everyone:DOM
+
+
+
+
Asabeneh Yetayeh challenges in 2020
+
30DaysOfJavaScript Challenge
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Ongoing
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+```
+
+### Style elşeöe
+
+#### Style Rengi Ekleme
+
+Başlıklarımıza biraz stil ekleyelim. Eğer elemanın indisi çift ise ona yeşil renk veririz, aksi halde kırmızı.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles.forEach((title, i) => {
+ title.style.fontSize = '24px' // all titles will have 24px font size
+ if (i % 2 === 0) {
+ title.style.color = 'green'
+ } else {
+ title.style.color = 'red'
+ }
+})
+```
+
+#### Arka plan rengi ekleme
+
+Başlıklarımıza biraz stil ekleyelim. Eğer elemanın indisi çift ise ona yeşil renk veririz, aksi halde kırmızı.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles.forEach((title, i) => {
+ title.style.fontSize = '24px' // all titles will have 24px font size
+ if (i % 2 === 0) {
+ title.style.backgroundColor = 'green'
+ } else {
+ title.style.backgroundColor = 'red'
+ }
+})
+```
+
+#### Yazı tipi boyutu ekleme
+
+Başlıklarımıza biraz stil ekleyelim. Eğer elemanın indisi çift ise ona 20px veririz, aksi halde 30px
+
+```js
+const titles = document.querySelectorAll('h1')
+titles.forEach((title, i) => {
+ title.style.fontSize = '24px' // all titles will have 24px font size
+ if (i % 2 === 0) {
+ title.style.fontSize = '20px'
+ } else {
+ title.style.fontSize = '30px'
+ }
+})
+```
+
+Fark etmişsinizdir, JavaScript içinde kullandığımızda css özellikleri camelCase olarak kullanılır. Aşağıdaki CSS özellikleri background-color'dan backgroundColor, font-size'dan fontSize, font-family'den fontFamily, margin-bottom'dan marginBottom şekilde değişir.
+
+---
+
+🌕 Şimdi, süper güçlerle tamamen şarj oldunuz, zorlu ve önemli en önemli kısmını tamamladınız ve genel olarak JavaScript ile. DOM öğrendiniz ve şimdi uygulamalar inşa etme ve geliştirme yeteneğiniz var. Şimdi beyniniz ve kaslarınız için bazı egzersizler yapın.
+
+## Egzersizler
+
+### Egzersiz: Level 1
+
+1. index.html dosyası oluşturun ve yukarıdaki gibi dört p elemanı koyun: Etiket adını kullanarak **_document.querySelector(tagname)_** ile ilk paragrafı alın
+2. id'lerine göre **_document.querySelector('#id')_** kullanarak her bir paragrafı alın
+3. Etiket adlarına göre **_document.querySelectorAll(tagname)_** kullanarak tüm p elemanlarını nodeList olarak alın
+4. nodeList içinde dolaşın ve her paragrafın metin içeriğini alın
+5. Dördüncü paragrafta metin içeriği olarak **_Fourth Paragraph_** yerleştirin.
+6. Farklı özellik ayarlama yöntemlerini kullanarak tüm paragraflar için id ve sınıf özelliklerini ayarlayın
+
+### Egzersiz: Level 2
+
+1. JavaScript kullanarak her paragrafın stilini değiştirin (örn. renk, arka plan, sınır, yazı tipi boyutu, yazı tipi ailesi)
+2. Tüm paragrafları seçin ve her elemanın içinde dolaşın ve ilk ve üçüncü paragrafı yeşil, ikinci ve dördüncü paragrafı kırmızı renkte verin
+3. Her paragrafın içeriğini, id'sini ve sınıfını ayarlayın
+
+### Egzersiz: Level 3
+
+#### DOM: Mini Proje 1
+
+1. Aşağıdaki uygulamayı geliştirin, başlamak için aşağıdaki HTML elemanlarını kullanın. Başlangıç klasöründe aynı kodu alacaksınız. Tüm stiller ve işlevsellikleri sadece JavaScript kullanarak uygulayın.
+
+ - Yılın rengi her 1 saniyede değişiyor
+ - Tarih ve saat arka plan rengi saniyede bir değişiyor
+ - Tamamlanan meydan okuma arka planı yeşil
+ - Devam eden meydan okuma arka planı sarı
+ - Yaklaşan meydan okumaların arka planı kırmızı
+
+```html
+
+
+
+
+ JavaScript for Everyone:DOM
+
+
+
+
Asabeneh Yetayeh challenges in 2020
+
30DaysOfJavaScript Challenge
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Ongoing
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+```
+
+
+
+
+
+🎉 TEBRİKLER ! 🎉
+
+[<< Gün 20](../Turkish/../20_Day_Writing_clean_codes/20_Day_writing_clean_codes.md) | [Gün 22 >>](../Turkish/../22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md)
\ No newline at end of file
diff --git a/Turkish/21_Day_DOM/21_day_starter/dom_getting_elements_project_1.gif b/Turkish/21_Day_DOM/21_day_starter/dom_getting_elements_project_1.gif
new file mode 100644
index 000000000..055177117
Binary files /dev/null and b/Turkish/21_Day_DOM/21_day_starter/dom_getting_elements_project_1.gif differ
diff --git a/Turkish/21_Day_DOM/21_day_starter/index.html b/Turkish/21_Day_DOM/21_day_starter/index.html
new file mode 100644
index 000000000..0b2f1f431
--- /dev/null
+++ b/Turkish/21_Day_DOM/21_day_starter/index.html
@@ -0,0 +1,26 @@
+
+
+
+
+ 30DaysOfJavaScript:21 Day
+
+
+
+
+
Asabeneh Yetayeh challenges in 2020
+
30DaysOfJavaScript Challenge
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Ongoing
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Turkish/21_Day_DOM/21_day_starter/scripts/main.js b/Turkish/21_Day_DOM/21_day_starter/scripts/main.js
new file mode 100644
index 000000000..e69de29bb
diff --git a/Turkish/22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md b/Turkish/22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md
new file mode 100644
index 000000000..23e01c80b
--- /dev/null
+++ b/Turkish/22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md
@@ -0,0 +1,237 @@
+
+
+[<< Gün 21](../21_Day_DOM/21_day_dom.md) | [Gün 23 >>](../23_Day_Event_listeners/23_day_event_listeners.md)
+
+
+- [Gün 22](#gün-22)
+ - [DOM(Document Object Model)-Gün 2](#domdocument-object-model-gün-2)
+ - [Element Oluşturma](#element-oluşturma)
+ - [Element oluşturma](#element-oluşturma-1)
+ - [Bir üst elemente child ekleme](#bir-üst-elemente-child-ekleme)
+ - [Bir üst ebeveyn(kapsar element) bir child elementi kaldırma](#bir-üst-ebeveynkapsar-element-bir-child-elementi-kaldırma)
+ - [Yukarıdaki kod parçacığı tüm child elementleri temizledi.](#yukarıdaki-kod-parçacığı-tüm-child-elementleri-temizledi)
+ - [Egzersizler](#egzersizler)
+ - [Egzersiz: Level 1](#egzersiz-level-1)
+ - [Egzersiz: Level 2](#egzersiz-level-2)
+ - [Egzersiz: Level 3](#egzersiz-level-3)
+
+# Gün 22
+
+## DOM(Document Object Model)-Gün 2
+
+### Element Oluşturma
+
+HTML element oluşturmak için etiket adını kullanırız. JavaScript kullanarak HTML element oluşturmak oldukça basittir . _document.createElement()_ metodunu kullanırız. Bu metod bir HTML element etiket adını string olarak alır.
+
+```js
+// syntax
+document.createElement('tagname')
+```
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+
+
+```
+
+### Element oluşturma
+
+Birden fazla element oluşturmak için döngü kullanmalıyız. Döngü kullanarak istediğimiz kadar HTML elementi oluşturabiliriz.
+Element oluşturduktan sonra, HTML nesnenin farklı özelliklerine değer atayabiliriz.
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+
+
+```
+
+### Bir üst elemente child ekleme
+
+Oluşturduğumuz elementi HTML'de görmek için, üst element olarak child olarak eklememiz gerekir. HTML'de body'sine *document.body* ile erişebiliriz. *document.body* *appendChild()* metodunu destekler. Aşağıdaki örneğe bakın.
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+
+```
+
+### Bir üst ebeveyn(kapsar element) bir child elementi kaldırma
+
+HTML oluşturduktan sonra, element veya elementleri kaldırmak isteyebiliriz ve *removeChild()* metodunu kullanabiliriz.
+
+**Örnek:**
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Removing child Node
+
Asabeneh Yetayeh challenges in 2020
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Done
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+
+```
+
+Önceki bölümde gördüğümüz gibi, bir üst elementin tüm iç HTML elementlerini veya child elementleri *innerHTML* metodu ve özelliklerini kullanarak ortadan kaldırmak için daha iyi bir yol mevcut.
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Removing child Node
+
Asabeneh Yetayeh challenges in 2020
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Done
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+
+```
+
+Yukarıdaki kod parçacığı tüm child elementleri temizledi.
+---
+
+🌕 Çok özel birisin, her gün ilerliyorsun. Şimdi, ihtiyaç duyduğunda oluşturulmuş bir DOM elementini nasıl yok edeceğini biliyorsun. DOM'u öğrendin ve şimdi uygulamaları inşa etme ve geliştirme becerisine sahipsin. Öğrenme yolunda sadece sekiz gün kaldı. Şimdi beynin ve kasların için bazı egzersizler yap.
+
+## Egzersizler
+
+### Egzersiz: Level 1
+
+1. HTML belgesinde bir div kapsayıcısı oluşturun ve dinamik olarak 0 ila 100 sayılar oluşturun ve kapsayıcı div'e ekleyin.
+ - Çift sayıların arka planı yeşil
+ - Tek sayılar arka planı sarı
+ - Prime numaraları arka planı kırmızı
+
+
+
+### Egzersiz: Level 2
+
+1. Ülkeler dizisini kullanarak tüm ülkeleri görüntüleyin. Tasarımı görün.
+
+
+
+### Egzersiz: Level 3
+
+
+
+Bu projenin gereksinimlerini jpg ve gif görüntülerinden her ikisinden de kontrol edin. Tüm veri ve CSS, yalnızca JavaScript kullanılarak uygulanmıştır. Veri starter klasörü proje_3'de bulunmaktadır. [*Açılır menü*](https://www.w3schools.com/tags/tag_details.asp) düğmesi detaylar HTML öğesi kullanılarak oluşturulmuştur.
+
+
+
+
+
+
+🎉 Tebrikler ! 🎉
+
+[<< Gün 21](../Turkish/../21_Day_DOM/21_day_dom.md) | [Gün 23 >>](../23_Day_Event_listeners/23_day_event_listeners.md)
\ No newline at end of file
diff --git a/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_challenge_info_day_1.1.gif b/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_challenge_info_day_1.1.gif
new file mode 100644
index 000000000..055177117
Binary files /dev/null and b/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_challenge_info_day_1.1.gif differ
diff --git a/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_countries_aray_day_2.2.png b/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_countries_aray_day_2.2.png
new file mode 100644
index 000000000..ca0e3448a
Binary files /dev/null and b/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_countries_aray_day_2.2.png differ
diff --git a/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_day_number_generators_2.1.png b/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_day_number_generators_2.1.png
new file mode 100644
index 000000000..d69a6c208
Binary files /dev/null and b/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_day_number_generators_2.1.png differ
diff --git a/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_mini_project_challenge_info_day_2.3.gif b/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_mini_project_challenge_info_day_2.3.gif
new file mode 100644
index 000000000..571ea6f14
Binary files /dev/null and b/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_mini_project_challenge_info_day_2.3.gif differ
diff --git a/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_mini_project_challenge_info_day_2.3.png b/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_mini_project_challenge_info_day_2.3.png
new file mode 100644
index 000000000..3387beaaa
Binary files /dev/null and b/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_mini_project_challenge_info_day_2.3.png differ
diff --git a/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/project_1/index.html b/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/project_1/index.html
new file mode 100644
index 000000000..9b2e17d2a
--- /dev/null
+++ b/Turkish/22_Day_Manipulating_DOM_object/22_day_starters/project_1/index.html
@@ -0,0 +1,22 @@
+
+
+
+
+ 30DaysOfJavaScript:22 Day: Number Generator
+
+
+
+
+
+[<< Gün 22](../22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md) | [Gün 24 >>](../24_Day_Project_solar_system/24_day_project_solar_system.md)
+
+
+
+- [Gün 23](#gün-23)
+ - [DOM(Document Object Model)-Gün 3](#domdocument-object-model-gün-3)
+ - [Event Listeners](#event-listeners)
+ - [Tıklama](#tıklama)
+ - [Çift tıklama](#çift-tıklama)
+ - [Fare tıklaması](#fare-tıklaması)
+ - [Bir input öğesinden değer alma](#bir-input-öğesinden-değer-alma)
+ - [input değeri](#input-değeri)
+ - [input olayı ve change olayı](#input-olayı-ve-change-olayı)
+ - [blur olayı](#blur-olayı)
+ - [keypress, keydown ve keyup](#keypress-keydown-ve-keyup)
+ - [Egzersizler](#egzersizler)
+ - [Egzersizler: Seviye 1](#egzersizler-seviye-1)
+
+# Gün 23
+
+## DOM(Document Object Model)-Gün 3
+
+### Event Listeners
+
+Ortak HTML olayları: tıklama, değişiklik, fare üzerine gelme, fareyi elementin üzerinden çıkarma, tuşa basma, tuştan el çekme, yükleme.
+
+Herhangi bir DOM nesnesine olay dinleyici yöntemi ekleyebiliriz. HTML öğelerinde farklı olay türlerini dinlemek için **addEventListener()** yöntemini kullanırız. _addEventListener()_ yöntemi, bir olay dinleyicisi ve geri çağırma işlevi olmak üzere iki argüman alır.
+
+```js
+selectedElement.addEventListener("eventlistner", function (e) {
+ // olaydan sonra olmasını istediğiniz aktivite burada olacak
+});
+// or
+
+selectedElement.addEventListener("eventlistner", (e) => {
+ // olaydan sonra olmasını istediğiniz aktivite burada olacak
+});
+```
+
+#### Tıklama
+
+Bir öğeye olay dinleyicisi eklemek için önce öğeyi seçer, ardından **addEventListener()** yöntemini ekleriz. Olay dinleyicisi, olay türünü ve geri çağırma işlevlerini argüman olarak alır.
+
+Aşağıdaki örnek tıklama türü olayın bir örneğidir.
+
+**Örnek: Tıklama**
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
+
+
+
+
+```
+
+Bir olay, doğrudan HTML öğesine satır içi komut dosyası olarak da eklenebilir.
+
+**Örnek: onclick**
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
+
+
+
+```
+
+#### Çift tıklama
+
+Bir öğeye olay dinleyicisi eklemek için önce öğeyi seçeriz, ardından **addEventListener()** yöntemini ekleriz. Olay dinleyicisi, olay türünü ve geri çağırma işlevlerini argüman olarak alır.
+
+Aşağıdaki örnek, tıklama türü olayın bir örneğidir.
+
+**Örnek: dblclick**
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
+
+
+
+```
+
+#### Fare tıklaması
+
+Bir öğeye olay dinleyicisi eklemek için önce öğeyi seçeriz, ardından **addEventListener()** yöntemini ekleriz. Olay dinleyicisi, olay türünü ve geri çağırma işlevlerini argüman olarak alır.
+
+Aşağıdaki örnek, tıklama türündeki bir olayın örneğidir.
+
+**Örnek: mouseenter**
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
+
+
+
+```
+
+Şimdiye kadar `addEventListener` yöntemini ve olay dinleyicisi nasıl ekleyeceğimizi öğrendiniz. Birçok olay dinleyicisi türü vardır ancak burada en önemli ve sık kullanılan olaylara odaklanacağız.
+
+Olay listesi:
+
+- `click` - eleman tıklandığında
+- `dblclick` - eleman çift tıklandığında
+- `mouseenter` - fare noktası öğeye girdiğinde
+- `mouseleave` - fare işaretçisi öğeden ayrıldığında
+- `mousemove` - fare işaretçisi öğe üzerinde hareket ettiğinde
+- `mouseover` - fare işaretçisi öğe üzerinde hareket ettiğinde
+- `mouseout` - fare işaretçisi öğeden dışarı çıktığında
+- `input` - değer giriş alanına girildiğinde
+- `change` - giriş alanında değer değiştiğinde
+- `blur` - öğe odaklanmadığında
+- `keydown` - bir tuş düştüğünde
+- `keyup` - bir anahtar bittiğinde
+- `keypress` - herhangi bir tuşa bastığımızda
+- `onload` - tarayıcı bir sayfayı yüklemeyi bitirdiğinde
+
+Yukarıdaki kod örneğindeki olay türünü değiştirerek yukarıdaki olay türlerini test edebilirsiniz.
+
+### Bir input öğesinden değer alma
+
+Genellikle form doldururuz ve formlar verileri işler. Form alanları, girdi HTML öğesi kullanılarak oluşturulur. İki girdi alanı, bir düğme ve bir `p` etiketi kullanarak bir kişinin vücut kitle indeksini hesaplamamıza izin veren küçük bir uygulama oluşturalım.
+
+### input değeri
+
+```html
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Body Mass Index Calculator
+
+
+
+
+
+
+
+
+```
+
+#### input olayı ve change olayı
+
+Yukarıdaki örnekte, iki girdi alanından verileri düğmeye tıklayarak almayı başardık. Ancak, düğmeye tıklamadan değer almak isterseniz, girdi alanına odaklandığında verileri hemen almak için _change_ veya _input_ olay türünü kullanabiliriz. Bunu nasıl ele alacağımızı görelim.
+
+```html
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Data Binding using input or change event
+
+
+
+
+
+
+
+```
+
+#### blur olayı
+
+_Input_ veya _change_ olaylarının aksine, `blur` olayı girdi alanına odaklı değilken meydana gelir.
+
+```js
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Giving feedback using blur event
+
+
+
+
+
+
+
+
+```
+
+#### keypress, keydown ve keyup
+
+Farklı olay dinleyici türlerini kullanarak klavyenin tüm tuş numaralarına erişebiliriz. `KeyPress`'i kullanalım ve her klavye tuşunun keyCode'unu alalım.
+
+```html
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Turkish/23_Day_Event_listeners/23_day_starters/project_1/scripts/main.js b/Turkish/23_Day_Event_listeners/23_day_starters/project_1/scripts/main.js
new file mode 100644
index 000000000..c6045c836
--- /dev/null
+++ b/Turkish/23_Day_Event_listeners/23_day_starters/project_1/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/Turkish/23_Day_Event_listeners/23_day_starters/project_2/index.html b/Turkish/23_Day_Event_listeners/23_day_starters/project_2/index.html
new file mode 100644
index 000000000..93136da36
--- /dev/null
+++ b/Turkish/23_Day_Event_listeners/23_day_starters/project_2/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+ 30DaysOfJavaScript:23 Day: Keyboard Key
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Turkish/23_Day_Event_listeners/23_day_starters/project_2/scripts/main.js b/Turkish/23_Day_Event_listeners/23_day_starters/project_2/scripts/main.js
new file mode 100644
index 000000000..c6045c836
--- /dev/null
+++ b/Turkish/23_Day_Event_listeners/23_day_starters/project_2/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/Turkish/24_Day_Project_solar_system/24_day_project_solar_system.md b/Turkish/24_Day_Project_solar_system/24_day_project_solar_system.md
new file mode 100644
index 000000000..278d7ffe1
--- /dev/null
+++ b/Turkish/24_Day_Project_solar_system/24_day_project_solar_system.md
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Turkish/25_Day_World_countries_data_visualization_1/25_day_starter/scripts/main.js b/Turkish/25_Day_World_countries_data_visualization_1/25_day_starter/scripts/main.js
new file mode 100644
index 000000000..c6045c836
--- /dev/null
+++ b/Turkish/25_Day_World_countries_data_visualization_1/25_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/Turkish/25_Day_World_countries_data_visualization_1/25_day_world_countries_data_visualization_1.md b/Turkish/25_Day_World_countries_data_visualization_1/25_day_world_countries_data_visualization_1.md
new file mode 100644
index 000000000..d2fe69867
--- /dev/null
+++ b/Turkish/25_Day_World_countries_data_visualization_1/25_day_world_countries_data_visualization_1.md
@@ -0,0 +1,41 @@
+
+
30 Days Of JavaScript: World Countries Data Visualization
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Turkish/26_Day_World_countries_data_visualization_2/26_day_starter/scripts/main.js b/Turkish/26_Day_World_countries_data_visualization_2/26_day_starter/scripts/main.js
new file mode 100644
index 000000000..c6045c836
--- /dev/null
+++ b/Turkish/26_Day_World_countries_data_visualization_2/26_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/Turkish/26_Day_World_countries_data_visualization_2/26_day_world_countries_data_visualization_2.md b/Turkish/26_Day_World_countries_data_visualization_2/26_day_world_countries_data_visualization_2.md
new file mode 100644
index 000000000..cd24f69f8
--- /dev/null
+++ b/Turkish/26_Day_World_countries_data_visualization_2/26_day_world_countries_data_visualization_2.md
@@ -0,0 +1,39 @@
+
+
30 Days Of JavaScript: World Countries Data Visualization 2
+
+
+[2. Gün >>](./02_Day_Data_types/02_day_data_types.md)
+
+
+
+- [30 Günde JavaScript](#30-günde-javascript)
+- [📔 1. Gün](#-1-gün)
+ - [Giriş](#giriş)
+ - [Gereksinimler](#gereksinimler)
+ - [Kurulum](#kurulum)
+ - [Node.js Kurulumu](#nodejs-kurulumu)
+ - [Tarayıcı](#tarayıcı)
+ - [Google Chrome Kurulumu](#google-chrome-kurulumu)
+ - [Google Chrome Konsolu Açmak](#google-chrome-konsolu-açmak)
+ - [Tarayıcı Konsolunda Kod Yazmak](#tarayıcı-konsolunda-kod-yazmak)
+ - [Console.log](#consolelog)
+ - [Çoklu Değişkenler ile Console.log ](#çoklu-değişkenler-ile-consolelog)
+ - [Yorumlar](#yorumlar)
+ - [Sözdizimi](#sözdizimi)
+ - [Aritmetik İşlemler](#aritmetik-i̇şlemler)
+ - [Kod Editörü](#kod-editörü)
+ - [Visual Studio Code Kurulumu](#visual-studio-code-Kurulumu)
+ - [Visual Studio Code Kullanımı](#visual-studio-code-kullanımı)
+ - [Bir Web Sayfasında JavaScript Kodları Oluşturma](#bir-web-sayfasında-javascript-kodları-oluşturma)
+ - [Satır İçi Oluşturma](#satır-İçi-oluşturma)
+ - [Sayfa İçi Oluşturma](#dahili-oluşturma)
+ - [Dış Dosyadan Oluşturma](#harici-oluşturma)
+ - [Birden Fazla Dış Dosyadan Oluşturma](#çoklu-harici-oluşturma)
+ - [Veri Türlerine Giriş](#veri-türlerine-giriş)
+ - [Sayılar](#sayılar)
+ - [String](#string)
+ - [Boolean](#boolean)
+ - [Tanımsız](#tanımsız)
+ - [Null(Boş)](#nullboş)
+ - [Veri Türlerini Konrol Etme](#veri-türlerini-kontrol-etme)
+ - [Tekrardan Yorumlar](#tekrardan-yorumlar)
+ - [Değişkenler](#değişkenler)
+- [💻 1. Gün: Egzersizler](#-1-gün-egzersizler)
+
+# 📔 1. Gün
+
+## Giriş
+
+30 Günlük JavaScript programlama kursuna katılmaya karar verdiğiniz için **tebrikler**. Bu kursta, bir JavaScript programcısı olmak için ihtiyacınız olan her şeyi ve genel olarak tüm programlama kavramınlarını öğreneceksiniz. Eğitimin sonunda 30 Günlük JavaScript programlama kursu tamamlama sertifikası alacaksınız. Yardıma ihtiyacınız olması veya başkalarına yardım etmek istemeniz durumunda [telegram grubuna](https://t.me/ThirtyDaysOfJavaScript) katılabilirsiniz.
+
+**30GündeJavaScript** eğitimi, hem yeni başlayanlar için hem de uzman JavaScript geliştiricileri için rehber niteliği taşımaktadır. JavaScript'e Hoş Geldiniz. JavaScript web'in dilidir. JavaScript'i kullanmaktan ve öğretmekten zevk alıyorum, umuyorum siz de öğrenirken ve kullanırken zevk alacaksınız.
+
+Bu adım adım JavaScript kursunda, insanlık tarihindeki en popüler programlama dili olan JavaScript'i öğreneceksininiz.
+JavaScript **_web sitelerine interaktiflik katmak, mobil-masaüstü-oyun uygulamaları geliştirmek_** için, hatta günümüzde JavaScript ile **_makina öğrenimi_** ve **_Yapay Zeka_** uygulamaları da geliştirebilirsiniz.
+**_JavaScript (JS)_** son yıllarda popülaritesi artırarak altı yıl üst üste lider ve Github'da en çok kullanılan programlama dili olmuştur.
+
+## Gereksinimler
+
+Bu kursu takip etmek için önceden programlama bilgisine sahip olmanıza gerek yoktur. Sadece ihtiyacınız olanlar şunlardır:
+
+1. Motivasyon
+2. Bir bilgisayar
+3. İnternet
+4. Bir tarayıcı
+5. Bir kod editörü
+
+## Kurulum
+
+Bir geliştirici olmak için motivasyonunuz ve güçlü bir arzunuz olduğuna inanıyorum. Eğer bilgisayar ve İnternete sahipseniz, artık başlamak için her şeye sahipsiniz.
+
+### Node.js Kurulumu
+
+Şu aşamada belki Node.js'e ihtiyacınız olmayabilir, fakat ilerisi için ihtiyacınız olacaktır. Dilerseniz şuan [node.js](https://nodejs.org/en/) yükleyebilirsiniz.
+
+
+
+Görseldeki web sitesinden son sürümü indirin ve çift tıklayarak bilgisayarınıza yükleyin.
+
+
+
+Node.js'i başarılı bir şekilde yüklediğinizi kontrol etmek için komut satırı(cmd) ya da terminal ekranınızda aşağıdaki komutu kullanabilirsiniz.
+
+```sh
+asabeneh $ node -v
+v12.14.0
+```
+
+Bu eğitimi hazırlarken Node.js'in 12.14.0 sürümünü kullanıyordum. Muhtemelen sizin kullanacağınız sürüm çok daha güncel olacaktır.
+
+### Tarayıcı
+
+Kullanabileceğiniz çok sayıda tarayıcı bulunmaktadır. Ancak, kesinlikle Google Chrome tarayıcısını kullanmanızı öneriyorum.
+
+#### Google Chrome Kurulumu
+
+[Google Chrome](https://www.google.com/chrome/) yükleyin. Tarayıcı konsoluna küçük JavaScript kodları yazabiliriz, ancak uygulamaları geliştirmek için tarayıcı konsolunu kullanmayız.
+
+
+
+#### Google Chrome Konsolu Açmak
+
+Tarayıcının sağ üst köşesindeki üç noktaya tıkladıktan sonra, _Diğer Araçlar -> Geliştirici Araçları_ öğesine ulaşarak veya F12 kısayolu kullanarak geliştirici araçlarını açabilirsiniz. Ben kısayolu kullanmayı tercih ediyorum.
+
+
+
+Geliştiri araçları kısmındaki consol sekmesine erişmek için aşağıdaki kısayolu kullanabilirsiniz.
+
+```sh
+Mac
+Command+Option+J
+
+Windows/Linux:
+Ctl+Shift+J
+```
+
+
+
+Google Chrome konsolunu açtıktan sonra görseldeki sekmeleri keşfetmeye çalışın. Zamanımızın çoğunu Konsolda geçireceğiz. Konsol, JavaScript kodlarımızı çalıştırabileceğimiz alandır. Google Console V8 motoru, JavaScript kodumuzu makine koduna Dönüştürerek makine ile iletişim kurmamızı sağlar. Google Chrome konsoluna bir JavaScript kodu yazalım:
+
+
+
+#### Tarayıcı Konsolunda Kod Yazmak
+
+Google konsoluna veya herhangi bir tarayıcı konsoluna, herhangi bir JavaScript kodu yazabiliriz. Fakat, bu eğitimde yalnızca Google Chrome konsoluna odaklanacağız. Aşağıdaki kısa yolları kullanarak konsolunuzu açın:
+
+```sh
+Mac
+Command+Option+I
+
+Windows:
+Ctl+Shift+I
+```
+
+##### Console.log
+
+İlk JavaScript kodumuzu yazmak için, yerleşik bir fonksiyon olan **console.log()** fonksiyonunu kullandık. Çıktı ekranına `'Hello, World!'` cümlesini console.log() fonksiyonu kullanarak yazırdık.
+
+```js
+console.log("Hello, World!");
+```
+
+##### Çoklu Değişkenler ile Console.log
+
+**console.log()** fonksiyonu virgülle ayrılmış birden fazla parametre alabilir. Kullanımı şu şekildedir:**`console.log(param1, param2, param3)`**
+
+
+
+```js
+console.log("Hello", "World", "!");
+console.log("HAPPY", "NEW", "YEAR", 2020);
+console.log("Welcome", "to", 30, "Days", "Of", "JavaScript");
+```
+
+Yukarıdaki kod parçacığından da görebileceğiniz gibi, _`console.log()`_ birden çok değişken veri türü alabilir.
+
+Tebrikler! İlk JavaScript kodunuzu _`console.log()`_ kullanarak yazdınız.
+
+##### Yorumlar
+
+Kodumuza yorum ekleyebiliriz. Yorumlar, kodu daha okunabilir hale getirmek ve kodumuzda açıklamalar bırakmak için çok önemlidir. JavaScript, kodumuzun yorum bölümünü çalıştırmaz. JavaScript'te `//` ile başlayan satırlar ve `/*...*/` işaretler arasında yer alan herhangi metinler yorum olarak algılanır.
+
+**Örnek: Tek Satırlı Açıklama**
+
+```js
+// Bu ilk yorum
+// Bu ikinci yorum
+// Ben tek satırlık bir yorumum
+```
+
+**Örnek: Çok Satırlı Açıklama**
+
+```js
+/*
+ Bu çok satırlı bir yorumdur
+ Çok satırlı yorumlar birden çok satır alabilir
+ JavaScript web'in dilidir
+ */
+```
+
+##### Sözdizimi
+
+Programlama dilleri insan dillerine benzer. Türkçe veya diğer birçok dil, anlamlı bir mesaj iletmek için kelimeler, deyimler, cümleler, birleşik cümleler ve daha fazlasını kullanır. Sözdiziminin Türkçedeki anlamı, bir dilde cümleler oluşturmak için sözcüklerin dilbilgisi kurallarına göre dizilişi, sıralanışıdır. Sözdiziminin teknik tanımına baktığımızda, bir bilgisayar dilindeki ifadelerin yapısıdır. Programlama dillerinin kendilerine özgü sözdizimleri vardır. JavaScript bir programlama dilidir ve diğer programlama dilleri gibi kendi sözdizimine sahiptir. Kodlarımızı JavaScript'in anladığı sözdizimi kuralları çerçevesinde yazmaz isek, farklı türde hatalar ortaya çıkar. Farklı JavaScript hata türlerini daha sonra keşfedeceğiz ve açıklayacağız. Şimdilik sözdizimi hatalarını basitçe görelim.
+
+
+
+Görselde görülen şekilde kasıtlı olarak hatalar yaptım. Hatalar sonucunda konsol bize sözdizimi hataları verdi. Aslında, uyarı metinleri bilgilendiricidir. Ne tür bir hata yapıldığını bildiririrler. Bu hata mesajlarını okuyarak yapmış olduğumuz sözdizim hatasını düzeltebilir ve sorunları çözebiliriz. Bir programdaki hataları tanımlama ve kaldırma işlemine hata ayıklama denir(debugging). Hataları düzeltelim:
+
+```js
+console.log("Hello, World!");
+console.log("Hello, World!");
+```
+
+Şimdiye kadar,_`console.log()`_ kullanarak metnin nasıl görüntüleneceğini gördük. Eğer _`console.log()`_ kullanarak metin yazdırmak istiyor isek, metni tek tırnak, çift tırnak veya ters tırnak işaretleri içiresine almamız gerekir.
+**Örnek:**
+
+```js
+console.log("Hello, World!");
+console.log("Hello, World!");
+console.log(`Hello, World!`);
+```
+
+#### Aritmetik İşlemler
+
+Şimdi, Google Chrome konsolunda sayı veri türleri için _`console.log()`_ kullanarak JavaScript kodları yazma konusunda daha fazla pratik yapalım.
+JavaScript kullanarak matematiksel hesaplamalar da yapabiliriz. Aşağıdaki basit hesaplamaları yapalım.
+Konsolda **_console.log()_** işlevi olmadan doğrudan işlemler yaptırabiliriz. Ancak, buna ilişkin kullanımlar, bu eğitimde açıklanmamıştır, çünkü eğitimimiz boyuncu biz bu fonksiyonları hep bir kod editöründe kullanacağız. Dilerseniz konsola doğrudan sayıları yazarak da işlemleri gerçekleştirebilirsiniz.
+
+
+
+```js
+console.log(2 + 3); // Toplama
+console.log(3 - 2); // Çıkarma
+console.log(2 * 3); // Çarpma
+console.log(3 / 2); // Bölme
+console.log(3 % 2); // Mod Alma
+console.log(3 ** 2); // ;Üs Alma 3 ** 2 == 3 * 3
+```
+
+### Kod Editörü
+
+Kodlarımızı tarayıcı konsoluna yazabiliriz, ancak daha büyük projeler için böyle bir şey yapmamız mümkün olamaz. Gerçek bir çalışma ortamında, geliştiriciler kodlarını yazmak için farklı kod düzenleyicileri kullanırlar. Bu 30günlükJavaScript eğitiminde Visual Studio Code editörünü kullanacağız.
+
+#### Visual Studio Code Kurulumu
+
+Çok popüler ve açık kaynak kodlu olan Visual Studio Code(Metin Düzenleyicisi)'u tavsiye ederim. [download Visual Studio Code](https://code.visualstudio.com/), Fakat başka editörler kullanıyorsanız, kullanıdığınız editör ile devam edebilirsin.
+
+
+
+Visual Studio Code yüklediyseniz, kullanmaya başlayalım.
+
+#### Visual Studio Code Kullanımı
+
+Visual Studio Kodunu açtığınızda, görseldeki gibi bir arayüz açılacaktır. Görsellerde belrtilen simgelerle uğraşarak özellikleri hakkında deneyim edinebilirsiniz.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Bir Web Sayfasında JavaScript Kodları Oluşturma
+
+JavaScript bir web sayfasına üç farklı şekilde eklenebilir:
+
+- **_Satır İçi oluşturma_**
+- **_Dahili oluşturma_**
+- **_Harici oluşturma_**
+- **_Çoklu Harici oluşturma_**
+
+Aşağıdaki bölümlerde web sayfanıza JavaScript kodu eklemenin farklı yolları gösterilmektedir.
+
+### Satır İçi Oluşturma
+
+Masaüstünüzde veya istediğiniz herhangi bir yerde, bir proje klasörü oluşturun. Klasör adına 30GundeJS adını verebilirsiniz, klasör içerisinde _`index.html`_ dosyası oluşturun. Sonrasında aşağıdaki kodu yapıştırın ve bu _.html_ uzantılı dosyayı [Chrome](https://www.google.com/chrome/) gibi bir tarayıcıda açın.
+
+```html
+
+
+
+ 30DaysOfScript: Satır İçi script
+
+
+
+
+
+```
+
+Şimdi, ilk satır içi script dosyanızı yazdınız. JavaScript yerleşik fonksiyon olan _`alert ()`_ kullanarak,bir açılır uyarı mesajı oluşturabiliriz
+
+### Dahili Oluşturma
+
+Dahili scripti _`head`_ veya _`body`_ etiketleri arasına yazılabilir, ancak bunun HTML belgesinin body kısmına yazılması tercih edilir. Öncelikle sayfanın _`head`_ kısmına yazalım.
+
+```html
+
+
+
+ 30GündeScript:Dahili Script
+
+
+
+
+```
+
+Çoğu zaman dahili bir scripti bu şekilde yazarız. JavaScript kodunun, html sayfamızın _`body`_ kısmına yazılması en çok tercih edilen seçenektir. _`Console.log()`_ çıktısını görmek için tarayıcınızın konsolunu açınız.
+
+```html
+
+
+
+ 30GündeScript:Dahili Script
+
+
+
+
+
+
+```
+
+_`console.log()`_ çıktısını görmek için tarayıcı konsolunu açın.
+
+
+
+### Harici Oluşturma
+
+Dahili scripte benzer şekilde, harici sicript bağlantısı da head etiketleri arasında veya body etiketleri arasında olabilir, ancak body etiketleri arasına eklenmesi tercih edilir.
+Öncelikle '.js' uzantılı harici bir JavaScript dosyası oluşturmalıyız. '.js' uzantılı tüm dosyalar JavaScript dosyalarıdır. Proje klasörü içersine 'introdiction.js' adında bir dosya oluşturun ve içine aşağıdaki kodu yazın. Ardından bu oluşturduğunuz 'introdiction.js' dosyanızı, html sayfanızdaki head veya body etiketinin arasına ekleyerek, 'introdiction.js' adlı JavaScript dosyamızı tanıtalım.
+
+```js
+console.log("30GündeJavaScript'e hoş geldiniz!");
+```
+
+Harici script dosyasının _head_ etiketi arasında tanımlama:
+
+```html
+
+
+
+ 30GündeJavaScript:Harici script
+
+
+
+
+```
+
+Harici script dosyasının _body_ etiketi arasında tanımlama:
+
+```html
+
+
+
+ 30GündeJavaScript:Harici script
+
+
+
+
+
+
+
+```
+
+_`console.log()`_ çıktısını görmek için tarayıcı konsolunu açın.
+
+### Çoklu Harici Oluşturma
+
+Ayrıca birden çok harici JavaScript dosyasını da bir web sayfası içerisine bağlayabiliriz.
+Oluşturduğumuz proje klasörü içerisine yeniden `helloworld.js` isimli bir JavaScript dosyası oluşturalım.
+
+```js
+console.log("Hello, World!");
+```
+
+```html
+
+
+
+ Çoklu Harici Scriptler
+
+
+
+
+
+
+```
+
+_ana.js dosyanız, diğer tüm .js dosyalarınızın altında olmalıdır_. Derleme yapılırken satırlar yukarıdan aşağıya okunduğu için ana JavaScript dosyanınız en son okunması önem taşımaktadır.
+
+
+
+## Veri Türlerine Giriş
+
+JavaScript'te ve diğer programlama dillerinde, farklı tiplerde veri türleri vardır. JavaScript ilkel veri tipleri şunlardır: _String(metin), Number(sayı), Boolean(T-F), undefined(tanımsız), NulL(boş)_, ve _Symbol(sembol)_.
+
+### Sayılar
+
+- Tam sayılar: Integer (sıfır dahil negatif ve pozitif)
+ Örnek:
+ ... -3, -2, -1, 0, 1, 2, 3 ...
+- Ondalıklı sayılar: (Float / Decimal)
+ Example
+ ... -3.5, -2.25, -1.0, 0.0, 1.1, 2.2, 3.5 ...
+
+### String
+
+Tek tırnak, çift tırnak veya ters tırnak(backtick) arasında yer alan, bir veya daha fazla karakterden oluşan metinsel değerlerdir.(Her tür karakterleri içerisinde barındırabilir.)
+
+**Örnek:**
+
+```js
+"a";
+"Asabeneh";
+'YusufAgca';
+"Turkey-ATATÜRK";
+'JavaScript güzel bir programlama dilidir';
+"Öğrenmeyi seviyorum";
+`Unutma, ayrıca bir ters tırnak kullanarak bir dize de oluşturabiliriz`;
+("string veri türü, bir karakter kadar küçük, sayfalar kadar büyük olabilir.");
+```
+
+### Boolean
+
+Boolean veri türü, yalnızca True(doğru) veya False(yanlış) bir değer alır-dönderir.
+
+**Örnek:**
+
+```js
+true; // ışık yanıyorsa, değer doğrudur
+false; // ışık kapalıysa, değer yanlıştır
+```
+
+### Tanımsız
+
+JavaScript'te, bir değişkene bir değer atamaz isek, değeri undefined olarak alır. Buna ek olarak, bir fonksiyon hiçbir şey döndürmüyorsa, döndereceği tanım 'undefined' tır.
+
+```js
+let ismim;
+console.log(ismim); // undefined, çünkü henüz değişkene bir değer atanmamış.
+```
+
+### Null(Boş)
+
+JavaScript'te 'null' boş bir değer anlamına gelir.
+
+```js
+let bosDeger = null;
+```
+
+## Veri Türlerini Kontrol Etme
+
+Bir değişkenin veri türünü kontrol etmek için **typeof** operatörünü kullanırız. Aşağıdaki örneğe bakın.
+
+```js
+console.log(typeof "Asabeneh"); // string
+console.log(typeof 5); // number
+console.log(typeof true); // boolean
+console.log(typeof null); // object type
+console.log(typeof undefined); // undefined
+```
+
+## Tekrardan Yorumlar
+
+JavaScript'te yorum yapmanın diğer programlama dillerine benzer olduğunu unutmayın. Kodunuzu daha okunabilir hale getirmek için yorumlar önemlidir.
+Yorum yapmanın iki yolu vardır:
+
+- _Tek satırlı yorum_
+- _Çok satırlı yorum_
+
+```js
+// Bu satırda istediğiniz yorumu bırakabilirsiniz.
+// Bu fonksiyonun amacı sayıları hesaplar.
+// İlerde kodunuzu rahat anlayabilmek için yorumlar bırakmaya özen gösterin.
+```
+
+Çok satırlı yorum:
+
+```js
+/*
+ let konum = 'İstabul';
+ let age = "34";
+ let evliMi = true;
+ Bu kısım çok satırlı yorum bloğudur.
+*/
+```
+
+## Değişkenler
+
+Değişkenlere veri _kapsayıcılar_ diyebiliriz. Unutmayınız ki değişkenler, verileri belleklerde(_Ram_) saklar. Bir değişken atandığında belleklerde kendisi için yer ayrılır. Bir değişkene bir değer(veri) atandığında, bellek alanı bu verilerle doldurulur. Değişken tanımlamak için, _var_, _let_, veya _const_ Anahtar kelimelerini(keywords) kullanırız.
+
+Değişken değerinin kodumuzun farklı yerlerinde değiştirilmesi gerekiyorsa, _let_ kullanırız. Eğer değişken verisi hiçbir yerde değişmeyecek ise bu durumda _const_ kullanırız. Örneğin, Pi sayısı, ülke adları veya yerçekimi ivmesi gibi değişmeyen, sabit değerler için _const_ kullanırız. Bu eğitimde _var_ kullanmayacağız ve kullanmanızı tavsiye etmiyorum. Çok fazla sızıntısı olduğundan dolayı _var_ değişken tanımlayıcısını kullanmanız hatalara sebep olacaktır. Var, let ve const hakkında diğer bölümlerde(Scope) ayrıntılı olarak konuşacağız. Şimdilik, yukarıdaki açıklama işimizi görecektir.
+
+Geçerli bir JavaScript değişken adı aşağıdaki kurallara uymalıdır:
+
+- JavaScript değişken adı bir sayı ile başlamamalıdır.
+- JavaScript değişken adı, dolar işareti ve alt çizgi dışında özel karakterlere izin vermez.(Türkçe karakterlere özellike dikkat ediniz.)
+- JavaScript değişken adı, camelCase kuralına uymalı.
+- JavaScript değişken adı sözcükler arasında boşluk olmamalıdır.
+
+Aşağıda geçerli JavaScript değişkenlerine örnekler verilmiştir.
+
+```js
+ad;
+soyAd;
+ulke;
+sehir;
+anneAdi;
+age;
+evliMi;
+
+soy_ad;
+evli_mi;
+anne_adi;
+
+sayi1;
+sayi_1;
+_sayi_1;
+$sayi1;
+yil2020;
+yil_2020;
+```
+
+Listenin ilk bölümünde belirtilen değişken isimleri JavaScript'te camelCase bildirim kuralına uyularak yazılmıştır. Bu eğitimde, camelCase değişken adı yazım kurallarını uygulayacağız.
+
+Geçersiz değişken adlarına örnek:
+
+```js
+ first-name
+ 1_num
+ num_#_1
+```
+
+Şimdi değişkenleri farklı veri tipleriyle birlikte tanımlayalım. Bir değişken tanımlamak için değişken adından önce _let_ veya _const_ anahtar kelimelerini kullanmamız gerekir. Değişken adının ardından eşittir işareti (atama operatörü) ve bir değer (atanmış veri) yazarız.
+
+```js
+// Sözdizimi
+let degiskenAdi = degeri;
+```
+
+Değişkenin adı, farklı değer verilerini depolayabilir. Ayrıntılı örnekler için aşağıya bakın.
+
+**Değişken tanımlama örnekleri**
+
+```js
+// Farklı veri türlerinin, farklı değişkenlerini tanımlama
+let ad = "Yusuf"; // bir kişinin adı
+let soyAd = 'Agca'; // bir kişinni soyadı
+let ulke = "Türkiye"; // ülke
+let sehir = "Ankara"; // başkent
+let yas = 27; // yaş
+let instagram = "@yusuffagcaa" // instagram adresi
+let evliMi = false;
+
+console.log(ad, soyAd, ulke, sehir, yas, instagram, evliMi);
+```
+
+```sh
+Yusuf Agca Türkiye İstanbul 27 @yusuffagcaa false
+```
+
+```js
+// Değişkenlere sayı değerleri tanımlama
+let yas = 100; // yas
+const yerCekim = 9.81; // m/s2 cinsinden yer çekimi değeri
+const kaynamaNoktasi = 100; // °C cinsinden suyun kaynama noktası
+const PI = 3.14; // geometrik sabit
+console.log(yerCekim, kaynamaNoktasi, PI);
+```
+
+```sh
+9.81 100 3.14
+```
+
+```js
+// Birden fazla değişkenleri virgül ile ayırarak tek satırda tanımlayabiliriz. Ancak ayrı satırlarda tanımlamak, kodu daha okunabilir kıldığı için tavsiye ederim.
+let isim = "YunusKaraman",
+ is = "Lokmacı",
+ konum = "Bagcılar";
+console.log(isim, is, konum);
+```
+
+```sh
+YunusKaraman Lokmacı Bagcılar
+```
+
+01-Day klasörü içindeki _index.html_ dosyasını tarayıcınızda açtığınızda, şu sonucu alıyor olacaksınız:
+
+
+
+🌕 Harikasınız! 1. gün eğitimini tamamladınız ve mükemmel olma yolundasınız. Şimdi beyniniz ve kasınız için bazı egzersizler yapın.
+
+# 💻 1. Gün: Egzersizler
+
+1. _"Yorumlar kodu okunabilir hale getirmeye yardımcı olur"_ yazan tek satırlı bir yorum yazın
+2. _"30GundeJavaScript eğitimine hoş geldiniz"_ yazan başka bir yorum satırı oluşturun
+3. _"Yorumlar kodu okunabilir, yeniden kullanımı kolay ve bilgilendirici bir hale getirir."_ yazılı, birden çok satıra yayılmış çok satırlı bir yorum yazın
+
+4. Bir degisken.js isimli dosya oluşturun ve bu _.js_ dosyasında string, boolean, undefined ve null veri türlerinde değişkenler oluşturun
+5. Bir veriturleri.js isimli dosya oluşturun farklı veri türlerindeki verileri kontrol etmek için JavaScript **_typeof_** operatörünü kullanın.
+6. Herhangi bir değer ataması yapmadan dört adet değişken yazın
+7. Oluşturduğunuz değişkenlere değer ataması yapın
+8. Adınızı, soyadınızı, medeni durumunuzu, ülkenizi ve yaşınızı birden çok satırda olacak şekilde saklamak için değişkenleri ve değerlerini oluşturun
+9. Adınızı, soyadınızı, medeni durumunuzu, ülkenizi ve yaşınızı tek bir satırda olacak şekilde saklamak için değişkenleri ve değerlerini oluşturun
+10. _benimYasim_ ve _seninYasin_ adlı iki değişken oluşturun ve bunlara aşağıdaki değerleri atayın. Ardından bunları tarayıcının konsolunda çalıştırın
+
+```sh
+Ben 25 Yaşındayım.
+Sen 30 Yaşındasın.
+```
+
+🎉 TEBRİKLER ! 🎉
+
+[2. Gün >>](./02_Day_Data_types/02_day_data_types.md)
diff --git a/Vietnamese/02_Day_Data_types/02_day_data_types.md b/Vietnamese/02_Day_Data_types/02_day_data_types.md
new file mode 100644
index 000000000..64b5feab3
--- /dev/null
+++ b/Vietnamese/02_Day_Data_types/02_day_data_types.md
@@ -0,0 +1,979 @@
+
+
+
+[<< Ngày 1](../README.md) | [Ngày 3 >>](../03_Day_Booleans_operators_date/03_booleans_operators_date.md)
+
+
+
+- [📔 Ngày 2](#-day-2)
+ - [Kiểu dữ liệu](#data-types)
+ - [Kiểu dữ liệu nguyên thuỷ](#primitive-data-types)
+ - [Kiểu dữ liệu không nguyên thủy](#non-primitive-data-types)
+ - [Số](#numbers)
+ - [Khai báo kiểu dữ liệu Number](#declaring-number-data-types)
+ - [Đối tượng math](#math-object)
+ - [Tạo số ngẫu nhiên](#random-number-generator)
+ - [Chuỗi](#strings)
+ - [Nối chuỗi](#string-concatenation)
+ - [Nối chuỗi bằng toán tử cộng](#concatenating-using-addition-operator)
+ - [Chuỗi dài](#long-literal-strings)
+ - [Chuỗi thoát trong Strings](#escape-sequences-in-strings)
+ - [Template Literals (Template Strings)](#template-literals-template-strings)
+ - [Phương thức chuỗi](#string-methods)
+ - [Xác định kiểu dữ liệu và truyền](#checking-data-types-and-casting)
+ - [Kiểm tra kiểu dữ liệu](#checking-data-types)
+ - [Thay đổi kiểu dữ liệu (Truyền)](#changing-data-type-casting)
+ - [String thành Int](#string-to-int)
+ - [String thành Float](#string-to-float)
+ - [Float thành Int](#float-to-int)
+ - [💻 Day 2: Bài tập](#-day-2-exercises)
+ - [Bài tập: Cấp độ 1](#exercise-level-1)
+ - [Bài tập: Cấp độ 2](#exercise-level-2)
+ - [Bài tập: Cấp độ 3](#exercises-level-3)
+
+# 📔 Ngày 2
+
+## Kiểu dữ liệu
+
+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. 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ỷ
+
+Các kiểu dữ liệu nguyên thuỷ trong JavaScript bao gồm:
+
+ 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ị
+
+Các kiểu dữ liệu không nguyên thủy trong JavaScript bao gồm:
+
+1. Objects
+2. Functions
+3. Arrays
+
+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:**
+
+```js
+let word = 'JavaScript'
+```
+
+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'
+```
+
+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:
+
+```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
+```
+
+### Kiểu dữ liệu không nguyên thuỷ
+
+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]
+nums[0] = 10
+
+console.log(nums) // [10, 2, 3]
+```
+
+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]
+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
+```
+
+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]
+let numbers = nums
+
+console.log(nums == numbers) // true
+
+let userOne = {
+name:'Asabeneh',
+role:'teaching',
+country:'Finland'
+}
+
+let userTwo = userOne
+
+console.log(userOne == userTwo) // true
+```
+
+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ố.
+
+## Số
+
+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.
+Hãy xem một số ví dụ về Số.
+
+### Khai báo kiểu dữ liệu số
+
+```js
+let age = 35
+const gravity = 9.81 // we use const for non-changing values, gravitational constant in m/s2
+let mass = 72 // mass in Kilogram
+const PI = 3.14 // pi a geometrical constant
+
+// More Examples
+const boilingPoint = 100 // temperature in oC, boiling point of water which is a constant
+const bodyTemp = 37 // oC average human body temperature, which is a constant
+
+console.log(age, gravity, mass, PI, boilingPoint, bodyTemp)
+```
+
+### Đối tượng Math
+
+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
+
+console.log(PI) // 3.141592653589793
+
+// Rounding to the closest number
+// if above .5 up if less 0.5 down rounding
+
+console.log(Math.round(PI)) // 3 to round values to the nearest number
+
+console.log(Math.round(9.81)) // 10
+
+console.log(Math.floor(PI)) // 3 rounding down
+
+console.log(Math.ceil(PI)) // 4 rounding up
+
+console.log(Math.min(-5, 3, 20, 4, 5, 10)) // -5, returns the minimum value
+
+console.log(Math.max(-5, 3, 20, 4, 5, 10)) // 20, returns the maximum value
+
+const randNum = Math.random() // creates random number between 0 to 0.999999
+console.log(randNum)
+
+// Let us create random number between 0 to 10
+
+const num = Math.floor(Math.random () * 11) // creates random number between 0 and 10
+console.log(num)
+
+//Absolute value
+console.log(Math.abs(-10)) // 10
+
+//Square root
+console.log(Math.sqrt(100)) // 10
+
+console.log(Math.sqrt(2)) // 1.4142135623730951
+
+// Power
+console.log(Math.pow(3, 2)) // 9
+
+console.log(Math.E) // 2.718
+
+// Logarithm
+// Returns the natural logarithm with base E of x, Math.log(x)
+console.log(Math.log(2)) // 0.6931471805599453
+console.log(Math.log(10)) // 2.302585092994046
+
+// Returns the natural logarithm of 2 and 10 respectively
+console.log(Math.LN2) // 0.6931471805599453
+console.log(Math.LN10) // 2.302585092994046
+
+// Trigonometry
+Math.sin(0)
+Math.sin(60)
+
+Math.cos(0)
+Math.cos(60)
+```
+
+#### Tạo số ngẫu nhiên
+
+Đố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...
+```
+
+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
+let numBtnZeroAndTen = randomNum * 11
+
+console.log(numBtnZeroAndTen) // this gives: min 0 and max 10.99
+
+let randomNumRoundToFloor = Math.floor(numBtnZeroAndTen)
+console.log(randomNumRoundToFloor) // số từ 0 đến 10
+```
+
+## Chuỗi
+
+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
+let firstName = 'Asabeneh'
+let lastName = 'Yetayeh'
+let country = 'Finland'
+let city = 'Helsinki'
+let language = 'JavaScript'
+let job = 'teacher'
+let quote = "The saying,'Seeing is Believing' is not correct in 2020."
+let quotWithBackTick = `The saying,'Seeing is Believing' is not correct in 2020.`
+```
+
+### Nối chuỗi
+
+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; // nối hai chuỗi với nhau.
+console.log(fullName);
+```
+
+```sh
+Asabeneh Yetayeh
+```
+
+Chúng ta có thể nối các chuỗi theo nhiều cách khác nhau.
+
+#### Sử dụng toán tử cộng để nối chuỗi
+
+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
+// 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'
+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
+```
+
+#### Chuỗi dài
+
+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.\
+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)
+```
+
+#### Chuỗi thoát trong Strings
+
+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
+- \\\\: Back slash
+- \\': Single quote (')
+- \\": Double quote (")
+
+```js
+console.log('I hope everyone is enjoying the Học JavaScript trong 30 ngày challenge.\nDo you ?') // line break
+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 (\\)') // Để 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')
+```
+
+Kết quả trong console:
+
+```sh
+I hope everyone is enjoying the Học JavaScript trong 30 ngày 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
+```
+
+#### Template Literals (Template Strings)
+
+Để 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
+`String literal text`
+`String literal text ${expression}`
+```
+
+**Ví dụ: 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
+```
+
+**Ví dụ: 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.
+```
+
+Using a string template or string interpolation method, we can add expressions, which could be a value, or some operations (comparison, arithmetic operations, ternary operation).
+
+```js
+let a = 2
+let b = 3
+console.log(`${a} is greater than ${b}: ${a > b}`)
+```
+
+```sh
+2 is greater than 3: false
+```
+
+### Phương thức String
+
+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*: Phương thức `length` trả về độ dài của chuỗi bao gồm không gian trống.
+
+**Example:**
+
+```js
+let js = 'JavaScript'
+console.log(js.length) // 10
+let firstName = 'Asabeneh'
+console.log(firstName.length) // 8
+```
+
+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.
+
+ 
+
+phương thức này thay đổi chuỗi thành chữ thường..
+
+```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()*: thay đổi chuỗi thành chữ hoa.
+
+```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()*: thay đổi chuỗi thành chữ thường.
+
+```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()*: Cần có hai đối số, index bắt đầu và số ký tự để cắt.
+
+```js
+let string = 'JavaScript'
+console.log(string.substr(4,6)) // Script
+
+let country = 'Finland'
+console.log(country.substr(3, 4)) // land
+```
+
+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'
+
+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()*: 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'
+
+console.log(string.split()) // Changes to an array -> ["Học JavaScript trong 30 ngày"]
+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(',')) // tách thành mảng tại dấu phẩy -> ["Finland", " Sweden", " Norway", " Denmark", " and Iceland"]
+console.log(countries.split(', ')) // ["Finland", "Sweden", "Norway", "Denmark", "and Iceland"]
+```
+
+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 '
+
+console.log(string)
+console.log(string.trim(' '))
+
+let firstName = ' Asabeneh '
+
+console.log(firstName)
+console.log(firstName.trim()) // vẫn xóa khoảng trắng ở đầu và cuối chuỗi
+```
+
+```sh
+ Học JavaScript trong 30 ngày
+Học JavaScript trong 30 ngày
+ Asabeneh
+Asabeneh
+```
+
+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`.
+
+```js
+let string = 'Học JavaScript trong 30 ngày'
+
+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()*: nhận như một tham số là chuỗi con cũ và một chuỗi con mới.
+
+```js
+string.replace(oldsubstring, newsubstring)
+```
+
+```js
+let string = 'Học JavaScript trong 30 ngày'
+console.log(string.replace('JavaScript', 'Python')) // 30 Days Of Python
+
+let country = 'Finland'
+console.log(country.replace('Fin', 'Noman')) // Nomanland
+```
+
+11. *charAt()*: Lấy index và nó trả về giá trị tại index đó
+
+```js
+string.charAt(index)
+```
+
+```js
+let string = 'Học JavaScript trong 30 ngày'
+console.log(string.charAt(0)) // 3
+
+let lastIndex = string.length - 1
+console.log(string.charAt(lastIndex)) // t
+```
+
+12. *charCodeAt()*: Lấy index và nó trả về mã char (số ASCII) của giá trị tại index đó.
+
+```js
+string.charCodeAt(index)
+```
+
+```js
+let string = 'Học JavaScript trong 30 ngày'
+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()*: 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`.
+
+```js
+string.indexOf(substring)
+```
+
+```js
+let string = 'Học JavaScript trong 30 ngày'
+
+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()*: 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`.
+
+
+```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()*: nối các chuỗi được truyền vào nó
+
+```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*: 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`).
+
+```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*: 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`).
+
+```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*: 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.
+
+```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*: 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'
+let patternOne = /love/ // with out any flag
+let patternTwo = /love/gi // g-means to search in the whole text, i - case insensitive
+```
+
+Cú pháp match
+
+```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"]
+```
+
+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'
+let regEx = /\d+/
+
+// d with escape character means d not a normal d instead acts a digit
+// + means one or more digit numbers,
+// if there is g after that it means global, search everywhere.
+
+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()*: lặp lại 1 chuỗi với số lần được truyền vào nó.
+
+```js
+string.repeat(n)
+```
+
+```js
+let string = 'love'
+console.log(string.repeat(10)) // lovelovelovelovelovelovelovelovelovelove
+```
+
+## Kiểm tra kiểu dữ liệu và Ép kiểu
+
+### Kiểm tra kiểu dữ liệu
+
+Để kiểm tra kiểu dữ liệu của một biến nào đó, sử dụng từ khoá `typeof`.
+
+**Ví dụ:**
+
+```js
+// Các kiểu dữ liệu trong Javascript
+// Dưới đây là các kiểu khai báo dữ liệu khác nhau
+
+let firstName = 'Asabeneh' // string
+let lastName = 'Yetayeh' // string
+let country = 'Finland' // string
+let city = 'Helsinki' // string
+let age = 250 // number
+let job // undefined, vì chưa gán giá trị
+
+console.log(typeof 'Asabeneh') // string
+console.log(typeof firstName) // string
+console.log(typeof 10) // number
+console.log(typeof 3.14) // number
+console.log(typeof true) // boolean
+console.log(typeof false) // boolean
+console.log(typeof NaN) // number
+console.log(typeof job) // undefined
+console.log(typeof undefined) // undefined
+console.log(typeof null) // object
+```
+
+### Đổi kiểu dữ liệu (Ép kiểu)
+
+- 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
+
+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()
+- Dấu cộng (+)
+
+```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
+```
+
+#### String thành Float
+
+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()
+- Dấu cộng (+)
+
+```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
+```
+
+#### Float thành Int
+
+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
+let numInt = parseInt(num)
+
+console.log(numInt) // 9
+```
+
+🌕 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. 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. `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. 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. 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
+ 2 1 2 4 8
+ 3 1 3 9 27
+ 4 1 4 16 64
+ 5 1 5 25 125
+ ```
+
+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. '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. 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.'
+
+🎉 CHÚC MỪNG ! 🎉
+
+[<< Ngày 1](../README.md) | [Ngày 3 >>](../03_Day_Booleans_operators_date/03_booleans_operators_date.md)
diff --git a/Vietnamese/03_Day_Booleans_operators_date/03_booleans_operators_date.md b/Vietnamese/03_Day_Booleans_operators_date/03_booleans_operators_date.md
new file mode 100644
index 000000000..6c0553966
--- /dev/null
+++ b/Vietnamese/03_Day_Booleans_operators_date/03_booleans_operators_date.md
@@ -0,0 +1,629 @@
+
+
+[<< Ngày 2](../02_Day_Data_types/02_day_data_types.md) | [Ngày 4 >>](../04_Day_Conditionals/04_day_conditionals.md)
+
+
+
+- [📔 Ngày 3](#-day-3)
+ - [Booleans](#booleans)
+ - [Giá trị đúng](#gia-tri-dung)
+ - [Giá trị sai](#gia-tri-sai)
+ - [Không xác định](#undefined)
+ - [Giá trị không tồn tại](#null)
+ - [Toán tử](#operators)
+ - [Toán tử gán](#assignment-operators)
+ - [Toán tử số học](#arithmetic-operators)
+ - [Toán tử so sánh](#comparison-operators)
+ - [Toán tử logic](#logical-operators)
+ - [Toán tử tăng](#increment-operator)
+ - [Toán tử giảm](#decrement-operator)
+ - [Toán tử điều kiện](#ternary-operators)
+ - [Độ ưu tiên của toán tử](#operator-precedence)
+ - [Phương thức cửa sổ](#window-methods)
+ - [Phương thức alert()](#window-alert-method)
+ - [Phương thức prompt()](#window-prompt-method)
+ - [Phương thức confirm()](#window-confirm-method)
+ - [Đối tượng Date](#date-object)
+ - [Tạo một đối tượng thời gian](#creating-a-time-object)
+ - [Lấy giá trị năm](#getting-full-year)
+ - [Lấy giá trị tháng](#getting-month)
+ - [Lấy giá trị ngày](#getting-date)
+ - [Lấy giá trị thứ trong tuần](#getting-day)
+ - [Getting hours](#getting-hours)
+ - [Getting minutes](#getting-minutes)
+ - [Getting seconds](#getting-seconds)
+ - [Getting time](#getting-time)
+ - [💻 Ngày 3: Bài tập](#-day-3-exercises)
+ - [Bài tập: Cấp độ 1](#exercises-level-1)
+ - [Bài tập: Cấp độ 2](#exercises-level-2)
+ - [Bài tập: Cấp độ 3](#exercises-level-3)
+
+# 📔 Day 3
+
+## Booleans
+
+
+Dữ liệu boolean thể hiện một trong hai giá trị: True (đúng) hoặc False (sai). Giá trị của boolean sẽ là đúng (True) hoặc sai (False). Việc sử dụng các kiểu dữ liệu này sẽ rõ ràng khi bạn sử dụng toán tử so sánh. Bất kì phương thức so sánh nào đều sẽ trả về giá trị boolean đúng hoặc sai.
+
+**Ví dụ: Giá Trị Boolean**
+
+```js
+let isLightOn = true
+let isRaining = false
+let isHungry = false
+let isMarried = true
+let truValue = 4 > 3 // true
+let falseValue = 4 < 3 // false
+```
+
+Chúng ta có thể thấy được boolean chỉ có giá trị đúng hoặc sai.
+
+### Giá trị đúng
+
+- Mọi số thực (dương và âm) đều mang giá trị đúng trừ 0
+- Mọi chuỗi đều có giá trị đúng trừ chuỗi rỗng ('')
+- Boolean đúng
+
+### Giá trị sai
+
+- 0
+- 0n
+- null
+- Không xác định
+- NaN
+- Boolean sai
+- '', "", ``, những chuỗi rỗng
+
+Ghi nhớ những điều kiện để giá trị đúng sai sẽ có ích, bởi vì ở phần tiếp theo, chúng ta sẽ sử dụng chúng với điều kiện để đưa ra lựa chọn.
+
+## Không xác định
+
+Nếu chúng ta tạo một biến nhưng không gán một giá trị vào biến ấy, giá trị của biến ấy sẽ là *undefined*. Đồng thời, nếu một phương thức không trả một giá trị, phương thức ấy sẽ cho ra giá trị *underfined*
+
+```js
+let firstName
+console.log(firstName) // Không xác định, bởi vì biến firstName chưa được gán giá trị
+```
+
+## Null
+
+```js
+let empty = null
+console.log(empty) // -> null , nghĩa là không tồn tại
+```
+
+## Toán tử
+
+### Toán tử gán
+
+Dấu bằng trong JavaScript là một toán tử gán. Nó được dụng để gán giá trị vào biến
+
+```js
+let firstName = 'Asabeneh' // Gán giá trị 'Asabeneh' vào biến firstName
+let country = 'Finland' // Gán giá trị 'Finland' vào biến country
+```
+
+Toán tử gán
+
+
+
+### Toán tử số học
+
+Toán tử số học là những phép tính toán.
+
+- Phép cộng(+): a + b
+- Phép trừ(-): a - b
+- Phép nhân(*): a * b
+- Phép chia(/): a / b
+- Phép chia lấy dư(%): a % b
+- Lũy thừa(**): a ** b
+
+```js
+let numOne = 4
+let numTwo = 3
+let sum = numOne + numTwo
+let diff = numOne - numTwo
+let mult = numOne * numTwo
+let div = numOne / numTwo
+let remainder = numOne % numTwo
+let powerOf = numOne ** numTwo
+
+console.log(sum, diff, mult, div, remainder, powerOf) // 7,1,12,1.33,1, 64
+
+```
+
+```js
+const PI = 3.14
+let radius = 100 // độ dài đơn vị mét
+
+//Let us calculate area of a circle
+const areaOfCircle = PI * radius * radius
+console.log(areaOfCircle) // 314 m
+
+
+const gravity = 9.81 // đơn vị m/s2
+let mass = 72 // đơn vị Kilogram
+
+//Chúng ta sẽ tính khối lượng của đối tượng này
+const weight = mass * gravity
+console.log(weight) // 706.32 N(Newton)
+
+const boilingPoint = 100 // Nhiệt độ sôi của nước (oC)
+const bodyTemp = 37 // Nhiệt độ cơ thể (oC)
+
+// Nối chuỗi với số sử dụng phép nội suy chuỗi
+/*
+ The boiling point of water is 100 oC.
+ Human body temperature is 37 oC.
+ The gravity of earth is 9.81 m/s2.
+ */
+console.log(
+ `The boiling point of water is ${boilingPoint} oC.\nHuman body temperature is ${bodyTemp} oC.\nThe gravity of earth is ${gravity} m / s2.`
+)
+```
+
+### Toán tử so sánh
+
+Trong lập trình, khi chúng ta so sánh 2 giá trị với nhau, chúng ta sẽ sử dụng toán tử so sánh. Toán tử so sánh giúp cho chúng ta biết giá trị 1 sẽ lớn hoặc hay nhỏ hơn hoặc bằng giá trị 2.
+
+
+**Ví dụ: Toán tử so sánh**
+
+```js
+console.log(3 > 2) // Đúng, bởi vì 3 lớn hơn 2
+console.log(3 >= 2) // Đúng, bởi vì 3 lớn hơn 2
+console.log(3 < 2) // Sai, bởi vì 3 lớn hơn 2
+console.log(2 < 3) // Đúng, bởi vì 2 bé hơn 3
+console.log(2 <= 3) // Đúng, bởi vì 2 bé hơn 3
+console.log(3 == 2) // Sai, bởi vì 3 không bằng 2
+console.log(3 != 2) // Đúng, bởi vì 3 không bằng 2
+console.log(3 == '3') // Đúng, chỉ so sánh giá trị
+console.log(3 === '3') // Sai, so sánh cả giá trị lẫn kiểu dữ liệu
+console.log(3 !== '3') // Đúng, so sánh cả giá trị lẫn kiểu dữ liệu
+console.log(3 != 3) // Sai, chỉ so sánh giá trị
+console.log(3 !== 3) // Sai, so sánh cả giá trị lẫn kiểu dữ liệu
+console.log(0 == false) // Đúng, 2 giá trị tương đương nhau
+console.log(0 === false) // Sai, 2 giá trị không giống nhau hoàn toàn
+console.log(0 == '') // Đúng, giá trị tương đương nhau
+console.log(0 == ' ') // Đúng, giá trị tương đương nhau
+console.log(0 === '') // Sai, 2 giá trị không giống nhau hoàn toàn
+console.log(1 == true) // Đúng, giá trị tương đương nhau
+console.log(1 === true) // Sai, 2 giá trị không giống nhau hoàn toàn
+console.log(undefined == null) // Đúng
+console.log(undefined === null) // Sai
+console.log(NaN == NaN) // Sai, không bằng nhau
+console.log(NaN === NaN) // Sai
+console.log(typeof NaN) // Kiểu dữ liệu số
+
+console.log('mango'.length == 'avocado'.length) // Sai
+console.log('mango'.length != 'avocado'.length) // Đúng
+console.log('mango'.length < 'avocado'.length) // Đúng
+console.log('milk'.length == 'meat'.length) // Đúng
+console.log('milk'.length != 'meat'.length) // Sai
+console.log('tomato'.length == 'potato'.length) // Đúng
+console.log('python'.length > 'dragon'.length) // Sai
+```
+
+Hãy cố hiểu những so sánh trên theo logic, không nên học thuộc lòng bởi vì sẽ khó hơn.
+Javascript là một ngôn ngữ lập trình lạ. Code Javascript sẽ chạy và đưa ra kết quả nhưng trừ khi bạn thật sự thành thạo ngôn ngữ này, kết quả sẽ không như mong đợi.
+
+Theo như quy tắc ngón tay, nếu giá trị là không đúng với '==' thì cũng sẽ không đúng với '==='. Sử dụng '===' để so sánh sẽ an toàn hơn sử dụng '=='. Đường [link](https://dorey.github.io/JavaScript-Equality-Table/) sau đây bao gồm một dãy kết quả so sánh giữa các kiểu dữ liệu khác nhau.
+
+### Toán tử Logic
+
+Các ký hiệu sau đây là các toán tử logic thông dụng:
+&& (và) , || (hoặc) và ! (phủ định). Toán tử && sẽ cho kết quả đúng khi cả hai đều kiện đều đúng. Toán tử || sẽ cho kết quả đúng khi một trong hai điều kiện đúng. Toán tử ! sẽ đảo ngược kết quả lại.
+
+```js
+// Ví dự toán tử &&
+
+const check = 4 > 3 && 10 > 5 // đúng && đúng -> đúng
+const check = 4 > 3 && 10 < 5 // đúng && sai -> sai
+const check = 4 < 3 && 10 < 5 // sai && sai -> sai
+
+// Ví dụ toán tử ||
+
+const check = 4 > 3 || 10 > 5 // đúng || đúng -> đúng
+const check = 4 > 3 || 10 < 5 // đúng || sai -> đúng
+const check = 4 < 3 || 10 < 5 // sai || sai -> sai
+
+//Ví dụ toán tử !
+
+let check = 4 > 3 // đúng
+let check = !(4 > 3) // sai
+let isLightOn = true
+let isLightOff = !isLightOn // sai
+let isMarried = !false // đúng
+```
+
+### Toán tử tăng
+
+Trong JavaScipt chúng ta dùng toán tử tăng để tăng giá trị được chứa trong một biến. Toán tử tăng có thể nằm trước hoặc sau. Sau đây là ví dụ về cả 2 dạng:
+
+1. Tăng nằm trước
+
+```js
+let count = 0
+console.log(++count) // 1
+console.log(count) // 1
+```
+
+1. Tăng nằm sau
+
+```js
+let count = 0
+console.log(count++) // 0
+console.log(count) // 1
+```
+
+Đa phần chúng ta sẽ dùng toán tử tăng nằm sau. Vì thế chúng ta nên nhớ cách sử dụng toán tử tăng nằm sau.
+
+### Toán tử giảm
+
+Trong Javascript chúng ta dùng toán tử giảm để giảm giá trị được chứa trong một biến. Toán tử giảm có thể nằm trước hoặc sau. Sau đây là ví dụ về cả 2 dạng:
+
+1. Giảm nằm trước
+
+```js
+let count = 0
+console.log(--count) // -1
+console.log(count) // -1
+```
+
+2. Giảm nằm sau
+
+```js
+let count = 0
+console.log(count--) // 0
+console.log(count) // -1
+```
+
+### Toán tử điều kiện
+
+Toán tử điều kiện cho chúng ta viết được điều kiện. Một cách khác để viết điều kiện là sử dụng toán tử điều kiện. Hãy xem các ví dụ sau:
+
+```js
+let isRaining = true
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+isRaining = false
+
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+```
+
+```sh
+You need a rain coat.
+No need for a rain coat.
+```
+
+```js
+let number = 5
+number > 0
+ ? console.log(`${number} is a positive number`)
+ : console.log(`${number} is a negative number`)
+number = -5
+
+number > 0
+ ? console.log(`${number} is a positive number`)
+ : console.log(`${number} is a negative number`)
+```
+
+```sh
+5 is a positive number
+-5 is a negative number
+```
+
+### Độ ưu tiên toán tử
+
+Nếu bạn muốn biết thêm về độ ưu tiên các toán tử hãy truy cập vào [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence) này.
+
+## Phương thức cửa sổ
+
+### Hàm alert()
+
+Như ở đầu đã thấy, hàm alert() hiện một cửa sổ cảnh báo với một tin nhắn cụ thể và một nút bấm với chữ 'OK'. Đây là một hàm có sẵn và có thể nhận tham số.
+
+```js
+alert(message)
+```
+
+```js
+alert('Welcome to 30DaysOfJavaScript')
+```
+
+Đừng sử dụng hàm alert() quá nhiều bởi vì sẽ gây khó chịu cho người sử dụng. Chỉ nên dùng để kiểm tra.
+
+### Hàm prompt()
+
+Hàm prompt sẽ hiện một cửa sổ cho phép chúng ta nhập dữ liệu vào trong trình duyệt và dữ liệu sẽ được lưu vào một biến. Hàm prompt() nhận 2 tham số. Tham số thứ hai có thể có hoặc không.
+
+```js
+prompt('required text', 'optional text')
+```
+
+```js
+let number = prompt('Enter number', 'number goes here')
+console.log(number)
+```
+
+### Hàm confirm()
+
+Hàm confirm() hiện một cửa sổ với một đoạn tin nhắn kèm theo một nút bấm 'OK' và nút bấm 'Cancel'.
+Hàm confirm() thường được dùng để hỏi sự chấp thuận của người dùng trước khi thực hiện một hành động nào đó. Hàm confirm() nhận chuỗi làm tham số. Chọn nút 'OK' sẽ trả về giá trị đúng, còn nút 'Cancel' sẽ trả về giá trị sai.
+
+```js
+const agree = confirm('Are you sure you like to delete? ')
+console.log(agree) // kết quả sẽ trả về đúng hoặc sai tùy vào nút người dùng chọn trong cửa sổ
+```
+
+Đây không phải là toàn bộ phương thức cửa sổ. Sẽ có một phần riêng biệt để đi sâu vào các phương thức cửa sổ.
+
+## Đối tượng Date
+
+Thời gian là một thứ quan trọng. Chúng ta muốn biết được thời gian của một hành động hoặc sự kiện gì đó. Trong Javascript, thời gian và ngày hiện tại được tạo ra sử dụng Đối tượng Date trong JavaScript. Đối tượng được tạo ra từ đối tượng Date sẽ có nhiều hàm giúp chúng ta trong việc xử lí thời gian và ngày. Những hàm được sử dụng để lấy được thông tin thời gian và ngày trong đối tượng Date đều bắt đầu với từ _get_.
+ _getFullYear(), getMonth(), getDate(), getDay(), getHours(), getMinutes, getSeconds(), getMilliseconds(), getTime(), getDay()_
+
+
+
+### Tạo một đối tượng thời gian
+
+Sau khi tạo một đối tượng thời gian. Đối tượng đó sẽ cho chúng ta thông tin về thời gian. Đây là bước để tạo đối tượng thời gian.
+
+```js
+const now = new Date()
+console.log(now) // Sat Jan 04 2020 00:56:41 GMT+0200 (Eastern European Standard Time)
+```
+
+Chúng ta đã tạo một đối tượng thời gian. Giờ chúng ta có thể lấy mọi thông tin liên quan đến thời gian từ đối tượng đã tạo bằng cách sử dụng các hàm _get_ trong bảng trên.
+
+### Lấy năm
+
+Lấy năm từ đối tượng thời gian
+
+```js
+const now = new Date()
+console.log(now.getFullYear()) // 2020
+```
+
+### Lấy tháng
+
+Lấy tháng từ đối tượng thời gian
+
+```js
+const now = new Date()
+console.log(now.getMonth()) // 0, bởi vì đây là tháng Giêng, tháng(0-11)
+```
+
+### Lấy ngày
+
+Lấy ngày trong tháng từ đối tượng thời gian
+
+```js
+const now = new Date()
+console.log(now.getDate()) // 4, bởi vì ngày trong tháng là ngày bốn, ngày(1-31)
+```
+
+### Lấy thứ
+
+Lấy thứ ngày trong tuần từ đối tượng thời gian
+
+```js
+const now = new Date()
+console.log(now.getDay()) // 6, bởi vì hôm nay là thứ bảy
+// Chủ nhật là 0, thứ Hai là 1 và thứ bảy là 6
+// Ngày trong tuần (0-6)
+```
+
+### Lấy giờ
+
+Lấy giờ từ đối tượng thời gian
+
+```js
+const now = new Date()
+console.log(now.getHours()) // 0, bời vì thời gian là 00:56:41
+```
+
+### Lấy phút
+
+Lấy phút từ đối tượng thời gian
+
+```js
+const now = new Date()
+console.log(now.getMinutes()) // 56, bời vì thời gian là 00:56:41
+```
+
+### Lấy giây
+
+Lấy giây từ đối tượng thời gian
+
+```js
+const now = new Date()
+console.log(now.getSeconds()) // 41, bời vì thời gian là 00:56:41
+```
+
+### Lấy thời gian
+
+Phương thức này sẽ cho chúng ta thời gian theo giây tính từ ngày 1, tháng 1, năm 1970. Đây còn được gọi là thời gian Unix. Chúng ta có thể lấy thời gian Unix theo 2 cách sau:
+
+1. Sử dụng hàm _getTime()_
+
+```js
+const now = new Date() //
+console.log(now.getTime()) // 1578092201341, đây là số giây đã trôi qua kể từ ngày 1, tháng 1, năm 1970 đến 4 Tháng 1, 2020 00:56:41
+```
+
+1. Sử dụng hàm _Date.now()_
+
+```js
+const allSeconds = Date.now() //
+console.log(allSeconds) // 1578092201341,đây là số giây đã trôi qua kể từ ngày 1, tháng 1, năm 1970 đến 4 Tháng 1, 2020 00:56:41
+
+const timeInSeconds = new Date().getTime()
+console.log(allSeconds == timeInSeconds) // đúng
+```
+
+Chúng ta sẽ điều chỉnh lại giá trị để có thể dễ đọc thời gian hơn
+
+**Ví dụ:**
+
+```js
+const now = new Date()
+const year = now.getFullYear() // Lấy năm
+const month = now.getMonth() + 1 // Lấy tháng(0 - 11)
+const date = now.getDate() // Lấy ngày (1 - 31)
+const hours = now.getHours() // Lấy giờ (0 - 23)
+const minutes = now.getMinutes() // Lấy phút (0 -59)
+
+console.log(`${date}/${month}/${year} ${hours}:${minutes}`) // 4/1/2020 0:56
+```
+
+🌕 Bạn có năng lượng vô tận. Bạn vừa hoàn thành thử thách của ngày thứ 3 và bạn đã tiến được 3 bước trên con đường vươn tới sự vĩ đại. Bây giờ hãy làm một số bài tập để giúp cho trí não của bạn.
+
+## 💻 Day 3: Bài tập
+
+### Bài tập: Level 1
+
+1. Khai báo biến firstName, lastName, country, city, age, isMarried, year và gán giá trị cho nó và sử dụng toán tử typeof để kiểm tra các kiểu dữ liệu khác nhau.
+2. Kiểm tra xem kiểu dữ liệu của '10' có giống với 10
+3. Kiểm tra parseInt('9.8') có bằng 10 không
+4. Giá trị boolean có thể đúng hoặc sai
+ 1. Viết ba câu lệnh JavaScript cung cấp giá trị đúng.
+ 2. Viết ba câu lệnh JavaScript cung cấp giá trị sai.
+
+5. Hãy tìm ra kết quả của các biểu thức so sánh sau không sử dụng console.log(). Sau khi làm xong, hãy xác nhận nó bằng console.log()
+ 1. 4 > 3
+ 2. 4 >= 3
+ 3. 4 < 3
+ 4. 4 <= 3
+ 5. 4 == 4
+ 6. 4 === 4
+ 7. 4 != 4
+ 8. 4 !== 4
+ 9. 4 != '4'
+ 10. 4 == '4'
+ 11. 4 === '4'
+ 12. Tìm độ dài của python và biệt ngữ và đưa ra một câu lệnh so sánh sai
+
+6. Hãy tìm ra kết quả của các biểu thức so sánh sau không sử dụng console.log(). Sau khi làm xong, hãy xác nhận nó bằng console.log()
+ 1. 4 > 3 && 10 < 12
+ 2. 4 > 3 && 10 > 12
+ 3. 4 > 3 || 10 < 12
+ 4. 4 > 3 || 10 > 12
+ 5. !(4 > 3)
+ 6. !(4 < 3)
+ 7. !(false)
+ 8. !(4 > 3 && 10 < 12)
+ 9. !(4 > 3 && 10 > 12)
+ 10. !(4 === '4')
+ 11. Không có 'on' trong cả 2 từ dragon và python
+
+7. Sử dụng đối tượng Date để làm các câu hỏi sau
+ 1. Năm nay là năm mấy?
+ 2. Tháng này là tháng mấy dưới dạng số?
+ 3. Hôm nay ngày mấy?
+ 4. Hôm nay là thứ mấy dưới dạng số?
+ 5. Bây giờ mấy giờ?
+ 6. Bây giờ mấy phút?
+ 7. Tìm số giây đã trôi qua kể từ ngày 1, tháng 1, năm 1970 đến bây giờ.
+
+### Bài tập: Level 2
+
+1. Viết một đoạn lệnh yêu cầu người dùng nhập độ dài đáy và chiều cao của hình tam giác và tính diện tích của tam giác ấy (diện tích = 0.5 x đáy x cao).
+
+ ```sh
+ Enter base: 20
+ Enter height: 10
+ The area of the triangle is 100
+ ```
+
+2. Viết một đoạn lệnh yêu cầu người dùng nhập độ dài cạnh a, cạnh b, cạnh c của hình tam giác và tính chu vi của tam giác ấy (chu vi = a + b + c).
+
+ ```sh
+ Enter side a: 5
+ Enter side b: 4
+ Enter side c: 3
+ The perimeter of the triangle is 12
+ ```
+
+3. Yêu cầu nhập độ dài và độ rộng sau đó tính diện tích hình chữ nhật (diện tích = dài x rộng) và tính chu vi hình chữ nhật (chu vi = 2 x (dài + rộng).
+4. Yêu cầu nhập bán kính r sau đó tính diện tích hình tròn (diện tích = pi x r x r) và tính chu vi hình tròn (chu vi = 2 x pi x r), lấy pi = 3.14.
+5. Tính hệ số góc, tung độ gốc x và tung độ gốc y của phương trình y = 2x -2
+6. Tung độ góc m = (y2-y1)/(x2-x1). Tìm tung độ góc giữa 2 điểm (2, 2) và (6, 10).
+7. So sánh tung độ góc của câu 5 và câu 6.
+8. Tính giá trị của y (y = x2 + 6x + 9). Hãy thử sử dụng các giá trị x khác nhau và tìm ra giá trị x để y bằng 0.
+9. Viết đoạn lệnh yêu cầu người dùng nhập thời gian và mức lương theo giờ. Tính lương của người đó?
+
+ ```sh
+ Enter hours: 40
+ Enter rate per hour: 28
+ Your weekly earning is 1120
+ ```
+
+10. Nếu độ dài tên bạn lớn hơn 7, hiển thị 'your name is long' nếu không, hiển thị 'your name is short'.
+11. So sánh tên của bạn và họ của bạn, hiển thị kết quả theo cấu trúc sau.
+
+ ```js
+ let firstName = 'Asabeneh'
+ let lastName = 'Yetayeh'
+ ```
+
+ ```sh
+ Your first name, Asabeneh is longer than your family name, Yetayeh
+ ```
+
+12. Tạo 2 biến _myAge_ và _yourAge_ và gán giá trị vào 2 biến ấy. Hiển thị kết quả theo cấu trúc sau.
+
+ ```js
+ let myAge = 250
+ let yourAge = 25
+ ```
+
+ ```sh
+ I am 225 years older than you.
+ ```
+
+13. Yêu cầu người dùng nhập năm sinh. Nếu người dùng lớn hơn hoặc bằng 18, cho phép người dùng lái xe. Nếu không hiển thị số năm người dùng cần phải chờ để đủ 18.
+
+ ```sh
+
+ Enter birth year: 1995
+ You are 25. You are old enough to drive
+
+ Enter birth year: 2005
+ You are 15. You will be allowed to drive after 3 years.
+ ```
+
+14. Viết đoạn lệnh yêu cầu người dùng nhập số năm. Tính số giây của số năm đã nhập.
+
+ ```sh
+ Enter number of years you live: 100
+ You lived 3153600000 seconds.
+ ```
+
+15. Tạo các định dạng thời gian dễ đọc sử dụng đối tượng Date
+ 1. YYYY-MM-DD HH:mm
+ 2. DD-MM-YYYY HH:mm
+ 3. DD/MM/YYYY HH:mm
+
+### Bài tập: Level 3
+
+1. Tạo định dạng thời gian có thể đọc được bằng cách sử dụng đối tượng Date. Giờ và phút phải luôn có hai chữ số (7 giờ phải là 07 và 5 phút phải là 05 )
+ 1. YYY-MM-DD HH:mm eg. 20120-01-02 07:05
+
+[<< Day 2](../02_Day_Data_types/02_day_data_types.md) | [Day 4 >>](../04_Day_Conditionals/04_day_conditionals.md)
diff --git a/Vietnamese/README.md b/Vietnamese/README.md
new file mode 100644
index 000000000..aee58621e
--- /dev/null
+++ b/Vietnamese/README.md
@@ -0,0 +1,669 @@
+# Học JavaScript trong 30 ngày
+
+| # Ngày | Phần |
+| ----- | :-------------------------------------------------------------------------------------------------------------------------------------------------: |
+| 01 | [Giới thiệu](./readMe.md) |
+| 02 | [Kiểu dữ liệu](./02_Day_Data_types/02_day_data_types.md) |
+| 03 | [Booleans, Toán tử, Date](./03_Day_Booleans_operators_date/03_booleans_operators_date.md) |
+| 04 | [Điều kiện](./04_Day_Conditionals/04_day_conditionals.md) |
+| 05 | [Mảng](./05_Day_Arrays/05_day_arrays.md) |
+| 06 | [Vòng lặp](./06_Day_Loops/06_day_loops.md) |
+| 07 | [Functions](./07_Day_Functions/07_day_functions.md) |
+| 08 | [Objects](./08_Day_Objects/08_day_objects.md) |
+| 09 | [Đào sâu vào Functions](./09_Day_Higher_order_functions/09_day_higher_order_functions.md) |
+| 10 | [Sets và Maps](./10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md) |
+| 11 | [Destructuring và Spreading](./11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md) |
+| 12 | [Biểu thức chính quy](./12_Day_Regular_expressions/12_day_regular_expressions.md) |
+| 13 | [Phương thức Console Object](./13_Day_Console_object_methods/13_day_console_object_methods.md) |
+| 14 | [Error Handling](./14_Day_Error_handling/14_day_error_handling.md) |
+| 15 | [Classes](./15_Day_Classes/15_day_classes.md) |
+| 16 | [JSON](./16_Day_JSON/16_day_json.md) |
+| 17 | [Web Storages](./17_Day_Web_storages/17_day_web_storages.md) |
+| 18 | [Promises](./18_Day_Promises/18_day_promises.md) |
+| 19 | [Closure](./19_Day_Closures/19_day_closures.md) |
+| 20 | [Viết Clean Code](./20_Day_Writing_clean_codes/20_day_writing_clean_codes.md) |
+| 21 | [DOM](./21_Day_DOM/21_day_dom.md) |
+| 22 | [Thao tác với DOM Object](./22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md) |
+| 23 | [Event Listeners](./23_Day_Event_listeners/23_day_event_listeners.md) |
+| 24 | [Dự án nhỏ: Hệ mặt trời](./24_Day_Project_solar_system/24_day_project_solar_system.md) |
+| 25 | [Dự án nhỏ: Hiển thị dữ liệu các quốc gia trên thế giới 1](./25_Day_World_countries_data_visualization_1/25_day_world_countries_data_visualization_1.md) |
+| 26 | [Dự án nhỏ: Hiển thị dữ liệu các quốc gia trên thế giới 2](./26_Day_World_countries_data_visualization_2/26_day_world_countries_data_visualization_2.md) |
+| 27 | [Dự án nhỏ: Portfolio](./27_Day_Mini_project_portfolio/27_day_mini_project_portfolio.md) |
+| 28 | [Dự án nhỏ: Bảng xếp hạng](./28_Day_Mini_project_leaderboard/28_day_mini_project_leaderboard.md) |
+| 29 | [Dự án nhỏ:Nhân vật hoạt hình](./29_Day_Mini_project_animating_characters/29_day_mini_project_animating_characters.md) |
+| 30 | [Dự án cuối cùng](./30_Day_Mini_project_final/30_day_mini_project_final.md) |
+
+🧡🧡🧡 CHÚC BẠN CODE VUI VẺ 🧡🧡🧡
+
+
+ Ủng hộ tác giả để bổ sung thêm nhiều kiến thức bổ ích
+
+
+
+
@@ -107,15 +119,20 @@
## Introduction
-**Congratulations** on deciding to participate in 30 days of JavaScript programming challenge. In this challenge you will learn everything you need to be a JavaScript programmer, and in general, the whole concept of programming. In the end of the challenge you will get a 30DaysOfJavaScript programming challenge completion certificate. In case you need help or if you would like to help others you may join the [telegram group](https://t.me/ThirtyDaysOfJavaScript).
+**Congratulations** on deciding to participate in 30 days of JavaScript programming challenge. In this challenge, you will learn everything you need to be a JavaScript programmer, and in general, the whole concept of programming. In the end of the challenge, you will get a 30DaysOfJavaScript programming challenge completion certificate. In case you need help or if you would like to help others you may join the dedicated [telegram group](https://t.me/ThirtyDaysOfJavaScript).
**A 30DaysOfJavaScript** challenge is a guide for both beginners and advanced JavaScript developers. Welcome to JavaScript. JavaScript is the language of the web. I enjoy using and teaching JavaScript and I hope you will do so too.
In this step by step JavaScript challenge, you will learn JavaScript, the most popular programming language in the history of mankind.
-JavaScript is used **_to add interactivity to websites, to develop mobile apps, desktop applications, games_** and nowadays JavaScript can be used for **_machine learning_** and **_AI_**.
+JavaScript is used **_to add interactivity to websites, to develop mobile apps, desktop applications, games_** and nowadays JavaScript can be used for **server-side programming**, **_machine learning_** and **_AI_**.
+
**_JavaScript (JS)_** has increased in popularity in recent years and has been the leading
-programming language for six consecutive years and is the most used programming language on
-Github.
+programming language for last ten years and is the most used programming language on
+GitHub.
+
+This challenge is easy to read, written in conversational English, engaging, motivating and at the same time, it is very demanding. You need to allocate much time to finish this challenge. If you are a visual learner, you may get the video lesson on Washera YouTube channel. Subscribe the channel, comment and ask questions on YouTube vides and be proactive, the author will eventually notice you.
+
+The author likes to hear your opinion about the challenge, share the author by expressing your thoughts about the 30DaysOfJavaScript challenge. You can leave your testimonial on this [link](https://www.asabeneh.com/testimonials)
## Requirements
@@ -148,7 +165,7 @@ asabeneh $ node -v
v12.14.0
```
-When making this tutorial I was using Node version 12.14.0, but now the recommended version of Node.js for download is v14.17.6.
+When making this tutorial I was using Node version 12.14.0, but now the recommended version of Node.js for download is v14.17.6, by the time you use this material you may have a higher Node.js version.
### Browser
@@ -197,7 +214,7 @@ Ctl+Shift+I
##### Console.log
-To write our first JavaScript code, we used a built-in function **console.log()**. We passed an argument as input data, and the function displays the output. We passed 'Hello, World' as input data or argument in the console.log() function.
+To write our first JavaScript code, we used a built-in function **console.log()**. We passed an argument as input data, and the function displays the output. We passed `'Hello, World'` as input data or argument in the console.log() function.
```js
console.log('Hello, World!')
@@ -205,7 +222,7 @@ console.log('Hello, World!')
##### Console.log with Multiple Arguments
-The **console.log()** function can take multiple parameters separated by commas. The syntax looks like as follows:**console.log(param1, param2, param3)**
+The **`console.log()`** function can take multiple parameters separated by commas. The syntax looks like as follows:**`console.log(param1, param2, param3)`**

@@ -215,31 +232,35 @@ console.log('HAPPY', 'NEW', 'YEAR', 2020)
console.log('Welcome', 'to', 30, 'Days', 'Of', 'JavaScript')
```
-As you can see from the snippet code above, _console.log()_ can take multiple arguments.
+As you can see from the snippet code above, _`console.log()`_ can take multiple arguments.
-Congratulations! You wrote your first JavaScript code using _console.log()_.
+Congratulations! You wrote your first JavaScript code using _`console.log()`_.
##### Comments
-We add comments to our code. Comments are very important to make code more readable and to leave remarks in our code. JavaScript does not execute the comment part of our code.In JavaScript, any text line starting with // in JavaScript is a comment, and anything enclosed like this /\* \*/ is also a comment.
+We can add comments to our code. Comments are very important to make code more readable and to leave remarks in our code. JavaScript does not execute the comment part of our code. In JavaScript, any text line starting with // in JavaScript is a comment, and anything enclosed like this `//` is also a comment.
**Example: Single Line Comment**
+```js
// This is the first comment
- // This is the second comment
- // I am a single line comment
+// This is the second comment
+// I am a single line comment
+```
**Example: Multiline Comment**
+```js
/*
This is a multiline comment
Multiline comments can take multiple lines
JavaScript is the language of the web
*/
+```
##### Syntax
-Programming languages are similar to human languages. English or many other language uses words, phrases, sentences,compound sentences and other more to convey a meaningful message. The English meaning of syntax is _the arrangement of words and phrases to create well-formed sentences in a language_. The technical definition of syntax is the structure of statements in a computer language.Programming languages have syntax. JavaScript is a programming language and like other programming languages it has its own syntax. If we do not write a syntax that JavaScript understands, it will raise different types of errors. We will explore different kinds of JavaScript errors later. For now, let us see syntax errors.
+Programming languages are similar to human languages. English or many other language uses words, phrases, sentences, compound sentences and other more to convey a meaningful message. The English meaning of syntax is _the arrangement of words and phrases to create well-formed sentences in a language_. The technical definition of syntax is the structure of statements in a computer language. Programming languages have syntax. JavaScript is a programming language and like other programming languages it has its own syntax. If we do not write a syntax that JavaScript understands, it will raise different types of errors. We will explore different kinds of JavaScript errors later. For now, let us see syntax errors.

@@ -250,7 +271,7 @@ console.log('Hello, World!')
console.log('Hello, World!')
```
-So far, we saw how to display text using the _console.log()_. If we are printing text or string using _console.log()_, the text has to be inside the single quotes, double quotes, or a backtick quotes.
+So far, we saw how to display text using the _`console.log()`_. If we are printing text or string using _`console.log()`_, the text has to be inside the single quotes, double quotes, or a backtick.
**Example:**
```js
@@ -261,9 +282,9 @@ console.log(`Hello, World!`)
#### Arithmetics
-Now, let us practice more writing JavaScript codes using _console.log()_ on google chrome console for number data types.
+Now, let us practice more writing JavaScript codes using _`console.log()`_ on Google Chrome console for number data types.
In addition to the text, we can also do mathematical calculations using JavaScript. Let us do the following simple calculations.
-The console can directly take arguments without the **_console.log()_** function. However, it is included in this introduction because most of this challenge would be taking place in a text editor where the usage of the function would be mandatory. You can play around directly with instructions on the console.
+It is possible to write JavaScript code on Google Chrome console can directly without the **_`console.log()`_** function. However, it is included in this introduction because most of this challenge would be taking place in a text editor where the usage of the function would be mandatory. You can play around directly with instructions on the console.

@@ -278,11 +299,11 @@ console.log(3 ** 2) // Exponentiation 3 ** 2 == 3 * 3
### Code Editor
-We can write our codes on the browser console, but it won't do for bigger projects. In a real working environment, developers use different code editors to write their codes. In this 30 days JavaScript challenge, we will be using Visual Studio Code.
+We can write our codes on the browser console, but it won't be for bigger projects. In a real working environment, developers use different code editors to write their codes. In this 30 days of JavaScript challenge, we will be using Visual Studio Code.
#### Installing Visual Studio Code
-Visual studio code is a very popular open-source text editor. I would recommend to [download Visual Studio Code](https://code.visualstudio.com/), but if you are in favor of other editors, feel free to follow with what you have.
+Visual Studio Code is a very popular open-source text editor. I would recommend to [download Visual Studio Code](https://code.visualstudio.com/), but if you are in favor of other editors, feel free to follow with what you have.

@@ -319,11 +340,11 @@ The following sections show different ways of adding JavaScript code to your web
### Inline Script
-Create a project folder on your desktop or in any location, name it 30DaysOfJS and create an **_index.html_** file in the project folder. Then paste the following code and open it in a browser, for example [Chrome](https://www.google.com/chrome/).
+Create a project folder on your desktop or in any location, name it 30DaysOfJS and create an **_`index.html`_** file in the project folder. Then paste the following code and open it in a browser, for example [Chrome](https://www.google.com/chrome/).
```html
-
+
30DaysOfScript:Inline Script
@@ -333,16 +354,16 @@ Create a project folder on your desktop or in any location, name it 30DaysOfJS a
```
-Now, you just wrote your first inline script. We can create a pop up alert message using the _alert()_ built-in function.
+Now, you just wrote your first inline script. We can create a pop up alert message using the _`alert()`_ built-in function.
### Internal Script
-The internal script can be written in the _head_ or the _body_, but it is preferred to put it on the body of the HTML document.
+The internal script can be written in the _`head`_ or the _`body`_, but it is preferred to put it on the body of the HTML document.
First, let us write on the head part of the page.
```html
-
+
30DaysOfScript:Internal Script
@@ -400,24 +421,24 @@ External scripts in the _body_:
```html
-
+
30DaysOfJavaScript:External script
-
-
+
+
```
-Open the browser console to see the output of the console.log()
+Open the browser console to see the output of the `console.log()`.
### Multiple External Scripts
We can also link multiple external JavaScript files to a web page.
-Create a helloworld.js file inside the 30DaysOfJS folder and write the following code.
+Create a `helloworld.js` file inside the 30DaysOfJS folder and write the following code.
```js
console.log('Hello, World!')
@@ -425,7 +446,7 @@ console.log('Hello, World!')
```html
-
+
Multiple External Scripts
@@ -442,7 +463,7 @@ _Your main.js file should be below all other scripts_. It is very important to r
## Introduction to Data types
-In JavaScript and also other programming languages, there are different kinds of data types. The following are JavaScript primitive data types:_String, Number, Boolean, undefined, Null_, and _Symbol_.
+In JavaScript and also other programming languages, there are different types of data types. The following are JavaScript primitive data types: _String, Number, Boolean, undefined, Null_, and _Symbol_.
### Numbers
@@ -456,16 +477,20 @@ In JavaScript and also other programming languages, there are different kinds of
### Strings
A collection of one or more characters between two single quotes, double quotes, or backticks.
+
**Example:**
```js
+'a'
'Asabeneh'
+"Asabeneh"
'Finland'
'JavaScript is a beautiful programming language'
'I love teaching'
'I hope you are enjoying the first day'
`We can also create a string using a backtick`
-'A string could be just as small as one character as big as many pages'
+'A string could be just as small as one character or as big as many pages'
+'Any data type under a single quote, double quote or backtick is a string'
```
### Booleans
@@ -532,7 +557,6 @@ Multiline commenting:
let age = 100;
let isMarried = true;
This is a Multiple line comment
-
*/
```
@@ -573,11 +597,11 @@ year2020
year_2020
```
-The first and second variables on the list follows the camelCase convention of declaring in JavaScript. In this material, we will use camelCase variables.
+The first and second variables on the list follows the camelCase convention of declaring in JavaScript. In this material, we will use camelCase variables(camelWithOneHump). We use CamelCase(CamelWithTwoHump) to declare classes, we will discuss about classes and objects in other section.
Example of invalid variables:
-```sh
+```js
first-name
1_num
num_#_1
@@ -590,6 +614,8 @@ Let us declare variables with different data types. To declare a variable, we ne
let nameOfVariable = value
```
+The nameOfVriable is the name that stores different data of value. See below for detail examples.
+
**Examples of declared variables**
```js
@@ -622,10 +648,8 @@ console.log(gravity, boilingPoint, PI)
```
```js
-// Variables can also be declaring in one line separated by comma
-let name = 'Asabeneh', // name of a person
-job = 'teacher',
-live = 'Finland'
+// Variables can also be declaring in one line separated by comma, however I recommend to use a seperate line to make code more readble
+let name = 'Asabeneh', job = 'teacher', live = 'Finland'
console.log(name, job, live)
```