λΈλΌμ°μ μ λλ²κΉ
μ½μ€μ μ κ·Όν μ μλ λ©μλ μ 곡.
λΈλΌμ°μ§ λ¬Έλ§₯μμλ Window, μ컀μμλ WorkerGlobalScope μμ±μΌλ‘ ν¬ν¨
λ³μ μ μΈλ¬Έμ΄ μ λλ‘ λμ΄ μ¬λ €μ§ κ²μ²λΌ λμνλ κ²
// μ΄ μμ μλ λ³μ νΈμ΄μ€ν
μ μν΄ μ΄λ―Έ foo λ³μκ° μ μΈλμλ€(1. μ μΈ λ¨κ³)
// λ³μ fooλ undefinedλ‘ μ΄κΈ°νλλ€. (2. μ΄κΈ°ν λ¨κ³)
console.log(foo); // undefined
// λ³μμ κ°μ ν λΉ(3. ν λΉ λ¨κ³)
foo = 123;
console.log(foo); // 123
// λ³μ μ μΈμ λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ μ€νλλ€.
var foo;
// λ°νμ μ΄μ μ μ μΈ λ¨κ³κ° μ€νλλ€. μμ§ λ³μκ° μ΄κΈ°νλμ§ μμλ€.
// μ΄κΈ°ν μ΄μ μ μΌμμ μ¬κ° μ§λμμλ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
console.log(foo); // ReferenceError: foo is not defined
let foo; // λ³μ μ μΈλ¬Έμμ μ΄κΈ°ν λ¨κ³κ° μ€νλλ€.
console.log(foo); // undefined
foo = 1; // ν λΉλ¬Έμμ ν λΉ λ¨κ³κ° μ€νλλ€.
console.log(foo); // 1
π¨οΈ κΆμ₯ κ°μ΄λλΌμΈ
ν¨μ μ μΈλ¬Έμ μ½λκ° μ€νλκΈ° μ μ λ©λͺ¨λ¦¬μ 미리 λ‘λ
=> ν¨μκ° μ½λμμ μ μΈλκΈ° μ μ νΈμΆλλλΌλ μ€λ₯κ° λ°μ x
// ν¨μ νΈμΆμ΄ ν¨μ μ μΈλ¬Έλ³΄λ€ μμ μμ
greet(); // 'Hello, world!' μΆλ ₯
function greet() {
console.log('Hello, world!');
}
λ³μμ ν¨μλ₯Ό ν λΉνλ λ°©μμΌλ‘, μ μΈλΆκ° νΈμ΄μ€ν λλλΌλ ν λΉλ ν¨μ μ체λ νΈμ΄μ€ν λμ§ x
// ν¨μ ννμμ μ¬μ©ν κ²½μ°
sayHello(); // ReferenceError: Cannot access 'sayHello' before initialization
let sayHello = function() {
console.log('Hello!');
};
κΈ°λ³Έμ μΌλ‘ μμ νμ
κ°μ μ μ₯νκΈ° μν΄ Call Stack λ©λͺ¨λ¦¬ 곡κ°μ μ¬μ©νμ§λ§,
μ°Έμ‘° νμ
μ κ²½μ° Heap μ΄λΌλ λ³λμ λ©λͺ¨λ¦¬ 곡κ°μ μ¬μ©νλ€.
μ΄ κ²½μ°μ Call Stack μ κ°μ²΄ λ° λ°°μ΄ κ°μ΄ μλ Heap λ©λͺ¨λ¦¬ μ°Έμ‘° IDλ₯Ό κ°μΌλ‘ μ μ₯
JSλ 미리 μ μΈν νμ
μ κ°λ§ ν λΉ ν μ μλ κ²μ΄ μλ,
μ΄λ ν λ°μ΄ν° νμ
μ κ°μ΄λΌλ μμ λ‘κ² ν λΉν μ μλ€.
λμ νμ΄ν
λͺ
μμ νμ
λ³ν / νμ
μΊμ€ν
: κ°λ°μκ° μλμ μΌλ‘ κ°μ νμ
μ λ³ννλ κ²μ묡μ νμ
λ³ν / νμ
κ°μ λ³ν
: κ°λ°μμ μλμ μκ΄μμ΄ ννμμ νκ°νλ λμ€μ JSμμ§μ μν΄ μ묡μ μΌλ‘ νμ
μ΄ μλ λ³νλλ κ²=> λ λ€ κΈ°μ‘΄ μμ κ°μ μ§μ λ³κ²½νλ κ²μ μλλ€.
=> νμ
λ³νμ΄λ κΈ°μ‘΄ μμ κ°μ μ¬μ©ν΄ λ€λ₯Έ νμ
μ μλ‘μ΄ μμ κ°μ μμ±νλ κ²μ΄λ€.
λ¬Έμμ΄ μ°κ²° μ°μ°μ + κ° νμ©λ ννμμ νκ°νκΈ° μν΄μ νΌμ°μ°μλ₯Ό λͺ¨λ λ¬Έμμ΄λ‘ μ묡μ νμ λ³ν
// μ«μ νμ
0 + '' // "0"
-0 + '' // "0"
1+ '' // "1"
-1 + '' // "-1"
NaN + '' // "NaN"
Infinity + '' // "Infinity"
-Infinity + '' // "-Infinity"
// boolean νμ
true + '' // "true"
false + '' // "false"
// null νμ
null + '' // "null"
// undefined νμ
undefined + '' // "undefined"
// μ¬λ² νμ
(Symbol()) + '' // "TypeError"
// κ°μ²΄ νμ
({}) + '' // "[object Object]"
Math + '' // "[object Math]"
[] + '' // ""
[10, 20] + '' // "10, 20"
(function(){}) + '' // "function()"
Array + '' // "function Array() {[native code]}"
μ°μ μ°μ°μ ννμμ νκ°νκΈ° μν΄ μ°μ μ°μ°μμ νΌμ°μ°μ μ€μμ μ«μ νμ μ΄ μλ νΌμ°μ°μλ₯Ό μ«μ νμ μΌλ‘ μ묡μ νμ λ³ν
// μ«μ νμ
+'' // 0
+'0' // 0
+'1' // 1
+'string' // NaN
// boolean νμ
+true // 1
+false // 0
// null νμ
+null // 0
// undefined νμ
+undefined // NaN
// μ¬λ² νμ
+Symbol() // TypeError
// κ°μ²΄ νμ
+{} // NaN
+[] // 0
+[10, 20] // NaN
+(function(){}) // NaN
κ°μ²΄μ λΉ λ°°μ΄μ΄ μλ λ°°μ΄, undefinedλ λ³νλμ§ μμ NaNμ΄ λλ€λ κ²μ μ£Όμ
쑰건μμ νκ° κ²°κ³Όλ₯Ό λΆλ¦¬μΈ νμ μΌλ‘ μ묡μ νμ λ³ν
if(' ') console.log('1'); //λΉλ¬Έμμ΄μ Falsyν κ°
if(true) console.log('2');
if(0) console.log('3'); //0μ Falsyν κ°
if('str') console.log('4'); //λ¬Έμμ΄μ Truthyν κ°
if(null) console.log('5'); //nullμ Falsyν κ°
π‘ falseλ‘ νκ°λλ Falsy κ°
β Falsy κ° μΈμ λͺ¨λ κ°μ λͺ¨λ trueλ‘ νκ°λλ Truthy κ°μ΄λ€.
//μ«μ->λ¬Έμμ΄νμ
String(1); //-> '1'
String(NaN); //-> 'NaN'
//λΆλ¦¬μΈ νμ
-> λ¬Έμμ΄νμ
String(true) //->'true'
String(false) //->'false'
toString()
//μ«μ->λ¬Έμμ΄νμ
(1).toString(); //-> '1'
(NaN).toString(); //-> 'NaN'
//λΆλ¦¬μΈ -> λ¬Έμμ΄νμ
(true).toString(); //-> 'true'
(false).toString(); //-> 'false'
+
(λ¬Έμμ΄ μ°κ²° μ°μ°μ) μ΄μ© //μ«μ -> λ¬Έμμ΄ νμ
1 + ''; //-> '1'
//λΆλ¦¬μΈ -> λ¬Έμμ΄ νμ
true + '' //'true'
//λ¬Έμμ΄ -> λΆλ¦¬μΈ
Boolean('x'); //true
Boolean(' '); //false
Boolean('false'); //true
//λ¬Έμμ΄ -> λΆλ¦¬μΈ
!!'x'; //true
!!' '; //false
//μ«μ -> λΆλ¦¬μΈ
!!0; //false
!!1; //true
!!NaN; //false
!!Infinity //true
λ°±ν± ``` μ μ¬μ©νμ¬ λ¬Έμμ΄μ ννν κ²
μ€λ°κΏμ μ½κ²ν μ μκ³ , λ΄λΆμ ννμμ ν¬ν¨ν μ μκ² λλ€.