JABASCRIPT BASIC
๋ณ์
scope
function test(){
var message = "hi"; // ์ง์ญ๋ณ์
}
test();
alert(message); // ์ค๋ฅ ๋ฐ์
VM3067:5 Uncaught ReferenceError: message is not defined
at <anonymous>:5:7
var
์ฐ์ฐ์๋ ๋ณ์๋ฅผ ๋ก์ปฌ ์ค์ฝํ์์ ์ ์ํ๋ค๋ ์ ์ ๋ฐ๋์ ๊ธฐ์ตํด์ผํ๋ค. var
ํค์๋๋ฅผ ์จ์ ๋ณ์๋ฅผ ์ ์ํ๋ฉด ํด๋น ๋ณ์๋ ์์ ๊ฐ์ด ํจ์๊ฐ ์ข
๋ฃ๋๋ ์๊ฐ ํ๊ดด๋๋ค.
function test(){
message = "hi"; // ์ ์ญ๋ณ์
}
test();
alert(message); //"hi"
var
์ฐ์ฐ์๋ฅผ ์๋ตํ๋ ๊ฒฝ์ฐ์๋ ๋ณ์๋ฅผ ์ ์ญ์ผ๋ก ์ ์ํ ์ ์๋ค.
๋ฐ์ดํฐ ํ์ ECMAScript์๋ ๋ค์ฏ ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ํ์ ์ด ์๋ค. ์ด๋ฅผ primitive(์์) ๋ฐ์ดํฐ ํ์ ์ด๋ผ ๋ถ๋ฅด๊ธฐ๋ํ๋ค.
Undefined
Null
Boolean
number
string
๋ณต์กํ ๋ฐ์ดํฐ ํ์
object : ํจ์๋ฅผ ์ ์ธํ ๊ฐ์ฒด or null
function : ํจ์
์์ ๋ค์ฏ ๊ฐ์ง๊ฐ ์ด์ ํด๋น๋๋ค.
undefined
undefined
๋ var
๋ฅผ ์จ์ ๋ณ์๋ฅผ ์ ์ํ์ง๋ง ์ด๊ธฐํ ํ์ง์์ ๊ฒฝ์ฐ์ด๋ค.
var message;
console.log(message); //=> undefined
๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ธฐํํ์ง ์์ ๋ณ์์๋ ํญ์ undefined
๊ฐ ํ ๋น๋๋ค.
var message; // undefined
console.log(message); // "undefined"
console.log(age); // ์ค๋ฅ
Uncaught ReferenceError: age is not defined
at <anonymous>:1:13
undefined ๊ฐ์ด ํ ๋น๋ ๋ณ์์ ์ ์๋์ง ์์ ๋ณ์๋ฅผ ๊ตฌ๋ถํ ์ ์์ด์ผํ๋ค. ์์ง ์ ์ํ ์ ์๋ ๋ณ์์ ์คํํ ์ ์๋ ์กฐ์ ์ typeof
๋ฟ์ด๋ค.
var message;
typeof message
"undefined"
typeof age; // "undefined"
Null
Null ํ์
์ญ์ ๊ฐ ํ๋๋ง์ ๊ฐ๋๋ค. null
์ ๋น ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ด๋ฏ๋ก typeof
๋ฅผ ํธ์ถํ๋ฉด object
๋ฅผ ๋ฐํํ๋ค.
var a = null;
typeof(a); // "object"
๋ณ์ ์ ์์์ ํด๋น ๋ณ์๊ฐ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ ๊ฒ์ด๋ผ๋ฉด null๋ก ์ด๊ธฐํํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
console.log(null == undefined) // true
undefined
๋ null
์์ ํ์ํ์ผ๋ฏ๋ก ํ๋ฉด์ ์ผ๋ก ๋์ผํ ๊ฒ์ผ๋ก ์ ์ํ๋ค. null
๊ณผ undefined
๋ ์๋ก ๊ด๋ จ์์ง๋ง ๋ ๊ฐ์ ์์ฃผ ๋ค๋ฅด๊ฒ ์ฐ์ธ๋ค. ๋ณ์๊ฐ์ ๋ช
์์ ์ผ๋ก undefined
๋ฅผ ํ ๋นํด์๋ ์๋์ง๋ง, null
์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ผํ์ง๋ง ํด๋น ๊ฐ์ฒด๋ฅผ ์ด์ฉํ ์ ์์ ๋ ํญ์ null
์ด ์์ผํ๋ค.
boolean
๋ฐ์ดํฐ ํ์
true
false
boolean
true
false
string
๋น์ด์์ง์์ ๋ฌธ์์ด ์ ๋ถ
""(๋น ๋ฌธ์์ด)
number
0์ด ์๋ ๋ชจ๋ ์ซ์, ๋ฌดํ๋(Infinity) ํฌํจ
0, NaN
object
๋ชจ๋ ๊ฐ์ฒด
null
undefined
X(ํด๋น์์)
undefined
number
๋ถ๋์์์ ์ซ์๋ ์์์ ์๋ 17์๋ฆฌ๊น์ง ์ ํํ์ง๋ง ์ฌ์น์ฐ์ฐ์ ์์ด์๋ ๋ถ์ ํํ๋ค.
a = 0.1
b = 0.2
a+b // 0.30000000000000004
console.log(a+b == 0.3) //=> false
0.1 + 0.2๊ฐ 0.3์ด ์๋ 0.30000000000000004๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ฐ๋ผ์ ๋ถ๋์์์ ์ซ์๋ฅผ ๋น๊ตํ ๋๋ ์ด๋ฌํ ๋ฒ๊ทธ๋ฅผ ์ธ์งํ๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์จ์ผํ๋ค.
Number.MIN_VALUE // 5e-324
Number.MAX_VALUE // 1.7976931348623157e+308
isFinite(123124124123123) // true
isFinite(Infinity) // false
์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ MIN_VALUE, MAX_VALUE๋ฅผ ํตํด์ ์ ์ ์์ผ๋ฉฐ, ํด๋น ์ซ์๊ฐ ์ ํจํ ๋ฒ์์์ ์๋์ง๋ isFinite()
ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด๋๋ค.
NaN
NaN์ Not a Number์ผ๋ก ์๋ํ ์กฐ์์ด ์คํจํ์ ๋ ๋ฐํ๋๋ ๊ฐ์ด๋ค. NaN์ ์ด๋ ํ ๊ฐ๋ ์ผ์นํ์ง ์์ผ๋ฉฐ, NaN๋ผ๋ฆฌ๋ ์ผ์นํ์ง ์๋๋ค.
console.log(NaN == NaN); // false
๊ทธ๋ฌ๋ฏ๋ก, isNaN()
ํจ์๋ฅผ ๋ฐ๋ก ์ ๊ณตํด์ค๋ค.
์์ ๊ฐ๊ณผ ์ฐธ์กฐ ๊ฐ
์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์๋ ๋ณ์๊ฐ ๊ฐ์ ธ์ผํ ๋ฐ์ดํฐ ํ์ ์ ๋ํ ๊ท์น์ด ์์ผ๋ฏ๋ก ๋ณ์์ ๊ฐ๊ณผ ๋ฐ์ดํฐ ํ์ ์ ์คํ ์ค์ ๋ฐ๋ ์ ์๋ค.
์์ ๊ฐ์ ๋จ์ํ ๋ฐ์ดํฐ์ด๋ฉฐ, ์ฐธ์กฐ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๋ณ์์ ๊ฐ์ ํ ๋นํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํด๋น ๊ฐ์ด ์์ ๋ฐ์ดํฐ์ธ์ง ์ฐธ์กฐ ๋ฐ์ดํฐ์ธ์ง ํ๋จํ๋ค.
์์ํ์ ์ Undefined, Null, Boolean, ์ซ์, ๋ฌธ์์ด์ด๋ค. ์ฐธ์กฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๊ฐ์ฒด๋ก, ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ง์ ์กฐ์ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ, ๊ฐ์ฒด๋ฅผ ์กฐ์ํ ๋๋ ์ฌ์ค ํด๋น ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ์กฐ์ํ๋ ๊ฒ์ด๋ค.
๋์ ํ๋กํผํฐ
์ฐธ์กฐ ๊ฐ์ ๋ค๋ฃฐ๋๋ ์ธ์ ๋ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๋ฐ๊พธ๊ณ ์ญ์ ํ ์ ์๋ค.
var person = new Object();
person.name = "Faker";
console.log(person.name); // "Faker"
๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๋ค. ์ด ์์ ๋ถํฐ ๊ฐ์ฒด๊ฐ ํ๊ดด๋๊ฑฐ๋ ํ๋กํผํฐ๋ฅผ ๋ช ์์ ์ผ๋ก ์ ๊ฑฐํ๊ธฐ ์ ๊น์ง๋ ํด๋น ํ๋กํผํฐ์ ์ ๊ทผํ ์ ์๋ค.
var name = "Faker";
name.age = 24;
console.log(name.age); // undefined
์์๊ฐ์๋ ํ๋กํผํฐ๊ฐ ์์ผ๋ฉฐ, ์ถ๊ฐํ๋ คํด๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง๋ ์์ง๋ง ๋ฐ๋ก ์ฌ๋ผ์ง๋ค. ๋์ ์ผ๋ก ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ ์ ์๋ ๊ฐ์ ์ฐธ์กฐ๊ฐ ๋ฟ์ด๋ค.
๊ฐ ๋ณต์ฌ
์์ ๊ฐ์ ๋ค๋ฅธ ๋ณ์๋ก ๋ณต์ฌํ ๋๋ ํ์ฌ ์ ์ฅ๋ ๊ฐ์ ์๋ก ์์ฑํ ๋ค์ ์๋ก์ด ๋ณ์์ ๋ณต์ฌํ๋ค.
var num1 = 4;
var num2 = num1;
console.log(num1 , num2); // 4 4
num1 = 5;
console.log(num1 , num2); // 5 4
์ฌ๊ธฐ์ ๋ณต์ฌ๋ ๊ฐ num2๋ num1์ ์ ์ฅ๋ ๊ฐ๊ณผ๋ ์์ ํ ๋ถ๋ฆฌ๋์ด์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฐธ์กฐ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๋ฉด ๊ทธ ๊ฐ์ด ๊ฐ์ฒด ์์ฒด๊ฐ ์๋๋ผ ํ์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ด๋ค.
var obj = Object();
var obj2 = obj;
obj.name = "Faker";
console.log(obj2.name);
obj2.name = "Clid";
console.log(obj.name);
๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ฒด๋ฅผ ์กฐ์ํ๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด์๋ ์ํฅ์ด ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋งค๊ฐ๋ณ์
ECMAScript์ ํจ์ ๋งค๊ฐ๋ณ์๋ ๋ชจ๋ ๊ฐ์ผ๋ก ์ ๋ฌ๋๋ค. ํจ์ ์ธ๋ถ์ ์๋ ๊ฐ์ ํจ์ ๋ด๋ถ์ ๋งค๊ฐ๋ณ์์ ๋ณต์ฌ๋๋๋ฐ, ์ด๋ ๋ณ์์ ๊ฐ์ ๋ณต์ฌํ๋ ๊ฒ๊ณผ ๊ฐ๋ค. ๋ณ์๋ ๊ฐ์ผ๋ก๋, ์ฐธ์กฐ๋ก๋ ์ ๊ทผ๊ฐ๋ฅํ์ง๋ง ๋งค๊ฐ๋ณ์๋ ์ค์ง ๊ฐ์ผ๋ก๋ง ์ ๋ฌ๋๋ค.
function addTen(num){
// ์ฌ๊ธฐ์ ๋งค๊ฐ๋ณ์ num์ ์ง์ญ๋ณ์์ด๋ค.
num += 10;
return num;
}
var count = 20;
var result = addTen(count);
console.log(count); // 20
console.log(result); // 30
function setName(obj){
obj.name = "Faker";
}
var person = new Object();
setName(person);
console.log(person);
[object Object] {
name: "Faker"
}
obj๋ ํจ์์ ๊ฐ ํํ๋ก ์ ๋ฌ๋์์ง๋ง, ์ฐธ์กฐ๋ฅผ ํตํด์ ๊ฐ์ฒด์ ์ ๊ทผํ๋ค. ํจ์ ๋ด๋ถ์์ obj์ name ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ํจ์ ์ธ๋ถ์์๋ ๋ฐ์๋๋๋ฐ obj๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฒ์ ํ์ ์กด์ฌํ๋ ์ ์ญ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ด๋ค.
function setName2(obj){
obj.name = "Faker";
obj = new Object();
obj.name = "Greg";
}
var person2 = new Object();
setName2(person2);
console.log(person2);
[object Object] {
name: "Faker"
}
๋ง์ฝ person2๊ฐ ์ฐธ์กฐ๋ก ์ ๋ฌ๋์๋ค๋ฉด, person2์ name ํ๋กํผํฐ ๊ฐ์ Grag๋ก ๋ณ๊ฒฝ๋์ด์ผํ์ง๋ง "Faker"๊ทธ๋๋ก์ด๋ค. ํจ์์ ๊ฐ์ ์ ๋ฌํ๊ธฐ๋๋ฌธ์ ํจ์ ๋ด๋ถ์์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ด ๋ฐ๋์์์๋ ๋ถ๊ตฌํ๊ณ ์๋ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ทธ๋๋ก ์ ์งํ ๊ฒ์ด๋ค. ํจ์ ๋ด๋ถ์์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด, obj๋ ์ง์ญ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ๋๋ฉฐ, ์ด ์ง์ญ ๊ฐ์ฒด๋ ํจ์๊ฐ ์คํ์ ๋ง์น๋ ์๊ฐ ์ฆ์ ํ๊ดด๋๋ค.
ํ์
ํ๋ณ
typeof
์ฐ์ฐ์๋ ๋ณ์๊ฐ ์์ ํ์
์ธ์ง ํ์
ํ๊ธฐ์ ์ต์์ด์ง๋ง, ์ฐธ์กฐ๊ฐ์ ๋ํด์๋ ํ๋ณํ๊ธฐ ์ด๋ ต๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์ instanceof
๋ฅผ ์ฌ์ฉํ๋ฉด๋๋ค.
variable instanceof constructor
console.log(person instanceof Object); // true
๋ชจ๋ ์ฐธ์กฐ ๊ฐ์ Object์ ์ธ์คํด์ค์ธ ๊ฒ์ผ๋ก ์ ์๋์ด ์์ผ๋ฏ๋ก ํญ์ true๋ฅผ ๋ฐํํ๋ค.
์ฐ์ฐ์
์ผ์น/๋ถ์ผ์น vs ๋์ผ/๋น๋์ผ ์ฐ์ฐ์
๋์ผ(==
)/๋น๋์ผ(!=
) ์ฐ์ฐ์์ ์ผ์น(===
)/๋ถ์ผ์น(!==
) ์ฐ์ฐ์๋ ๊ฐ์ ์ผ์ํ์ง๋ง ์ผ์น, ๋ถ์ผ์น ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์์ ํ์
์ ๋ณํํ์ง ์๊ณ ๊ทธ๋๋ก ๋น๊ตํ๋ค.
console.log("55"==55); // true
console.log("55"===55); // false
๋์ผ ์ฐ์ฐ์(==
)๋ ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํ ๋ค์ ๋น๊ต๋ฅผ ํ๋ฏ๋ก ๋ ๊ฐ์ด ๋์ผํ๋ค๊ณ ๋ณธ๋ค. ํ์ง๋ง ์ผ์น ์ฐ์ฐ์(===
)๋ ๋ณํํ์ง ์์ ์ํ์์ ๋น๊ตํ๋ฏ๋ก ์ผ์นํ์ง ์๋ค๊ณ ๋ฐํํ๋ค.
console.log(undefined == null); // true
console.log(undefined === null); // false
ํจ์
ECMAScript ํจ์๋ ๋งค๊ฐ๋ณ์ ์ซ์๋ฅผ ๋ฐ์ง์ง ์์ผ๋ฉฐ ๋ฐ์ดํฐ ํ์
๋ ์ฒดํฌํ์ง ์๋๋ค. ํจ์์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ ๊ฐ ๋ฐ๋๋ก ๋ง๋ค์๋๋ผ๋ ๋ฐ๋์ ๋งค๊ฐ๋ณ์ ๋ ๊ฐ๋ฅผ ๋๊ฒจ์ผํ๋ ๊ฑด ์๋๋ค. ECMAScript์ ๋งค๊ฐ๋ณ์๊ฐ ๋ด๋ถ์ ์ผ๋ก๋ ๋ฐฐ์ด๋ก ํํ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋ฐฐ์ด์ ํญ์ ํจ์์ ์ ๋ฌ๋์ง๋ง ํจ์๋ ๋ฐฐ์ด์ ์ด๋ค ๊ฐ์ด ๋ค์ด์๋์ง ์ฒดํฌํ์ง ์๋๋ค. ํจ์๋ arguments
๋ผ๋ ๊ฐ์ฒด๋ฅผ ํตํด์ ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ ๊ทผํ ์ ์๋ค.
function sayHi(){
console.log(arguments);
}
sayHi('test1','1234', '25');
[object Arguments] {
0: "test1",
1: "1234",
2: "25"
}
arguments๋ ์ธ๋ฑ์ค ๊ฐ์ผ๋ก ์ ๊ทผํ ์ ์๋ค.
ECMAScript ํจ์์๋ ๋ค๋ฅธ ์ธ์ด์์ ์ฌ์ฉํ๋ ์ค๋ฒ๋ก๋ฉ์ด ์๋ค.๊ฐ์ ์ด๋ฆ์ผ๋ก ํจ์๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ์ํ๋ฉด ๋ง์ง๋ง ํจ์๊ฐ ํ ๋น๋๋ค.
Last updated
Was this helpful?