[Front-end๐Ÿฆ] #21 JavaScript

๋˜์ƒยท2021๋…„ 11์›” 26์ผ
0

front-end

๋ชฉ๋ก ๋ณด๊ธฐ
32/58

๋Œ€๋ง์˜ JavaScript๋ฅผ ๋ฐฐ์šฐ๋Š” ๋‚ ์ด์—ˆ๋‹ค!!!

0. Web

๋จผ์ €, ์›น์— ๋Œ€ํ•œ ๋ฐฐ๊ฒฝ์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์งš๊ณ  ๋„˜์–ด๊ฐ”๋‹ค. ์ธํ„ฐ๋„ท์ด ์–ด์ฉŒ๋‹ค ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€์— ๋Œ€ํ•œ ์–˜๊ธฐ๋ฅผ ๋“ค์—ˆ๋‹ค. ์ž…์ž ๊ฐ€์† ์—ฐ๊ตฌ์†Œ์—์„œ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•จ ์ด์—ˆ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ์ธํ„ฐ๋„ท์ด ์—†๋˜ ์‹œ์ ˆ์— ์ž…์ž ๊ฐ€์†๊ธฐ๊ฐ€ ๊ฐœ๋ฐœ์ด ๋˜์–ด ์žˆ์—ˆ๋‹ค๋Š”๊ฒŒ ๋” ์‹ ๊ธฐํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•œ๊ตญ์ด ์„ธ๊ณ„์—์„œ ๋‘๋ฒˆ์งธ๋กœ ์ธํ„ฐ๋„ท์ด ์—ฐ๊ฒฐ๋œ ๋‚˜๋ผ๋ผ๋Š” ์ด์•ผ๊ธฐ๋„ ์‹ ๊ธฐํ–ˆ๋‹ค... ๊ดœํžˆ IT ๊ฐ•๊ตญ์ด ์•„๋‹Œ๊ฐ€๋ณด๋‹ค.
https://www.dentin.kr/news/article.html?no=2928


ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ปดํ“จํ„ฐํ•œํ…Œ ๋ช…๋ นํ•˜๊ธฐ ์œ„ํ•œ ์ฒด๊ณ„.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ์ปดํŒŒ์ผ ์–ธ์–ด์™€ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋กœ ๋‚˜๋‰œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๊ฐ€ C์™€ ํŒŒ์ด์ฌ์ธ๊ฑด ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, JavaScript๋„ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์˜€๋‹ค. ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ฝ˜์†”์— ํ•œ ์ค„ ์”ฉ ์ž…๋ ฅํ•ด์„œ ์‹คํ–‰ํ•˜๋˜๊ฒŒ ํŒŒ์ด์ฌ idle๊ณผ ๋น„์Šทํ–ˆ๋‹ค. ๋ณดํ†ต ์ปดํŒŒ์ผ ์–ธ์–ด๋Š” ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋งŒ๋“ค ๋•Œ, ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋Š” ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์„ ์ œ์–ดํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.




1. JavaScript ๊ธฐ์ดˆ

0. ์„œ๋ก 

์›๋ž˜๋Š” netscape navigator๋ผ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์ง€์›ํ•˜๋˜ ๋น„ํ‘œ์ค€๊ธฐ๋Šฅ์ด์—ˆ๋‹ค.

๋‹น์‹œ์— java๊ฐ€ ์ธ๊ธฐ๊ฐ€ ๋งŽ์•„์„œ (โˆต OS ๋…๋ฆฝ์ ์œผ๋กœ JVM๋งŒ ์„ค์น˜ํ•˜๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅ + OOP) ์ด๋ฆ„์„ ๋”ฐ์™”๋‹ค๊ณ  ํ•œ๋‹ค. ECMAScript(ES)๊ฐ€ ์ •์‹ ๋ช…์นญ์ด๋‹ค. ES5๋ผ๋Š”๊ฒŒ ๋ญ˜๊นŒ ํ–ˆ๋Š”๋ฐ JavaScript์˜ ๋ฒ„์ ผ์ด์—ˆ๋‹ค.

