드림코딩 엘리 JS수업
엘리 수업을 정리해준 Notion 사이트
// 1. Use strict
// added in ES 5
// use this ffor Valina Javascript.
'use strict'
// 2. Variable
// let (added in ES6)
let globalName = 'global name';
{
let name = 'ellie';
console.log(name);
name = 'hello';
console.log(name);
}
console.log(name);
console.log(globalName);
// var (don't ever use this!)
// var hoisting (move declaration from bottom to top)
// has no block scope
{
age = 4;
var age;
}
console.log(age);
// 3. Contants
// favor immutable data type always for a few reasons:
// - security
// - thread safety
// - reduce human mistakes
// Immutable
const daysInWeek = 7;
const maxNumber = 5;
// 4. Varialbe types
// primitive, single item: number, string, boolean, nul, undifiendm symbol
// object, box container
// function, first-class function
1. 변수에 값(참조가 아닌)이 들어간다.
const count = 17; // integer
const size = 17.1; //decimal number
console.log(`value: ${count}, type: ${typeof count}`);
console.log(`value: ${size}, type: ${typeof size}`);
// number - speical numeric values:
const infinity = 1 / 0;
const negativeInfinity = -1 / 0;
const nAn = 'not a number' / 2;
console.log(infinity);
console.log(negativeInfinity);
console.log(nAn);
// 중요한 이유 나중에 dom요소를 연산하게 될 테인데 낮누고자 하는 값이 0인지 확인도 하지 않으면 안되고
// 숫자가 아닌 값을 연산할 수 있기 때문에
// bigInt (fairly new, don't use it yet)
const bigInt = 1234567890123456789012345678901234567890n; // over (-2**53) ~ 2**53
console.log(`value: ${bigInt}, type: ${typeof bigInt}`);
console.log(Number.MAX_SAFE_INTEGER);
1. JS에선 다른 언어와 다르게 숫자는 모두 number이다.
(Java나 C경우 int, float double, long등의 차이가 있다)
2. 무한대, -무한대, 숫자가 아님을 뜻하는 타입이 있다.
(이는 후에 조건을 검사할 때 유요하게 쓸 수 있다고 한다.)
3. 최근 문법으로 숫자뒤에 'n'을 붙여 bigint타입을 지정할 수 있다고 나온다.
// string
const char = 'c';
const brendan = 'brendan';
const greeting = 'hello' + brendan;
console.log(`value: ${greeting}, type: ${typeof greeting}`);
const helloBob = `hi ${brendan}!`; // template literals (string)
console.log(`value: ${helloBob}, type: ${typeof helloBob}`);
// boolean
// false: 0, null, undefined, NaN, ''
// true: any other value
const canRead = true;
const test = 3 < 1; // false
console.log(`value: ${canRead}, type: ${typeof canRead}`);
console.log(`value: ${test}, type: ${typeof test}`);
// null
let nothing = null;
console.log(`value: ${nothing}, type: ${typeof nothing}`);
// undefined
let x;
console.log(`value: ${x}, type: ${typeof x}`);
// symbol, create unique identifiers for objects
const symbol1 = Symbol('id');
const symbol2 = Symbol('id');
console.log(symbol1 === symbol2); // false
// 맵이나 다른 자료구조에서 고유한 식별자가 필요하거나 동시에 다발적으로 컨커런트하게 실행될 수 잇는 코드에서 우선순위를 주고 싶을 때 정말 고유한 식별자가 필요할 때 사용
// string은 다른 모듈에서 동이란 string의 경우 동일한 식별자로 취급받는데
// Symbol은 동일한 string으로 만들어 져도, 다른 값을 가질 수 있는 것을 볼 수 있다.
// 반대로 필요에 따라 동일한 string이면 같은 Symbol을 만들 수 도 있다
const gSymbol1 = Symbol.for('id');
const gSymbol2 = Symbol.for('id');
console.log(gSymbol1 === gSymbol2); // true
console.log(`value: ${symbol1.description}, type: ${typeof symbol1}`);
console.log(symbol1 === symbol2); // false
Symbol.for('id')
)console.log(gSymbol1 === gSymbol2); // true
// object, real-life object, data structure
const ellie = {name: 'ellie', age: 20};
ellie.age = 21;
// 5. Dynamic typing: dynamically typed langauge
let text = 'hello';
console.log(text.charAt(0)); // h
console.log(`value: ${text}, type: ${typeof text}`);
text = 1;
console.log(`value: ${text}, type: ${typeof text}`);
text = '7' + 5;
console.log(`value: ${text}, type: ${typeof text}`);
text = '8' / 2
console.log(`value: ${text}, type: ${typeof text}`);
console.log(text.charAt(0)); // error!!