String + Number를 하는 경우 무조건 String으로 강제 형변환
전위(++num) vs 후위(num++) 증감 연산자 할당순서의 차이 ❗❗
num++
변수에 먼저 값을 할당 한 뒤 증가
++num
숫자를 먼저 증가한 뒤 변수에 할당
즉, var형태를 제외하고 나머지(함수 표현식 제외)는 전부 호이스팅 영향을 받지 않음❗❗
const email = 'yealee.kim87@gmail.com';
console.log(email.startsWith('ye')); // true
console.log(email.endsWith('com')); // true
console.log(email.includes('@gmail')); // true
let lastName = 'Yeri Kim';
let upperLastName = lastName.toUpperCase(); // YERI KIM
let lowerLastName = lastName.toLowerCase(); // yeri kim
let info = "JavaScript는 프로래밍 언어이다.";
let firstChar = info.indexOf("프로래밍");
console.log(info, firstChar);
if (firstChar !== -1) { // firstChar !== -1 => 프로래밍 문구가 있다면으로 해석
info = info.slice(0, firstChar) + "프로그래밍" + info.slice(firstChar+4, info.length);
}
// 출력 - JavaScript는 프로그래밍 언어이다
// ❗❗ 날짜의 기준이 되는 날은 1970년 1월 1일 ❗❗
let rightNow = new Date(); // 2019-02-18T00:45:06.562Z (GMT기준 시간)
let year = rightNow.getFullYear();
let month = rightNow.getMonth()+1; // 달은 0부터 시작이라 +1 해야함!!!
let date = rightNow.getDate();
let day = rightNow.getDay();
let currentHour = rightNow.getHours();
let currentMin = rightNow.getMinutes();
let time = rightNow.getTime(); // 시간초로 나타내줌
// 특정 날짜의 Date 확인 예시
let date1 = new Date('December 17, 2019 03:24:00');
let date2 = new Date('2019-12-17T03:24:00');
let date3 = new Date(2019, 5, 1);
Math.random(); // 0.000000 ~ 9.999999 출력
Math.round(); // 반올림
Math.floor(); // 버림
Math.ceil(); // 올림
Math.floor(Math.random()*최대범위)+최소범위; // 랜덤 함수 최소 최대 범위 지정
Math.floor(Math.random()*(max-min+1))+min; // 예시
let plan1 = {
name: "Basic",
price: 3.99,
space: 100,
transfer: 1000,
pages: 10
};
// 문자열 배열에서 문자열 길이만 획득하기
var arr = ['foo', 'hello', 'diamond', 'A'];
var arr2 = arr.map(function (str) {
return str.length;
});
console.log(arr2); // [3, 5, 7, 1]
var items = ['item1', 'item2', 'item3'];
items.forEach(function(item) {
console.log(item);
});
// 출력 결과: item, item2, item3
var obj = {
a: 1,
b: 2,
c: 3
};
for (var prop in obj) {
console.log(prop, obj[prop]); // a 1, b 2, c 3
}
var iterable = [10, 20, 30];
for (var value of iterable) {
console.log(value); // 10, 20, 30
}
var iterable = [3, 5, 7];
iterable.foo = "hello";
for (var key in iterable) {
console.log(key); // 0, 1, 2, "foo", "arrCustom", "objCustom"
}
for (var value of iterable) {
console.log(value); // 3, 5, 7
}
let difficult = {
33: '숫자 형식도 되네',
'my name': '스페이스 포함 가능',
color: 'silver',
키: '한글인 키는 따옴표가 없어도 되는군!!',
'!키': '느낌표 있는 키는 따옴표가 필요하군',
$special: '$는 없어도 되는군'
};
console.log(difficult.['33']); // 동시에 사용 불가
console.log(difficult.my name); // 객체로 바로 접근하는데 띄어쓰기 때문에 괄호로 묶어준다
console.log(difficult.color); // 올바른 sliver 출력
console.log(difficult.키); // 한글은 따옴표 없이 접근 가능
console.log(difficult.!키); // !는 괄호가 필요
console.log(difficult['!키']); // !때문에 괄호로 묶어줘서
console.log(difficult.$special); // $는 괄호 없어도 사용가능
let name = '키';
console.log(difficult[name]); // 1 한글인 키는 따옴표가 없어도 되는군!
console.log(difficult.name); // 2 undefined
❗❗❗ 둘의 가장 큰 차이는 변수로 접근 가능하냐의 차이
//객체 생성 후 프로퍼티 추가1 (정적)
var person = {};
person.name = '홍길동';
person.age = 29;
//객체 생성 후 프로퍼티 추가2 (동적)
person["name"] = '홍길동';
person["age"] = 29;
test_obj = {a:1, b:2};
console.log(test_obj);
test_obj['aa'] = 11;
test_obj.bb = 22;
console.log(test_obj);
delete test_obj.a;
delete test_obj['b'];
console.log(test_obj);
------------------------
Object {a: 1, b: 2}
Object {a: 1, b: 2, aa: 11, bb: 22}
Object {aa: 11, bb: 22}
difficult[name] = '값 바꾼다';
console.log(difficult[name]); // 없는 name을 객체에 키 값으로 넣고 value로 '값 바꾼다'
difficult.color = '색깔'; // color는 현재 있으므로 수정 됨 difficult["color"] 도 같음
console.log(difficult.color);
console.log('생성전: ' + difficult.new); // undefined
difficult.new = '새로 추가된 프로퍼티';
console.log('생성후: ' + difficult.new); // "새로 추가된 프로퍼티"
const satellite = 'The Moon';
const galaxy = 'The Milky Way';
let stars = 'North Star';
const callMyNightSky = () => {
stars = 'Sirius';
return 'Night Sky: ' + satellite + ', ' + stars + ', ' + galaxy;
};
console.log(callMyNightSky());
console.log(stars);