JavaScript๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์–ธ์–ด๋กœ, ์›น์—์„œ๋งŒ ๋™์ž‘ํ•˜๋Š” ์–ธ์–ด์˜€๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ด์ œ๋Š” ์›น ๋ฐ”๊นฅ์—์„œ๋„! node.js๋ฅผ ํ†ตํ•ด javascript๋ฅผ ๋Œ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.


๊ธฐ๋Šฅ
1. BOM & DOM : HTML ์„ ์ œ์–ด
2. Event handling
3. Ajax & JSON


1. ๊ธฐ์ดˆ

๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋“ค.

ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ๋ฒ• 4๊ฐ€์ง€

console.log();
document.write();
document.getElementById('id').innerHTML = 'hi';
window.alert();

์–ด๋–ค ๊ฒƒ์˜ ์ •์ฒด๋ฅผ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ!

console.dir(window); // window๋ฅผ Control ํ•˜๊ธฐ ์œ„ํ•ด ์ •์˜ํ•ด ๋†“์€ ๊ฒƒ๋“ค.
window.console. //์ ‘๊ทผ๋ฐฉ๋ฒ• .(๋ฉค๋ฒ„ ์ ‘๊ทผ ์—ฐ์‚ฐ์ž)

๋งŽ์ด ์‚ฌ์šฉ

console.error('hello'); // error msg์— hello
console.table(list); // list๋ฅผ table ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•ด์คŒ.

์‚ฌ์šฉ๋ฒ•

1. inline: HTML tag ์•ˆ์—์„œ or script ํƒœ๊ทธ ์•ˆ์—์„œ ์‚ฌ์šฉ

// onclick : ํด๋ฆญํ–ˆ์„ ๋•Œ,
// #demoOne์„ ๊ฐ€์ ธ์™€์„œ
// innerHTML ์— Date() ๋ฅผ ํ• ๋‹น. - innerHTML์€ html์„ ๋„ฃ๋Š” ๊ฑฐ๋ผ, "<h1>hello</h1>" ์ด๊ฒƒ๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
<button type="button" onclick="document.getElementById('demoOne').innerHTML = Date()">Click me (One)</button>
<script>
    document.getElementById('title').innerHTML = 'Welcome to JS100์ œ';
    document.write(20 + 20); // body ๋งจ ๋์— ์จ์ง.
</script>

2. script: .js ํŒŒ์ผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉ.
script ํƒœ๊ทธ๋Š” body ๋งจ ์•„๋ž˜์— ์“ฐ์ž. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ html ํŒŒ์ผ์„ ๋ Œ๋”๋งํ•˜๋‹ค๊ฐ€ script๋ฅผ ๋งŒ๋‚˜๋ฉด ๋ฉˆ์ถ”๊ณ  js๋ฅผ ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ. head์— ์“ฐ๊ณ , defer ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด ์žˆ๊ธด ํ•˜๋‹ค.

๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋กœ CSS๋ฅผ ํ…Œ์ŠคํŠธ ํ•ด ๋ณธ ๊ฒƒ ์ฒ˜๋Ÿผ, Js๋Š” Console ์ฐฝ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.


2. ๋ณ€์ˆ˜

var a = 1, b = 2; // variable - ์žฌ์„ ์–ธ, ์žฌํ• ๋‹น ๊ฐ€๋Šฅ
let c = function() { } ; //let me use - ์žฌํ• ๋‹น ๊ฐ€๋Šฅ
const //constant - ๋ถˆ๊ฐ€๋Šฅ

๋ณ€์ˆ˜๋ช… ๊ทœ์น™: ํŠน์ˆ˜๋ฌธ์ž๋Š” $ _ ๋งŒ ๊ฐ€๋Šฅ, ์ฒซ ๊ธ€์ž๋Š” ๋ฌธ์ž, ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„, ์˜ˆ์•ฝ์–ด X, ์œ ๋‹ˆ์ฝ”๋“œ X
const let var ์˜ ์ฐจ์ด
์ฝ˜์†” ๋ชจ๋“œ์—์„œ ์„ ์–ธ

