'use strict' ์ฌ์ฉ
'use strict';
Variable (๋ณ์)
- ๋ณ๊ฒฝ๋ ์ ์๋ ๊ฐ
- JavaScript์์๋ let ์ผ๋ก ์ฌ์ฉํ๋ค. (ES6์์ ์ถ๊ฐ๋จ)
๐ฅ let ์ด์ ์๋ var์ ์ฌ์ฉํ๋๋ฐ var์ ์ฌ์ฉ์ ์ง์ํ๋ค!
var์ Block Scope๋ ๋ฌด์ํ๋ค.
Block Scope
{
let name = 'yunkyung';
console.log(name); // yunkyung
name = 'hello';
console.log(name); // hello
}
console.log(name); // ์ถ๋ ฅ ์๋จ
์ด๋ ๊ฒ block ์์ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด block ๋ฐ์์๋ ์์ ๋ด์ฉ๋ค์ ๋ณผ ์ ์๋ค.
Constants
- ๊ฐ๋ฆฌํค๊ณ ์๋ ํฌ์ธํฐ๊ฐ ์ ๊ฒจ ์๋ค.
- ์ ์ธ๊ณผ ๋์์ ํ ๋น์ด ๋๋ฉด ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
- let (mutable) vs const (immutable)
- ๋ณด์, ์ค์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
Variable types
์ด๋ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ primitive type๊ณผ Object type ๋๊ฐ์ง๋ก ๋๋์ด์ง๋ค.
- Primitive type
๋์ด์ ์์ ๋จ์๋ก ๋๋ ์ง ์ ์๋ ํ ๊ฐ์ง์ ์์ดํ .
number, string, boolean, null, undefined
-Number
// number
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 ๋ก ๋์จ๋ค.
// number - speicla numeric values: infinity, -infinity, NaN
const infinity = 1 / 0;
const negativeInfinity = -1 / 0;
const nAn = 'not a number' / 2;
console.log(infinity); // infinity
console.log(negativeInfinity); // -infinity
console.log(nAn); // NaN
NaN: not a number
์ซ์์ ๋งจ ๋ง์ง๋ง์ 'n'๋ง ๋ถ์ด๋ฉด bigInt๋ก ๊ฐ์ฃผํ๋ค.
(์ต๊ทผ์ ์ถ๊ฐ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํฌ๋กฌ, ํ์ด์ดํญ์ค์์๋ง ์ง์ํ๋ค)
// bigInt (fairly new, don't use it yet)
const bigInt = 1234567890123456789012345678901234567890n; // over (-2**53) ~ 2*53)
console.log(`value: ${bigInt}, type: ${typeof bigInt}`);
-String
- ๋ค๋ฅธ string๊ณผ + ๋ฅผ ์ด์ฉํด์ ๋ถ์ผ ์ ์๋ค.
- ๋ฐฑํฑ(`)์ผ๋ก ๊ฐ์ธ์ ๋ณ์๋ฅผ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค.
// 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}`);
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
- ๊ณ ์ ํ ์๋ณ์
- ๋์ ๋ค๋ฐ์ ์ผ๋ก ์ผ์ด๋ ์ฝ๋์์ ์ฐ์ ์์๋ฅผ ์ฃผ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
- ๋์ผํ string์ผ๋ก ์์ฑํ์ฌ๋ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ทจ๊ธํ๋ค.
- for ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋์ผํ symbol์ ๋ง๋ค ์ ์๋ค.
- ์ถ๋ ฅ์ description ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
// symbol, create unique identifiers for objects
const symbol1 = Symbol('id');
const symbol2 = Symbol('id');
console.log(symbol1 === symbol2);
const gSymbol1 = Symbol.for('id');
const gSymbol2 = Symbol.for('id');
console.log(gSymbol1 === gSymbol2);
console.log(`value: ${symbol1.description}, type: ${typeof symbol1}`);
- Object type
-Object
์ฑ๊ธ ์์ดํ ๋ค์ ๋ฌถ์ด์ ํ ๋ฐ์ค({})๋ก ๊ด๋ฆฌ. ํจ์์ ์ธ์๋ก ์ ๋ฌ ๊ฐ๋ฅ. ๋ฆฌํด ํ์ ์ผ๋ก function ๋ฆฌํด ๊ฐ๋ฅ.
function, first-class-function ๋ณ์์ ํ ๋น์ด ๊ฐ๋ฅํ๋ค.
// object, real-life object, data structure
const ellie = { name: 'ellie', age: 20 };
ellie.age = 21;
- ํ ๋ฒ ํ ๋น๋ object๋ ๋ค๋ฅธ object๋ก ํ ๋น์ด ๋ถ๊ฐ๋ฅํ๋ค. (const๋ก ์ง์ ๋์ด ์์ด์ ๋ฉ๋ชจ๋ฆฌ์ ํฌ์ธํฐ๊ฐ ์ ๊ฒจ์๊ธฐ ๋๋ฌธ!)
- object ์์ ๋ณ์์ ๊ฐ(name, age)์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ํ ๋นํ ์ ์๋ค.
- Dynamic Typing
JavaScript๋ ์ ์ธ์ ๋ฐ์ดํฐ ํ์ ์ ๋ช ์ํ ํ์๊ฐ ์๋ค. ๋ฐํ์์์, ํ ๋น๋ ๊ฐ์ ๋ฐ๋ผ ํ์ ์ด ๋ณ๊ฒฝ๋๋ค.
ํ์ง๋ง ๋ค์์ ์์ง๋์ด, ๊ท๋ชจ๊ฐ ์๋ ํ๋ก์ ํธ์์ ์ค๋ฅ ๋ฐ์์ ์์ธ์ด ๋ ์ ์์ -> TypeScript๋ก ๋ณด์
// 5. Dynamic typing: dynamically typed language
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));
'JavaScript > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] call, apply, bind (0) | 2021.10.23 |
---|---|
๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC) (0) | 2021.10.22 |
[๋๋ฆผ์ฝ๋ฉ by ์๋ฆฌ] JavaScript ๊ธฐ์ด ๊ฐ์(1) (ES5+) (0) | 2021.10.05 |
[JavaScript] ํจ์ (0) | 2021.02.11 |
[JavaScript] ๊ฐ์ฒด (0) | 2021.02.11 |
๋๊ธ