# JavaScript Basics

### Functions of JavaScript - HTML & CSS - Define the structure and appearance of Web documents - JavaScript - Defines the **functionality** of documents
#### ES2015 (ES6) - Having solved many of JavaScript's chronic problems in ES2015, the standard has now been published up to ES2019
#### Vanilla JS (Pure JavaScript) - Many libraries emerged for cross-browsing and convenient usage (most notably jQuery) - Recent standardized browsers and the emergence of various tools after ES6 have increased the use of pure JavaScript
#### What Browsers Can Do - Global object window - DOM manipulation - BOM manipulation
*Node.js based on the V8 engine*
### Characteristics of JavaScript
1. #### It is a Script Language - Executed directly through an Interpreter - Easy Data type and type casting - Slower speed - Limited by the execution environment - Only works in programs that have a JavaScript Interpreter installed
2. #### It is a Functional Language - A method based on functions - Declarative programming - Can dynamically process HTML elements - First-class functions - Functions themselves can be used like data - Variable scope == Function scope
3. It is a completely different programming language from Java - Netscape licensed the Java name for marketing purposes - JavaScript == ECMA-262
4. It is not a beginner's language - While easy at the beginning of learning, it is powerful enough to build complex services 5. It is a Web standard - HTML5: HTML5 + CSS3 + JavaScript - HTML5 has a high dependency on JavaScript
*JavaScript is well-suited for functional programming!!!*
#### Pros of JavaScript 1. Programming is possible with just a text editor and a web browser 2. Easy to learn and use due to easy data types and type-casting 3. Testing written code is convenient because there is no compilation process

## Data Types & Variables
### JavaScript Syntax
#### JavaScript Basic Syntax - Interpretation order - Interpreted and executed from top to bottom by the Interpreter - `Interpreter` : A program that converts a program written in a programming language into machine code - Case sensitivity - Variables, methods, keywords, etc. must be entered with exact case distinction - HTML is not case-sensitive - End of statement - Whitespace and indentation - Comments

### Data Type Classification (typeof)
#### 1. Primitive Types > Immutable values - boolean - null - undefined - number (*NaN* is also a number type) - string - symbol (ES6)
#### 2. Object Types - object: plain object, function, array

### Data Type
#### Number - It is not that the integer number system does not exist, but rather that there is no separate Integer Type
#### String - Template strings
#### null vs undefined - undefined - - null - When declared but no value has been assigned - typeof null => shows as object
#### Object - In JavaScript, everything except primitive types is an object - JavaScript objects are collections of properties consisting of keys and values - Value == Function? - Called a method
#### Variable Scope - Has **function-level scope** - Variables declared inside a function are local variables, and the rest are used as global variables - If a keyword (var) is not used when declaring a variable, it is implicitly set to global - Note: Created as a property of the global object (window), not a variable - It is not assigned to a variable but becomes window.global! - Always use a keyword!
#### Hoisting and let, const (ES6) - In JavaScript, all declarations are hoisted - The `let` and `const` keywords newly introduced in ES6 can prevent this - It is not that hoisting itself does not occur; var declares and initializes (undefined) simultaneously, - while let and const have separated declaration and initialization stages - Has block-level scope

### JavaScript Syntax
#### `==` vs `===` - Equality operator (==) - Value comparison and unexpected conversions - Strict equality operator (===) - Strict equality - Type comparison - Same as Python's ==!
#### Conditional Statements - else if - {}
#### Loops - {}

### JavaScript Object > An object is a collection of properties consisting of keys and values
#### Basic Object Creation Methods 1. Object literal ```javascript var cat1 = {} var cat2 = {name:'nero', age:3} ``` 2. Object constructor function ```javascript var dog1 = new Object() dog1.name = 'cherry' dog1.name = 5 ```
#### Object Creation Methods - When creating with an object literal, if the key can be expressed as a string, implicit type conversion occurs - If not, you must use quotes to make it a string! ```javascript var OBJ = { name: 'chloe', 'e-mail': 'chloe@test.com' } ``` - Here, name undergoes implicit type conversion to a string!
- If you create and use a constructor function, you can create objects with identical properties like a class ```javascript function Person(name, age){ this.name = name; this.age = age } var p1 = new Person('chloe', 25) ```

### Object Property Access - Properties can be accessed with . or [] - However, there are cases where you must use [] - ex) When the key is not composed of a simple string ```javascript var OBJ = { name: 'chloe', 'e-mail': 'chloe@test.com' } OBJ['e-mail'] ```