언어의 저수준에 해당하는 부분을 정의함
문법, 타입, 선언문, 키워드, 예약어, 연산자, 객체
XML을 HTML에서 사용할 수 있도록 확장한 애플리케이션 인터페이스 문서를 표현한 트리 생성, DOM API 통해 노드(HTML) 조작 가능
var buttons = document.getElementsByTags('button');
document.body.removeChild(buttons[0]);
브라우저 창에 접근하고 조작할 수 있게 하는 인터페이스
window, location, navigator, screen, history (쿠키), Ajax 관련 객체 등
HTML5에 표준 명세 제정됨
var myVariable = 1000; // 숫자 타입 값 할당
myVariable = 'training'; // 문자열 타입 값 할당
//(???) 에러 안남!
변수의 데이터 타입을 확인하는 용도
문자열로 데이터 타입 반환
undefined vs null
Undefined는 정의되지 않음, Null은 빈 값
var maxVal = Number.MAX_VALUE;
var minVal = Number.MIN_VALUE;
var infinityVal = maxVal * 2;
var negInfinityVal = -infinityVal;
var obj = new Object();
obj.name = 'tigger';
obj['age'] = 10;
typeof obj // "object"
obj // {name: "tigger", age: 10}
obj.name // "tigger"
obj['age'] // 10
var person = {
name: 'tigger',
age: 10,
isDeveloper: true
};
var arr = new Array('foo', 123);
typeof arr // "object"
arr // ["foo", 123]
arr[1]; // 123
arr.length; // 2
arr.push(true); // ["foo", 123, ture]
var arr = [];
var obj = {};
var total = ['foo', 123, arr, obj];
var buttons = document.getElementsByTagName('button');
buttons.pop(); // Uncaught TypeError: buttons.pop is not a function
# [].slice.call() 사용 - 유사배열을 배열로 만듦
var btns = [].slice.call(buttons);
btns.pop(); // 잘 동작 함!
function say(message) {
return message;
}
say('hello'); // 'hello'
typeof say; // 'function'
var pattern1 = new RegExp('training', 'g');
var pattern2 = /training/g; // 리터럴 사용
pattern1.test('js-training'); // true
pattern2.exec('js-training'); // [...]
// 기본 데이터 타입
// 원시타입에 속성을 추가하려고 하면 무시됨
var person = 'tigger';
person.age = 20;
console.log(person.age); // undefined
// 참조 타입
// 참조타입에 속성을 추가하려고 하면 추가됨
var person = {};
person.age = 20;
console.log(person.age); // 20
person.age = 10;
console.log(person.age); // 10
delete person.age;
console.log(person.age); // undefined
1 == 1 // true
'1' == 1 // true : Number('1') == 1
1 == '1' // true
0 == false // true : Boolean(0) == false
0 == null // false : 0 == Number(null)
0 == undefined // false : 0 == Number(undefined)
null == undefined // true
3 === 3 // true
3 === '3' // false
3 !== '3' // true
4 !== 3 // true
Number('10'); // 10
parseInt('10', 10); // 10
parseInt('0xA', 16); // 10
parseInt('1010', 2); // 10
parseFloat('10.5'); // 10.5
Boolean(0); // false
Boolean(''); // false
Boolean(NaN); // false
Boolean('false'); // true
var numVal = 100;
var booleanVal = true;
numVal.toString(); // "100"
booleanVal.toString(); // "true"
!!0; // false
!!''; // false
!!NaN; // false
+'10'; // 10
+true; // 1
+false; // 0
10 + '10'; // '1010'
10 + true; // 11
'10' + true; // '10true'
+'10' + true; // 11
// bad
var baseCount = '9';
var count = 2;
console.log('Total: ' + baseCount + count); // Total: 92
console.log('Total: ' + (+baseCount + count)); // Total: 11
// good
var baseCount = parseInt('9', 10); // string to number
var count = 2; // number
var totalCount = baseCount + count; // number + number
console.log('Total: ' + totalCount); // Total: 11
false && true || true; // true
false && (true || true); // false
function greet(greeting, name) {
greeting = greeting || '안녕하세요!';
name = name || '홍길동';
console.log(greeting, name);
}
greet(); // "안녕하세요! 홍길동"
greet(null, '수강생들'); // "안녕하세요! 수강생들"
greet('hello!'); // "hello! 홍길동"
greet('hello!', 'tigger'); // "hello! tigger"
function add(a, b) {
return a + b;
}
add(2, 3); // 5
var add = function(a, b) {
return a + b;
};
add(2, 3); // 5
var add = function add(a, b) {
return a + b;
};
add(2, 3); // 5
함수
호이스팅의 차이가 있음
// Good
// 전역을 오염시키지 않고 영향을 주지 않음
(function() {
console.log('hello world');
})();
// Bad
function() {
console.log('hello world');
}(); // ERROR!!
함수는 자바스크립트에서 일급 객체이다.
// 1. 변수나 데이터 구조안에 담을 수 있다.
var foo = function() {
console.log('hello javascript');
};
// 2. 매개변수로 전달할 수 있다.
function bar(fn) {
fn();
};
bar(foo);
// 3. 반환 값으로 사용할 수 있다.
function baz() {
return foo;
}
var newBar = baz();
newBar();
ES2015를 지원하지 않는 브라우저에서 어떻게 실행할 수 있을까?
function foo() {
let x = 3;
if (true) {
console.log(x); // ReferenceError: Cannot access 'x' before initialization
let x = 2;
}
}
foo();
// lib.js
export default function sum(x, y) { // Default export
return x + y;
}
export function square(x) { // Named export
return x * x;
}
// main.js
import sum, { square } from 'lib';
// import Default, { ...Named } from 'lib'
sum(1, 2); // 3
square(11); // 121
const identity = function(a) { // ES3+
return a;
}
const identity = a => a; // ES2015+
// ES3+
btn.addEventListener('click', function() {
console.log('click!!');
});
// ES2015+
btn.addEventListener('click', () => console.log('click!!'))
화살표 함수를 기명함수로 쓰고 싶을 때,
const xhr = new XMLHttpRequest();
xhr.addEventListener('load', () => { // 이벤트 콜백 사용
console.log('complete');
});
xhr.open('GET', '/');
xhr.send();
// Promise 사용한 비동기 통신 라이브러리 사용
axios.get('/')
.then(() => { console.log('complete'); })
connection.setRemoteDescription(new RTCSessionDescription(offer), () => {
connection.createAnswer((answer) => {
connection.setLocalDescription(answer, () => {
socket.emit('singnaling', connection.localDescription);
}, logError);
}, logError);
},logError);
connection.setRemoteDescription(new RTCSessionDescription(offer))
.then(() => connection.createAnswer())
.then((answer) => connection.setLocalDescription(answer))
.then(() => socket.emit('signaling', connection.localDescription))
.catch(logError);