javascript์˜ '์ „์—ญ' ์€ window ์ด๋‹ค. ์•„๋ž˜ ๋‘ ๋ฌธ์žฅ์€ ๊ฒฐ๊ตญ ๊ฐ™์€ ๋ฌธ์žฅ!

var a = 1;
window.a = 1;
document.alert(); ๋Š” ์™œ ์•ˆ๋˜๋ƒ๋Š” ์งˆ๋ฌธ์ด ์žˆ์—ˆ๋Š”๋ฐ, ์กฐ์€๋‹˜๊ป˜์„œ... ๊ทธ๊ฒƒ์€ ๊ตฝ๋„ค ์น˜ํ‚จ์— ๊ฐ€์„œ ํ™ฉ๊ธˆ์˜ฌ๋ฆฌ๋ธŒ๋ฅผ ๋‹ฌ๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๋Š” ์ฐฐ๋–ก ๋น„์œ ๋ฅผ ํ•ด์ฃผ์…จ๋‹ค. document์—๋Š” alert๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ!!!

3. ์—ฐ์‚ฐ

์‚ฐ์ˆ 

+ - * / % **
a++ ++a a-- --a
+= -= *= /=

/ ๋Š” float ๋กœ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋ชซ์ด ํ•„์š”ํ•˜๋ฉด parseInt(); ํ•ด์ฃผ์ž

  • parseInt ๋Š” ๋ณธ์ธ์ด ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๊นŒ์ง€๋งŒ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. parseInt("14m3l") == 14
  • ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ NaN
  • parseint(20, 16) //32๊ฐ€ ๋‚˜์˜จ๋‹ค. 16์ง„์ˆ˜.
  • ๋ฌธ์ž์—ด.toLocaleString() :

๋น„๊ต

>= < <=
== // ๊ฐ’๋งŒ ๋น„๊ต (๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ type์œผ๋กœ ํ˜•๋ณ€ํ™˜์„ ํ•˜๊ณ  ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ž„)
=== // type๊นŒ์ง€ ๋น„๊ต (ํ˜•๋ณ€ํ™˜ ์•ˆํ•ด์„œ ==๋ณด๋‹ค ๋น ๋ฆ„)

๋…ผ๋ฆฌ

&& || !

String ์—ฐ์‚ฐ +

`์ด๊ฒƒ์€ ${๋ณ€์ˆ˜}์ž…๋‹ˆ๋‹ค.`;
var str = "๋ณ€์ˆ˜๋„" + " ์—ฐ์‚ฐ ๊ฐ€๋Šฅ"; // + ์—ฐ์‚ฐ์ž๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
str[5] // ์—ฐ
//๋ฌธ์ž์—ด ๋‚ด์žฅ ํ•จ์ˆ˜
s.length;
s.indexOf('๋ฌธ์ž์—ด'); // ๋ฌธ์ž์—ด ์‹œ์ž‘ index ์•Œ๋ ค์คŒ.
s.indexOf('a', 4); // 4๋ฒˆ์งธ a index
s.search('g'); // ์•ˆ์— ์ •๊ทœ์‹์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
s.slice(1, 4); s.substring(1, 4); // 0..<3 ๊นŒ์ง€ ๋ฝ‘์•„์ค€๋‹ค. ๋˜‘๊ฐ™์€๋ฐ?
s.slice(2,-2); // 2๋ถ€ํ„ฐ -2(s.length-2) ๊นŒ์ง€ ๋ฝ‘์•„์คŒ.
 s.substring(2,-2); // -2๋ฅผ 0์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์„œ 1, 2 ๋ฝ‘์Œ
