차세대 UI 프로젝트에서 vue.js를 쓰게 되었다.
이제는 모른척 할 수 없게 되었다. Modern js를...
+ 하지만 아직 몇몇 브라우저에서는 es6를 지원하지 않는다.
ES6문법을 지원하지않는 브라우저에서도 ES6를 사용하고 싶다면 바벨을 사용하자.
+ Try-out메뉴를 클릭후 FORCE ALL TRANSFORMS 설정을 체크하면 ES6문법을 ES5문법으로 변환하여 볼수있다..
공부하기에 좋음...!
1) 객체 초기자
developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Object_initializer
객체 초기화시에,
key와 변수의 이름이 같다면 생략이 가능하다.
const object1 = { a: 'foo', b: 42, c: {} };
console.log(object1.a);
// expected output: "foo"
const a = 'foo';
const b = 42;
const c = {};
const object2 = { a: a, b: b, c: c };
console.log(object2.b);
// expected output: 42
const object3 = { a, b, c }; //{ a: a, b: b, c: c }; 와 같다!
console.log(object3.a);
// expected output: "foo"
2) 구조 분해 할당
developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식입니다
//1) 변수를 한꺼번에 값 할당하기
var a, b, rest;
[a, b] = [10, 20]; // var a = 10; var b = 20과 같다.
console.log(a); //10
console.log(b); //20
//2) 남은것 전부 배열에 담기
/*
a = 10;
b = 20;
rest = [30, 40, 50]; 와 같다.
*/
[a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(a); // 10
console.log(b); // 20
console.log(rest); // [30, 40, 50]
//3) 객체에서 값 꺼내오기..?:/
/*
var _a$b = { a: 10, b: 20 };
a = _a$b.a;
b = _a$b.b;
*/
({ a, b } = { a: 10, b: 20 });
console.log(a); // 10
console.log(b); // 20
const users = ['sohee', 'sohyun'];
//예전에는 index로 꺼내야 했지만! first = users[0]....
//이제는 한꺼번에 선언이 가능합니다 :)
const [first, second] = users; //요녀석은
//아래와 완전히 같아요!
var first = users[0],
second = users[1];
3) 전개구문
전개 구문을 사용하면 배열이나 문자열과 같이 반복 가능한 문자를 0개 이상의 인수 (함수로 호출할 경우) 또는 요소 (배열 리터럴의 경우)로 확장하여, 0개 이상의 키-값의 쌍으로 객체로 확장시킬 수 있습니다.
!! spread 연산자로 배열을 복사할경우 얕은복사를 한다!!
--> 배열의 원본이 변경되면 복사한 배열도 변경된다!
!! 하지만 객체는 깊은복사를 한다.. 의아한 부분이다 :/
이렇게되면 결국 배열을 복사 하는게 아니지않나? 결국 배열을 복사하는법은 새로운 배열을 만들어서 하나하나 넣는수밖에 없는것인가?
const obj1 = {key : 'key1'};
const obj2 = {key : 'key2'};
const array = [obj1, obj2];
// 주의! spread연산자로 배열을 복사하면 얕은복사를 한다!
// array안의 object들을 변경하면, 복사된 배열에서도 동일하게 변경된다.
const arrayCopy = [...array];
// object는 깊은 복사를 한다. obj1이 바뀌어도 obj3에는 영향이 가지 않는다.
const obj3 = {...obj1};
// 배열도 합체가능
const arrayCopy2 = ['1','2','3'];
const arrayCopy3 = ['4','5','6'];
const arrayCopy4 = [...arrayCopy2, ...arrayCopy3]
//object도 합체 가능하지만
//키값이 같을경우엔 덮어써지게 됩니당..
// 번외!
// babel에서 나온 멋있는코드
function _toConsumableArray(arr) {
return (
_arrayWithoutHoles(arr) ||
_iterableToArray(arr) ||
_unsupportedIterableToArray(arr) ||
_nonIterableSpread()
);
}
function _nonIterableSpread() {
throw new TypeError(
"Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."
);
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))
return _arrayLikeToArray(o, minLen);
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter))
return Array.from(iter);
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) {
arr2[i] = arr[i];
}
return arr2;
}
var arrayCopy = _toConsumableArray(array);
4) Default Parameters
기본값 함수 매개변수 (default function parameter)를 사용하면 값이 없거나 undefined가 전달될 경우 이름붙은 매개변수를 기본값으로 초기화할 수 있습니다.
function multiply(a, b = 1) {
return a * b;
}
console.log(multiply(5, 2));
// expected output: 10
console.log(multiply(5));
// expected output: 5
'Today I learned' 카테고리의 다른 글
2021 03 12 - 화살표 함수의날. (0) | 2021.03.12 |
---|---|
2021 03 11 - vuex 빨리보기 (0) | 2021.03.11 |
2021 03 02 - (0) | 2021.03.02 |
화면단에서 css Nocash로 가져오기. (0) | 2021.02.25 |
2021 02 25 - 순번과 갱신 (0) | 2021.02.25 |
댓글