내배캠/TIL(Today I Learned)

[TIL]내배캠 6일차 (자바스크립트 문법 모르는 부분 기록)

도오라에몽 2023. 5. 23. 00:04

오늘은 코드 작성을 하며 문제가 된 부분은 없었다. 따라서 내가 몰랐던 자바스크립트 코드를 올려놓겠다.

그렇다. 코드만 딸랑 올려놓겠다.

let num = 2.5e5;    // 2.5 * 10^5

// 문자열 자름
string.substr(start index, length of string)
string.slice(start index, end index)

// 문자열 검색
string.search(string)   // returns start index of string

// 문자열 대체
string.replace(string1, string2);

// 문자열 분할
let str = "apple, banana, kiwi";
let result = str.split(",");

// 이게 된다고?
console.log(1 - '2');
console.log('2' * '3');

// 명시적 형 변환
Boolean(0);
Boolean('');
Boolean(null);
Boolean(undefined);
Boolean(NaN);
// 위에 내용들 다 false(falshy함)
Boolean("false");   // true
Boolean({});        // true

// 문자열
String(123);
String(true);
String(false);
String(null);
String(undefined);
// console.log로 결과도 확인해보기

// 1 + '1'은 11 나오는데 왜 1 - '2'는 -1이 나오는데?
// '2' * 3은 6 나오네
// 나누기랑 곱셈이랑 비슷한듯

// 혹시 몰라 삼항 연산자 남김
condition ? true_state : false_state;

// 함수 선언

function name(param) {
    return;
}

let variable_name = function (param) {
    return;
}

// 화살표 함수(ES6)
let add = (a, b) => {
    return a + b;
};

let add = (a, b) => a + b;

// 이게 된다고?
if (condition) {
    console.log();
}
// 위의 동작과 일치함
condition && console.log(); // and조건(&&) 단축평가

// or조건(||)
// 삼항 연산자와 단축평가
let y;
let z = y || 20;
console.log(z);

// 객체(key-value)
let person = {
    name: "name",
    age: 20,
    gender: "gender",
    do: function () {}
}
// value 값으로 함수도 올 수 있음

// 생성자 함수를 이용한 객체 생성 방법
function Person(name, age, gender) {
    this.name = name;
    this.age = age;
    this.gender = gender;
}

let perosn = new Person("홍길동", 30, "남자");

// 객체 메소드
Object.keys(object);
Object.values(object);
Object.entries(object); // returns [[key, value], [key, value], ...]

let newPerson = {};
Object.assign(newPerson, object);   // Object.assign(target, source)
Object.assign(newPerson, object, {property_of_object:30}); // 이런 것도 가능

let person1 = {
    name: "a",
    age: 30,
    gender: "a",
};

let person2 = {
    name: "a",
    age: 30,
    gender: "a",
};

console.log(person1 === person2); // false

// 내용 비교할 때
console.log(JSON.stringify(person1) === JSON.stringify(person2));

// 객체 병합
let person1 = {
    name: "a",
    age: 30,
};

let person2 = {
    gender: 'a',
};

// ... 명령어 : spread operator (ES6)
let perfectMan = {...person1, ...person2};

// 배열 크기 지정 생성
let number = new Array(size);

// push, pop
Array.prototype.push(item);
Array.prototype.pop();

let temp = ['a', 'b', 'c'];
console.log(temp); // ['a', 'b', 'c']
temp.shift();
console.log(temp); // ['b', 'c']
temp.unshift('d');
console.log(temp); // ['d', 'b', 'c']

let temp = [1, 2, 3, 4, 5, 6, 7];
// Array.splice(begin index, number of to remove, number to push to array)
temp.splice(1, 3, 10); // temp 결과 : [1, 10, 5, 6, 7]

let temp = [1, 2, 3, 4, 5];
temp.slice(1, 3); // [2, 3]  Array.slice(begin, end)

// forEach
let numbers = [1, 2, 3, 4, 5];

numbers.forEach((item) => {
    console.log(item);
}); // 1, 2, 3, 4, 5 출력

// map : map은 기존 배열을 가공하여 새로운 배열을 생성함. 원본만큼의 배열 길이가 반환됨
let temp = numbers.map((item) => {
    return item * 2;    // return이 없을 경우 undefined로 채워짐
}) // temp : [2, 4, 6, 8, 10]


let nubmers = [1, 3, 5, 3, 1, 1];
let filteredNumbers = numbers.filter((item) => {
    return item === 1;
}); // filteredNumbers : [1, 1, 1];

let result = numbers.find((item) => {
    return item > 2;
}) // 결과 : 3     다른 큰 숫자들도 있지만 가장 처음에 나오는 숫자만 반환하는 모양이다.


let person = {
    name: 'a',
    age: 10,
    gender: 'a'
}

for (let key in person) {
    console.log(key + ': ' + person[key]);
}

// destructuring assignment
let user = {
    name: 'a',
    age: 10
};

let {name: newName, age: newAge } = user;
console.log(newName);
console.log(newAge);

// 단축 속성명 : property shorthand
const obj = {
    name,           // name: name의 경우 왼쪽처럼 하나만 나타내도 됨
    age: newAge
}

마지막 단축 속성명이라 되어있는 것은 진짜 충격이다. 이런걸 왜 만들었는지... 이건 다른 프로그래밍 언어를 쓰다가 보면 충분히 모를 수 있는 부분이기 때문에 주의 해야겠다.