s.substr(1, 5) // 1๋ถ€ํ„ฐ 5๊ฐœ
s.replace('asdf', 'ddosang'); // asdf๋ฅผ ddosang์œผ๋กœ ๋ฐ”๊ฟ”์คŒ. ์ •๊ทœํ‘œํ˜„์‹ ๊ฐ€๋Šฅ.
s.replaceAll(',', '');

Math

Math.random();
Math.pow(2, 8); // 2^8
Math.abs(); Math.sqrt();
Math.round(); Math.floor(); Math.ceil();
Math.max(); Math.min(); //์ธ์ž ์—ฌ๋Ÿฌ๊ฐœ.

+. && || ! ์˜ ํ™œ์šฉ

๋ถ€๋™์†Œ์ˆ˜์ 
์†Œ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๋‹ค๋ณด๋‹ˆ ์ƒ๊ธฐ๋Š” ์˜ค์ฐจ.
+ ํฐ ์ •์ˆ˜๋Š” overflow ๋ง‰๊ธฐ ์œ„ํ•ด BigInt ์‚ฌ์šฉํ•ด์•ผ ํ•จ. 999999999999n+3n
ํšŒ์‚ฌ์—์„œ๋Š” ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐํ•˜๋ผ๊ณ  ์ง€์นจ์ด ๋‚ด๋ ค์˜จ๋‹ค.

// ๋“œ๋ชจ๋ฅด๊ฐ„ ๋ฒ•์น™
!(x || y) === (!x && !y)
!(x && y) === (!x || !y)
// 3ํ•ญ์—ฐ์‚ฐ์ž ๋Œ€์ฒด ์šฉ๋ฒ•
true && '์™„๋ฃŒ' || '๋ฏธ์™„๋ฃŒ'; // '' false 'ํ•œ๊ธ€์ž๋ผ๋„ ์žˆ์œผ๋ฉด' true
// ๋ณ€์ˆ˜ ๊ฐ’์ด true์ด๋ฉด ์•ž์ด true๊ฐ€ ๋ผ์„œ ๋’ค์—๋Š” ํ™•์ธ๋„ ์•ˆํ•˜๊ณ  ์™„๋ฃŒ(true)๋ฅผ ์ฐ์Œ
// false์ด๋ฉด ์•ž์ด false๋ผ์„œ ๋ฏธ์™„๋ฃŒ(true) ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ฐ์Œ. 
// ๋น„๊ต์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ •์ง€์œผ๋ฉด ๋’ค๋ฅผ ์•ˆ๋ณด๊ณ  ๋‹จ์ถ• ํ‰๊ฐ€ํ•˜๊ณ  ๊ทธ ๊ฐ’์„ return ํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž„.
// ์‹ค๋ฌด์—์„  ์“ฐ์ง€ ๋ง์ž. ๊ฐ€๋…์„ฑ์ด ๋ณ„๋กœ๋‹ค. ๊ทธ๋ƒฅ 3ํ•ญ ์—ฐ์‚ฐ์ž๋„ ์ž˜ ์•ˆ์”€ ใ… ใ… ...
// if (truthy) ๋ฌธ์„ && ์œผ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ.
if (done) msg = "๋‹คํ–ˆ๋‹ค.";
msg = doen && "๋‹คํ–ˆ๋‹ค.";
// if (falsy) ๋ฌธ์„ || ์œผ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ.
if (!done) msg = "๋ชปํ–ˆ๋‹ค.";
msg = done || "๋ชปํ–ˆ๋‹ค.";
//if -else ๋Š” ์‚ผํ•ญ์กฐ๊ฑด์ž๊ฐ€ ๋Œ€์ฒด๊ฐ€๋Šฅ ์‚ผํ•ญ์กฐ๊ฑด์ž๋Š” ์•„๋ž˜๋กœ ๋Œ€์ฒด๊ฐ€๋Šฅ.
true && '๋‹คํ–ˆ๋‹ค.' || '๋ชปํ–ˆ๋‹ค.';

++. JavaScript์˜ ์–ด๋งˆ๋ฌด์‹œํ•œ ํ˜•๋ณ€ํ™˜

typeof

