1. 암묵적 타입변환 : JS가 알아서 타입을 변환
"1" + 23; // '123' -> 문자가 맨 앞에 나와서 2,3도 문자로 바꿔버린다.
2 + 1 + "2"; // '32' -> 1+2는 계산이되지만 2라는 문자가 있어서 결국 문자 32가 된다.
123 + ""; //문자열 123으로 바꿔준다.
1 + true; // 2 -> boolean값을 true를 1로 바꿔주었다.
1 + false; // 1 -> boolean값을 false를 0로 바꿔주었다.
1 + null; // 1 -> > null을 0로 바꿔주었다.
1 + undefined; // NaN -> undefined는 숫자로 바꿀 수 없다.
2. 명시적 타입변환
// 1. String 생성자 함수. 값을 문자열로 바꿔주는 함수.
String(1); // "1"
String(NaN); // "NaN"
String(Infinity); // "Infinity"
String(true); // "true"
String(false); // "false"
// 2. Object.prototype.toString 메서드
(1).toString(); // "1"
NaN.toString(); // "NaN";
Infinity.toString(); // "Infinity"
true.toString(); // "true"
false.toString(); // "false"
// 3. 문자열 연결 연산자
1 + ""; // "1"
//-----숫자 타입으로 변환
// 1. Number 생성자 함수
Number("0"); // 0
Number("-1"); // -1
Number("10.53"); // 10.53
Number(true); // 1
Number(false); // 0
// 2. parseInt, parseFloat
parseInt("0"); // 0
parseInt("-1"); // -1
parseInt("10.53"); // 10
parseFloat("10.53"); // 10.53
// 3. 산술 연산자
+"0"; // 0
"100" * 1; // 100
// 4. Boolean 생성자 함수
Boolean("x"); // true / 문자값이 있으면 true
Boolean(""); // false / 비어있는 값은 false
Boolean("false"); // true
Boolean(0); // false
Boolean(1); // true
Boolean(NaN); // false
Boolean(Infinity); // true
Boolean(null); // false
Boolean(undefined); // false
Boolean({}); // true
Boolean([]); // true
// 2. !부정 연산자 이용
!!"x"; // true ( !(!'x') === !(false) -> true ) //부정이 두번이니까 true
3. {}의 중의적 표현
{}은 코드블록일수도 있고 객체리터럴일수도 있음.
{}이 단독으로 존재하면 블록스코프로 해석한다.
{}이 값으로 평가되어야할 문맥에서 피연산자로 사용될 경우 {}을 객체리터럴 객체로 해석함.
4. String문자열은 유사객체이다
배열처럼 index값으로 찾을수도 있고 length로 길이도 알수있다.
let str = "박연미";
console.log(str[0], str.length); // 박 3
하지만 배열이 아니기때문에 배열방식으로 수정은 불가능하다!
let str = "박연미";
str[0] = "김";
console.log(str); // 박연미
5. key-value로 이뤄진 객체의 경우 키값이 String으로 선언이 되어있으면 괄호으로는 값을 가져올 수 있지만 점 형태로는 값을 못가져온다.
let jenny = {
firstname: "je",
"lastname": "nny",
};
console.log(jenny["firstname"]);
console.log(jenny.firstname);
console.log(jenny["lastname"]);
console.log(jenny.lastname); //못가져옴
6. Object에 있는 key값은 숫자더라도 자동으로 문자로 형변환된다.
let object = {
0: 1,
1: 2,
2: 3,
};
console.log(object);
7. 똑같은 Key값으로 선언되면 나중에 선언된 값이 Key에 들어간다.
let cat = {
name: "나비",
name: "냐옹이",
};
console.log(cat);
8. 객체안에 함수가 Key, value값으로 들어간 것을 메서드라고 부른다.
let person = {
// 프로퍼티
name: "박연미",
// 메서드
sayHello: function () {
console.log(` 안녕하세요 ${this.name} 입니다 `);
},
};
console.log(person);
이 메서드를 실행하려면?
person.sayHello();
ES6은 sayHello : function() 대신 바로 sayHello()로 선언한다.
//ES6
person = {
// 프로퍼티
name: "박연미",
// 메서드
sayHello() {
console.log(` 안녕하세요 ${this.name} 입니다 `);
},
};
console.log(person);
person.sayHello();
9. 그렇다면 언제 .으로 값을 가져오고 언제 []로 가져오나?
.은 정적으로 값을 가져올때.
[]은 동적으로 값을 가져올때.
아래는 동적으로 값을 가져오는 예이다.
ES5버전
let prefix = "product";
let i = 0;
let proList = {};
for (let i = 0; i < 5; i++) {
proList[prefix + "-" + (i + 1)] = i + 1;
}
console.log(proList);
ES6버전
// ES6
i = 0;
let prefix = "product";
proList = {
[`${prefix}-${++i}`]: i,
[`${prefix}-${++i}`]: i,
[`${prefix}-${++i}`]: i,
};
console.log(proList);
10. key랑 value랑 값이 같을 때 ES6가 어떻게 개선됐는지 봐라.
// ES5
const x = 1,
y = 2;
const obj = {
x: x,
y: y,
};
console.log(obj);
// ES6
const newObj = { x, y };
console.log(newObj);
11. 함수를 통해 key값을 인자로 받아 value를 뽑고싶은 경우 무조건 []를 써야한다.
아래 조건에서는 key에 name을 넣었으니 20이 나와야하는데 말그대로 key가 인식되어서 308이 나와버린다.
따라서 []으로 안에 값을 가져와야 한다.
let cat = {
name: "나비",
age: 20,
key: 308,
};
function getValue(obj, key) {
return obj.key;
}
console.log(getValue(cat, "name"));
수정된것
let cat = {
name: "나비",
age: 20,
key: 308,
};
function getValue(obj, key) {
return obj[key];
}
console.log(getValue(cat, "name"));
결과 : 나비
12. this란? 자신을 포함한 객체에 대한 주소값.
const person = {
name: "박연미",
sayHello() {
console.log("---------hello ------");
console.log(this);
},
};
person.sayHello();
this를 출력한 결과는 person객체 자체가 나온다.
const person = {
name: "박연미",
sayHello() {
console.log("---------hello ------");
console.log(this);
console.log(`this 값은 : ${this}`);
console.log(` 안녕하세요 ${this.name} 입니다 `);
},
};
person.sayHello();
결과는
13. 객체 안에 만들어진 함수의 this는 그 만들어진 함수의 주소값.
this.name은 객체 안에 선언된 name이 나온다. this는 person객체 그자체를 의미한다
const person = {
name: "박연미",
sayHello() {
console.log("---------hello ------");
console.log(this);
console.log(`this 값은 : ${this}`);
console.log(` 안녕하세요 ${this.name} 입니다 `);
},
};
person.sayHello();
14. 위와 같이 this가 객체에서 쓰이면 객체 그자체를 의미하지만 그냥 함수에서 this는 글로벌이다.
function sayHello() {
console.log("---------hi ------");
console.log(`this 값은 : ${this}`);
console.log(` 안녕하세요 ${this.name} 입니다 `);
}
sayHello();
'Javascript' 카테고리의 다른 글
객체안에 함수에서 변수를 접근할 경우 this를 붙여야한다 (0) | 2022.10.01 |
---|---|
오답노트) 구조분해할당과 filter사용방법 (0) | 2022.09.29 |
자바스크립트에서 비동기 처리가 가능하게 해주는 Web API (0) | 2022.09.21 |
원시타입, 객체타입 변수와 깊은복사, 얕은복사 (0) | 2022.09.07 |
스코프의 범위 (0) | 2022.09.02 |