- JavaScript study ๐
- Code Review study ๐ป
- CSS study ๐ญ
-
๋๊ธฐ์ ํธ์ถ : ์์๋๋ก ์คํ
-
๋น๋๊ธฐ์ ํธ์ถ : ์ฝ๋์ฝ์ ๋ ์์๋ฅผ ํท๊ฐ๋ฆด ์ ์์
-
promise๋ then()์ผ๋ก ์ฝ๋ฐฑ์ ์ฐ๊ฒฐํ๋ค. then()์ promise(resolve, reject)๋ฅผ returnํจ.
-
์ฐ๊ฒฐ๋ ๋ค์ then() ์ฝ๋ฐฑํจ์๊ฐ ์คํ๋์๋ค๋ ๊ฒ์ ์์ ๋ฆฌํด๋ ํ๋ก๋ฏธ์ค๊ฐ resolve๊ฐ ๋์๋ค๋ ๋ป!
-
๋น๋๊ธฐ์ ํ๋ก์ธ์ค๋ฅผ ๋๊ธฐ์ ํ๋ก์ธ์ค๋ก ๋ณํ์ํจ๋ค.
-
๋น๋๊ธฐ์ Javascript - ์ฑ๊ธ์ค๋ ๋ ๊ธฐ๋ฐ JS์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
1) calc()
- ๊ฐ๋ณ์์ญ์ calc() ์ ์ฉ
.main {
width: calc(100% - 300px);
}
- ๊ฐ๋ก๋ฐฐ์น
.main, .side {
float: left;
}
- chrome : -webkit-
- firefox : -moz-
- opera : -o-
- IE : -ms-
- ๋ถ๋ชจ ์์ญ
.wrapper {
display: table;
width: 100%
}
- ์์ ์์ญ
.main, .side {
display: table-cell
}
- ๋ถ๋ชจ์์ญ
.wrapper {
display: flex;
}
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด ๊ฐ๋ ์ ์์ฑ ๋ฐฉ๋ฒ์ด๋ ์์ ๋ฐฉ์ ๋ฑ์์ C++์ด๋ ์๋ฐ์ ๊ฐ์ ๊ธฐ์กด ๊ฐ์ฒด์งํฅ ์ธ์ด์์์ ๊ฐ์ฒด ๊ฐ๋ ๊ณผ๋ ์ฝ๊ฐ ๋ค๋ฅด๋ค. ์๋ฐ์์๋ ํด๋์ค๋ฅผ ์ ์ํ๊ณ , ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋ค. ์ด์ ๋นํด ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํด๋์ค๋ผ๋ ๊ฐ๋ ์ด ์๊ณ , ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ด๋ ์์ฑ์ ํจ์ ๋ฑ ๋ณ๋์ ์์ฑ ๋ฐฉ์์ด ์กด์ฌํ๋ค.
// Object()์ฌ์ฉํ์ฌ ๋น ๊ฐ์ฒด ์์ฑ
var foo = new Object();
// foo ๊ฐ์ฒด ํ๋กํผํฐ ์์ฑ
foo.name = 'name'
foo.age = 30
foo.gender = 'male'
console.log(type of foo) // object
console.log(foo) // { name: 'name', age: 30, gender: 'male' }
- ๋ฆฌํฐ๋ด์ด๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํ๊ธฐ๋ฒ
// ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์์ผ๋ก ๋น ๊ฐ์ฒด ์์ฑ
var foo = {
name: 'name',
age: 30,
gender: 'male'
}
// foo ๊ฐ์ฒด ํ๋กํผํฐ ์์ฑ
foo.name = 'name'
foo.age = 30
foo.gender = 'male'
console.log(type of foo) // object
console.log(foo) // { name: 'name', age: 30, gender: 'male' }
- ํจ์๋ ๊ฐ์ฒด๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํจ์๋ฅผ ์ผ๊ธ ๊ฐ์ฒด(First Class) ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
// ํจ์ ์ ์ธ ๋ฐฉ์์ผ๋ก add() ํจ์ ์ ์
function add(x, y) {
return x + y
}
// add() ํจ์ ๊ฐ์ฒด์ result, status ํ๋กํผํฐ ์ถ๊ฐ
add.result = add(3,2)
add.status = 'ok'
console.log(add.result) // 5
console.log(add.status) // 'ok'
- copy : copy.a๋ ์ฝ๊ธฐ ์ ์ฉ ์์ฑ
const obj = { a: 1 };
const copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }
- merge : ์์ฑ์ ํ๋ผ๋ฏธํฐ ์์์์ ๋ ๋ค์ ์์นํ ๋์ผํ ์์ฑ์ ๊ฐ์ง ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํด ๋ฎ์ด์ฐ์
const o1 = { a: 1 };
const o2 = { b: 2 };
const o3 = { c: 3 };
const obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1); // { a: 1, b: 2, c: 3 } ๋์ ๊ฐ์ฒด ์์ฒด๊ฐ ๋ณ๊ฒฝ๋จ.
- ๋ฉ์๋๋ ๊ฐ์ฒด ๊ณ ์ ์์ฑ์ ์ด๋ฆ์ ๋ฐฐ์ด๋ก ๋ฐํ
const object1 = {
a: 'somestring',
b: 42,
c: false
};
console.log(Object.keys(object1));
// expected output: Array ["a", "b", "c"]
- ๋น์ด๊ฑฐํ(non-enumerables)์ ํฌํจํ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ํ๋ค๋ฉด Object.getOwnPropertyNames()๋ฅผ ์ฐธ๊ณ
- enumerable ์์ฑ [key, value] ์์ ๋ฐฐ์ด์ ๋ฐํ
var params = {
id: this.Id,
startDate: this.startDate,
endDate: this.endDate
}
params = Object.entries(params).map((param) => {
return param.join('=')
}).join('&')
console.log(params) // id=testId&startDate=02-01&endDate=02-03
- Converting an Object to a Map
const obj = { first: 'hi', second: 25 };
const map = new Map(Object.entries(obj));
console.log(map); // Map { first: "hi", second: 25 }
- array ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ๋ฐ๋ณต ๊ฐ๋ฅ
const obj = { first: 'hi', second: 25 };
Object.entries(obj).forEach(([key, value]) => console.log(`${key}: ${value}`)); // "first: hi", "second: 25"
๋งค๊ฐ๋ณ์ ๊ฐ์๊ฐ ์ ํํ๊ฒ ์ ํด์ง์ง ์์ ํจ์๋ฅผ ๊ตฌํํ๊ฑฐ๋, ์ ๋ฌ๋ ์ธ์์ ๊ฐ์์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํ๋ ํจ์์ ์ ์ฉ
function sum() {
var result = 0
for (var i = 0; i < arguments.length; i++){
result += arguments[i]
}
return result
}
console.log(sum(1, 2, 3)) // 6
console.log(sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) // 45
- arguments๋ ์ ์ฌ๋ฐฐ์ด์ด๋ฏ๋ก ๋ฐฐ์ด ๋ฉ์๋ ์ฌ์ฉ๋ถ๊ฐ
argFunction(dynamicData)
// arguments๋ ์ ์ฌ๋ฐฐ์ด์ด๋ฏ๋ก ๋ฐฐ์ด ๋ฉ์๋ ์ฌ์ฉ๋ถ๊ฐ -> call() ํ์ฉ
function argFunction() {
[].forEach.call(arguments, function(el) {
console.log(el)
})
}
5. unset - CSS
- html
<p>This text is red</p>
<div id="sidebar">
<p>This text has the default color</p>
</div>
- css
p {
color: red;
}
#sidebar p {
color: unset;
}
7. Webpack
๊ธฐ์กด Web Task Manager (Gulp, Grunt)์ ๊ธฐ๋ฅ + ๋ชจ๋ ์์กด์ฑ ๊ด๋ฆฌ ex) minification์ webpack default cli๋ก ์คํ ๊ฐ๋ฅ
$ webpack -p
-
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ํ์ ํ์์ฑ (ํ์ผ๋ฒ ์ด์ค ๋ชจ๋ํx, ์ ์ญ๋ณ์ ๋ฑ) : AMD, Common js, ES6(Modules)
-
๋ฌธ์ ์ : ์ ์ญ๋ณ์ ์ถฉ๋, ์คํฌ๋ฆฝํธ ๋ก๋ฉ ์์, ๋ณต์ก๋์ ๋ฐ๋ฅธ ๊ด๋ฆฌ์์ ๋ฌธ์
<script src="module1.js"></script>
<script src="module2.js"></script>
<script src="library1.js"></script>
<script src="module3.js"></script>
๊ธฐ๋ณธ ๋ชจ๋ ๋ก๋๋ค๊ณผ์ ์ฐจ์ด์ : ๋ชจ๋ ๊ฐ์ ๊ด๊ณ๋ฅผ Chunk ๋จ์๋ก ๋๋ ํ์ํ ๋ ๋ก๋ฉ ํ๋์ ์น์์ JS ์ญํ ์ด ์ปค์ง์ ๋ฐ๋ผ , Client Side์ ๋ค์ด๊ฐ๋ ์ฝ๋๋์ด ๋ง์์ง๊ณ ๋ณต์กํด์ง ๋ณต์กํ ์น์ ์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ชจ๋ ๋จ์๋ก ๊ด๋ฆฌํ๋ Common js, AMD, ES6 Modules ๋ฑ์ด ๋ฑ์ฅ ๊ฐ๋ ์ฑ์ด๋ ๋ค์ ๋ชจ๋ ๋ฏธ๋ณํ ์ฒ๋ฆฌ๋ฑ์ ์ฝ์ ๋ณด์์ํด Webpack ๋ฑ์ฅ
Everything is Module : ๋ชจ๋ ์น ์์(js, css, html)์ด ๋ชจ๋ ํํ๋ก ๋ก๋ฉ๊ฐ๋ฅ
require('base.css')
require('main.js')
Load only 'what' you need and 'when' you need : ์ด๊ธฐ์ ๋ถํ์ํ ๊ฒ๋ค์ ๋ชจ๋ ๋ก๋ฉํ์ง ์๊ณ , ํ์ํ ๋ ํ์ํ ๊ฒ๋ง ๋ก๋ฉํ์ฌ ์ฌ์ฉ
// webpack.config.js
// `webpack` command will pick up this config setup by default
var path = require('path');
module.exports = {
entry: './app/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
b. minChunks
module.exports = {
//...
entry: {
vendor: ['jquery', 'other-lib'],
app: './entry'
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
// filename: "vendor.js"
// (Give the chunk a different name)
minChunks: Infinity,
// (with more entries, this ensures that no other module
// goes into the vendor chunk)
})
]
};
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ธ์ด๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ์ฒ๋ฆฌ๊ฐ ํ์. ex) setTimeout, callback, promise ...
- function ํค์๋ ์์ async๋ง ๋ถ์ฌ์ฃผ๋ฉด ๋๊ณ
- ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋๋ ๋ถ๋ถ ์์ await๋ง ๋ถ์ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
- await ๋ท๋ถ๋ถ์ด ๋ฐ๋์ promise ๋ฅผ ๋ฐํํด์ผ ํ๋ค๋ ๊ฒ
- async function ์์ฒด๋ promise ๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ
- promise
const makeRequest = () =>
getJSON()
.then(data => {
console.log(data)
return "done"
})
makeRequest()
- async / await
const makeRequest = async () => {
console.log(await getJSON())
return "done"
}
makeRequest()
- async, await
- ์๋ฐ์คํฌ๋ฆฝํธ์ Async/Await ๊ฐ Promises๋ฅผ ์ฌ๋ผ์ง๊ฒ ๋ง๋ค ์ ์๋ 6๊ฐ์ง ์ด์
- cookie parameters (name, value, expires, path, domain, secure)
window.$cookies.set('cookieName', value, '0', '/')
window.$cookies.remove('cookieName')
10. Web Worker
2) ์ฌ์ฉ์๊ฐ ์น ํ์ด์ง๋ฅผ ์ด์ฉํ๋ฉด์๋, ๋์์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ ๋ ๋ณํ ๊ฐ๋ฅ
๋งค์ฐ ๋ณต์กํ ์ํ์ ๊ณ์ฐ ์์ ์๊ฒฉ์ง์ ์๋ ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค ์์ (๋๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ์ก์ธ์ค ํ๋ ๊ฒฝ์ฐ) ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์กฐ์ฉํ ์ค๋์๊ฐ ์์ ์ ํ ํ๋ ๊ฒฝ์ฐ UI ์ฐ๋ ๋์ ๋ฐฉํด ์์ด ์ง์์ ์ผ๋ก ์ํํด์ผ ํ๋ ์์ ๋ฑ
- call Stack์ด ๋น์์ ธ์ผ message Queue ์คํ๋จ
- single thread ์ฐธ๊ณ
- ๋ถ๋ชจ div
.cover-wrapper {
width: 500px;
height: 70px;
position: relative;
overflow: hidden;
}
- ์์ img
cover-img {
position: absolute;
min-width: 1000%;
min-height: 1000%;
left: 50%;
top: 50%;
transform: translate(-50%, -50%) scale(0.1);
}
- IE, Edge not support
1) flat()
arr.flat([depth]);
var arr1 = [1, 2, [3, 4]];
arr1.flat(); // [1, 2, 3, 4]
var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat(); // [1, 2, 3, 4, [5, 6]]
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2); // [1, 2, 3, 4, 5, 6]
// ๋น ์ฌ๋กฏ ์ ๊ฑฐ
var arr4 = [1, 2, , 4, 5];
arr4.flat(); // [1, 2, 4, 5]
2) flatMap()
// array๊ฐ nested array๋ฅผ ํฌํจํ์ง ์์ ๋๊น์ง ์ฌ๊ท์ ์ผ๋ก flat ํ๊ฒ ํ๋ ค๋ฉด
array.flat(Infinity);
// โ [1, 2, 3]
14. babel
Polyfill์ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ ๋ฌธ์ ์์ด ์ฌ์ฉ๋ ์ ์๋๋ก ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์ ๋ค์ดํฐ๋ธ ์ฝ๋์ ์์ํ๋ ์ฝ๋๋ฅผ ๋งํ๋ค.
- babel-polyfill์ core-js, regenerator runtime์ ํฌํจํ๋ ๋ชจ๋
babel์ ๋ฌธ๋ฒ์ ๋ณํํด์ฃผ๋ ์ญํ ๋ง ํ ๋ฟ์ด๋ค. polyfill์ ํ๋ก๊ทธ๋จ์ด ์ฒ์์ ์์๋ ๋ ํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ์ง์ํ์ง ์๋ ํจ์๋ฅผ ๊ฒ์ฌํด์ ๊ฐ object์ prototype์ ๋ถ์ฌ์ฃผ๋ ์ญํ ์ ํ๋ค.
์ฆ, babel์ [์ปดํ์ผ-ํ์]์ ์คํ๋๊ณ babel-polyfill์ [๋ฐ-ํ์]์ ์คํ๋๋ค.
:
{
"presets": [
["env", {
"targets": {
"browsers": ["last 2 versions", "ie >= 9", "> 5% in KR"]
}
}]
]
}
:
.container {
background-attachment: fixed;
background-size: cover;
}
- text underline
.scene header h1:after{
content: '';
border-bottom: 1px solid white;
width: 8rem;
display: block;
margin: 0 auto;
margin-top: 1rem;
}
- basicScroll
- simpleParallax
- jarallax : cross-browsing
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ถ๋ณํ์ ๋ฐ์ดํฐ ๋ฅผ ์ ์ธํ ๋ ํฌ์ธํฐ์ ๊ฐ ๋ชจ๋ ์์ฑํ์ง๋ง, ์ค๋ธ์ ํธ(๋ฐฐ์ด) ์ ์์ฑํ ๋์๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ ์ํด ํฌ์ธํฐ๋ง ์๋ก ํ ๋นํ ๋ฟ์ด๋ค.
const a = 1;
const b = a;
b = 2;
console.log(a, b);
- Object.assign()
- Spread ๋ฌธ๋ฒ ์ฌ์ฉ
const a = { p : 1 };
const b = a;
b.p = 2;
console.log(a.p, b.p);
-
JSON ๊ฐ์ฒด์ ๋ฉ์๋
-
์๋ฐ์คํฌ๋ฆฝํธ ์ฌ๊ท ์ฌ์ฉ