๐Ÿ“• Language/JavaScript

[Javascript] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ์ดˆ

a n u e 2022. 4. 29. 15:37

์บกํ‹ดํŒ๊ต๋‹˜์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ ๋‹ค์ง€๊ธฐ ๊ธ€์„ ์ฐธ์กฐํ•˜์—ฌ ๊ณต๋ถ€ํ•˜๋ฉฐ ๋„์ ์ธ ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํƒ€์ž…

<๊ธฐ๋ณธ ํƒ€์ž…>

1. Number - ์‹ค์ˆ˜

2. String - ๋ฌธ์ž์—ด

3. Boolean 

4. undefined - ๋ณ€์ˆ˜์— ๊ฐ’์ด ํ• ๋‹น๋˜๊ธฐ ์ „ ๊ฐ’์ด์ž ํƒ€์ž…

5. null - ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๊ฐ’. ํƒ€์ž…์€ Object์œผ๋กœ ๋ฐ˜ํ™˜

 

<์ฐธ์กฐ(๊ฐ์ฒด) ํƒ€์ž…>

1. Object

2. Array

3. Function


NaN?

์ •์ƒ์  ๊ฐ’์„ ์–ป์ง€ ๋ชปํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ

์˜ˆ์‹œ) ํ”„๋กœํผํ‹ฐ๋ช…์ด ์—ฐ์‚ฐ์ž ํฌํ•จํ•˜์—ฌ ์—๋Ÿฌ


 

delete ์—ฐ์‚ฐ์ž

๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ์‚ญ์ œ. ๋‹จ, ๊ฐ์ฒด ์‚ญ์ œ ๋ถˆ๊ฐ€!


๊ฐ์ฒด์˜ ๋ชจ๋“  ์—ฐ์‚ฐ์€ ์ฐธ์กฐ ๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌํ•จ

 


Array์™€ Object์˜ ๊ตฌ๋ถ„


delete, splice ์—ฐ์‚ฐ์ž์™€ ๋ฐฐ์—ด


typeof

var num = 10;
var str = "a";
var boolean = true;
var obj = {};
var undefined;
var nullValue = null;
var arr = [];
function func() {};

console.log(typeof num); // number
console.log(typeof str); // string
console.log(typeof boolean); // boolean
console.log(typeof obj); // object
console.log(typeof undefined); // undefined
console.log(typeof nullValue); // object (null ์€ object)
console.log(typeof arr); // object (๋ฐฐ์—ด๋„ object)
console.log(typeof func); // function

ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

ํ•จ์ˆ˜๋Š” ๋จผ์ € ํ˜ธ์ถœํ•˜๊ณ , ํ•จ์ˆ˜ ์ •์˜๋Š” ๋‚˜์ค‘์— ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ์‹œ 1

function hoisting() {
	hoistingText = "ํ˜ธ์ด์ŠคํŒ…";
	var hoistingText;
	console.log(hoistingText);
}
hoisting(); //ํ˜ธ์ด์ŠคํŒ…

↓ 1๋ฒˆ์— ๋Œ€ํ•ด ํ˜ธ์ด์ŠคํŒ…์œผ๋กœ ์žฌํ•ด์„๋œ ์ฝ”๋“œ

function hoisting() {
	var hoistingText;
	hoistingText = "ํ˜ธ์ด์ŠคํŒ…";
	console.log(hoistingText);
}

 

์˜ˆ์‹œ 2

function hoisting() {
	console.log("1 : " + hoistingText);
	var hoistingText = "ํ˜ธ์ด์ŠคํŒ…";
	console.log("2 : " + hoistingText);
}
hoisting(); 
//1 : undefined
//2 : ํ˜ธ์ด์ŠคํŒ…

์™œ 1๋ฒˆ console log์— undefined๊ฐ€ ๋œฐ๊นŒ?
↓ 2๋ฒˆ์— ๋Œ€ํ•ด ํ˜ธ์ด์ŠคํŒ…์œผ๋กœ ์žฌํ•ด์„๋œ ์ฝ”๋“œ