typeof ''              // -> "string"
typeof NaN === 'number' // true
typeof 1               // -> "number"
typeof NaN             // -> "number"
typeof true            // -> "boolean"
typeof undefined       // -> "undefined"
typeof Symbol()        // -> "symbol"
typeof null            // -> "object", ์‹ฌ๊ฐ
typeof []              // -> "object", ์‹ฌ๊ฐ, array๋ผ๊ณ  ๋‚˜์™€์•ผ์ง€!
typeof {}              // -> "object" ์ด๊ฒŒ ์ง„์งœ object
typeof new Date()      // -> "object"
typeof /test/gi        // -> "object"
typeof function () {}  // -> "function"

์•Œ ์ˆ˜ ์—†๋Š” js์˜ ์„ธ๊ณ„

  • ๋นˆ ๋ฌธ์ž์—ด '', 0, NaN ์€ false
  • [], {}์€ true
  • null == undefinded
  • ๊ทผ๋ฐ ๋˜ null != undefined ์ด๋ฏ€๋กœ, !!null //false ์ฒ˜๋Ÿผ ํ˜•๋ณ€ํ™˜์„ ํ•ด์„œ ์ด์šฉํ•˜์ž.

์•Œ ์ˆ˜ ์—†๋Š” js์˜ ์„ธ๊ณ„ : ๋ฌธ์ž์—ด ์—ฐ์‚ฐํŽธ

1+'1'; '1'+1; //'11'
'11'-1; // 10 -> String์—๋Š” - ์—ฐ์‚ฐ์ด ์—†์œผ๋‹ˆ๊นŒ Number๋กœ ๋ณ€ํ™˜ ํ•ด์ฃผ๋Š”๊ฑฐ ์•„๋‹๊นŒ
'0' == 0; 0 == ''; 0 == '0'; //true

ํ˜•๋ณ€ํ™˜

Boolean(); Number(); parseInt(์ˆซ์ž, ์ง„๋ฒ•); // parseInt๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
Number(false); Number(true); // 0 1
1.toString() //'1'
//์‹ค๋ฌด์—์„œ ๋งŽ์ด ์‚ฌ์šฉ
123 + ''; +'123'; // 123
-'123' //-123
!!NaN; !!undefined //false
false == !!undefined;

NaN

=== // ๋น„๊ต๋Š” 3๊ฐœ์งœ๋ฆฌ๋กœ ์“ฐ์ž.
NaN === NaN; //false
isNaN(NaN); //true : NaN ํŒ๋‹จ์‹œ์—๋Š” isNaN์„ ์‚ฌ์šฉํ•˜์ž.
Object.js(NaN, NaN); //true
Object.js(+0, -0); //false




2. ์ œ์–ด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ

4. ์ œ์–ด๋ฌธ

if-else if-else

//true or false ๋กœ ๊ฐˆ๋ฆฌ๋Š” ๊ณณ์— ์”€
if () {
}
else if() {
}
else {
}

switch
ํ˜„์—…์—์„œ ๋งŽ์ด ์”€...

switch (๋ณ€์ˆ˜) {
  case 0: 
    break;
  case 1:
    break;
  default:
    break;
} // break ๊ฑธ์–ด์•ผํ•œ๋‹ค.. C์™€ ๊ฐ™์Œ.

5. ๋ฐ˜๋ณต๋ฌธ

for, while, do~while

  • forEach, for ... in, for ... of
cars = ['Audi', 'Volvo', 'BMW', 'Ford'];
for(int i = 0; i < cars.length; i++) {}
//forEach
cars.forEach(e => e*3);
//for ... of  === python for ... in
for (let val of cars) {  } // array ์•ˆ์˜ ๊ฐ’ ์ˆœํšŒ
for (let index in cars) {} // array ๋ฅผ index ๊ฐ’์œผ๋กœ ์ˆœํšŒ
while (์กฐ๊ฑด) {}
do {} while(์กฐ๊ฑด);
profile
0๋…„์ฐจ iOS ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€