function hoisting()
{
	var hoistingText;
	console.log("1 : + hoistingText);
	hoistingText = "ํ˜ธ์ด์ŠคํŒ…";
	console.log("2 : + hoistingText);
}
hoisting();

ํ˜ธ์ด์ŠคํŒ…์œผ๋กœ var hoistingText ์„ ์–ธ์ด ์ตœ์ƒ์œ„๋กœ ์˜ฌ๋ผ์˜จ๋‹ค. 

1๋ฒˆ console log๋Š” ์„ ์–ธ๋งŒ ํ•œ ๋ณ€์ˆ˜์ด๋ฏ€๋กœ, undefined๊ฐ€ ์ฐํžŒ๋‹ค.


๋‚ด๋ถ€ ํ•จ์ˆ˜


์ƒ์„ฑ์ž ํ•จ์ˆ˜

์ผ๋ฐ˜ ๊ฐ์ฒด ์„ ์–ธ๊ณผ๋Š” ๋‹ฌ๋ฆฌ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ฐ์–ด๋‚ผ ์ˆ˜ ์žˆ์Œ

ํ•จ์ˆ˜๋ช… ๋งจ ์•ž ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž! 

 


instanceof ํ™œ์šฉ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๊ตฌ๋ถ„

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ํ˜•์‹์ด ๋ณ„๋„๋กœ ์—†์Œ. ๊ธฐ์กด ํ•จ์ˆ˜์— new๋งŒ ๋ถ™์—ฌ์ฃผ๋ฉด ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์ƒ์„ฑ ๊ฐ€๋Šฅ

์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ๋ฐ, new๋ฅผ ๋ถ™์ด๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‹จ์˜ ๊ธฐ๋ฒ• ์‚ฌ์šฉ.

๋Œ€๋ถ€๋ถ„์˜ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด

 

function Func(arg) {
	if(!(this instanceof arguments.callee))
	{
		return new Func(arg);
		this.value = arg || 0;
	}
}

var a = new Func(100);
var b = Func(200);

console.log(a.value) //1000
console.log(b.value) //2000

Func์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ callํ•˜๋ฉด, ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ
๋Œ€๋ถ€๋ถ„์˜ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.

 


ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ด๋‹

ํ•ด๋‹น ํ•จ์ˆ˜์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์†์„ฑ, ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ€๋ชจ ๊ฐ์ฒด(ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด)์—์„œ ์ฐพ์Œ

obj์˜ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๊ฐ€ Object์ธ๋ฐ hasOwnProperty ๋ฉ”์„œ๋“œ๋Š” Object์˜ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ์ด๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“  ๊ฐ์ฒด์˜ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ ๊ฐ์ฒด๋Š” Object ๊ฐ์ฒด์ด๋ฏ€๋กœ!

 

var obj = {
	name : 'kea',
	printName : function() {
		console.log(this.name);
	}
};
obj.printName(); //kea
obj.hasOwnProperty('name'); //true
obj.hasOwnProperty('age'); //false

์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜

ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•จ๊ณผ ๋™์‹œ์— ๋ฐ”๋กœ ์‹คํ–‰
ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค. ์ตœ์ดˆ ํ•œ๋ฒˆ ์‹คํ–‰๋งŒ ์š”๊ตฌ๋˜๋Š” ์ดˆ๊ธฐํ™” ์ฝ”๋“œ์— ์ ํ•ฉ.

 

๊ธฐ๋ณธํ˜•ํƒœ
(function() {
	// statements
})()

 

โ€ป ์‚ฌ์šฉ๋ฒ•

1. ๊ธฐ๋ช… ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ (๋‘ ์˜ˆ์‹œ๋Š” ๋™์ผ)

 (function a(x) {
	console.log(x*x);
 })(2);
 
 (function a(x) {
	console.log(x*x);
 }(2));

2. ์ต๋ช… ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜

 (function (x) {
	console.log(x*x);
 })(2);
 
 (function (x) {
	console.log(x*x);
 }(2)));

 

โ€ป ๋ณ€์ˆ˜์— ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋ฅผ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜ square์— ์ €์žฅํ•˜๊ณ , ๋ฐ”๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ
๋ณ€์ˆ˜์— ์ €์žฅํ•˜์˜€์œผ๋ฏ€๋กœ ์žฌํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 //์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋ฉด์„œ ์‹คํ–‰
 (square = function (x) {
	console.log(x*x); //4
 })(2);
 //์žฌํ˜ธ์ถœ
 square(3); //9

 

โ€ป ๋ณ€์ˆ˜์— ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ๋ฆฌํ„ด ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 var square = (function (x) {
	return x*x;
 })(2);
 console.log(square); //4

Array.prototype.map()

๋ฐฐ์—ด ๋‚ด์˜ ๋ชจ๋“  ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„, ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ๋ฐ˜ํ™˜

arr(map(callback(currentValue[, index[, array]])[, thisArg])

์˜ˆ์‹œ 1

// definition
Array.prototype.myMap = function(callback) {
    arr = [];
    for (var i = 0; i < this.length; i++)
        arr.push(callback(this[i], i, this));
    return arr;
};

//tests
var arrs = ['dic tanin', 'boo radley', 'hans gruber'];
var numbers2 = [1, 4, 9];

var goodT = arrs.myMap(function(n) {
    return n;
});

var squareRoot = numbers2.myMap(function(num) {
    return Math.sqrt(num);
});

console.log(goodT); // [ 'dic tanin', 'boo radley', 'hans gruber' ]
console.log(squareRoot); // [ 1, 2, 3 ]

์˜ˆ์‹œ 2

const arrayTest = [1,2,3,4];
const mapTest = arrayTest.map(x => x * 2);
console.log(mapTest); //[2,4,6,8]

์˜ˆ์‹œ 3

var array = [{key:1, value:10},
             {key:2, value:20},
             {key:3, value:30}];

var reformattedArray = array.map(function(obj){
   var rObj = {};
   rObj[obj.key] = obj.value;
   return rObj;
});
//reformattedArray๋Š” [{1:10}, {2:20}, {3:30}]

๋น„๋™๊ธฐ ์‹คํ–‰ ๋ฐฉ์‹์˜ ์ดํ•ด

์˜ˆ์‹œ 1

console.log("1");
function exec() {
	setTimeout(function() {
		console.log("2");
	}, 3000);
	setTimeout(function() {
		console.log("3");
	}, 0);
	console.log("4");
	setTimeout(function () {
		console.log("5");
	}, 1000);
}
console.log(exec()); //1,4,3,5,2

์˜ˆ์‹œ 2

๊ฒฐ๊ณผ๊ฐ€ 0,1,2,3,4๊ฐ€ ์•„๋‹˜์— ์ฃผ์˜
for๋ฌธ์˜ ์‹คํ–‰์ด ๋ชจ๋‘ ๋๋‚œ ํ›„์—, setTimeout์˜ ์ฝœ๋ฐฑ์ด ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— 5,5,5,5,5

var i;
for(i=0; i<5; i++) {
	setTimeout(function() {
		console.log(i); //5,5,5,5,5
	}, 1000);
}

arguments

ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ, ๋„˜๊ฒจ์ง„ ์‹ค์ œ ์ธ์ž ๊ฐ’์„ ๊ฐ€์ง„ ๋ฐฐ์—ด

* arguments๋Š” index๋ฅผ ์ง€๋‹ˆ์ง€๋งŒ ๋ฐฐ์—ด์ด ์•„๋‹˜์— ์ฃผ์˜ 
  ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•œ ๊ฐ์ฒด(array-like object)๋ผ๊ณ  ํ•œ๋‹ค.

function add(a,b) {
	console.dir(arguments);
}
console.log(add(1)); // Arguments(1), 0:1
console.log(add(1, 2)); // Arguments(2), 0:1, 1:2
console.log(add(1, 2, 3)); // Arguments(3), 0:1, 1:2, 2:3
function sum() {
	for(var i=0, result=0; i<arguments.length; i++) {
		result += arguments[i];
	}
	result result;
}
console.log(sum(1,2,3)); //6
console.log(sum(1,2,3,4,5,6)); //21