: 웹 사이트의 주요 기능들, 주요 애니메이션 효과를 구현할 때 사용되는 high level 언어.
이전에는 웹사이트 영역에 대해서만 활용이 가능했지만 현재는 하이브리드 앱을 제작할 수 있을 정도로 발전
하이브리드 앱 : HTML, CSS, JavaScript 세 가지 언어를 기반으로 안드로이드 앱(Java, Kotlin) 또는 아이폰 앱(Swift, Objective-C)을 제작
Node.js : JavaScript 언어로 구성되어 있는 서버개발을 도와주는 도구(tool)
IoT(사물인터넷) 개발에도 사용 가능
1) 자바스크립트 코어
: 자바스크립트의 문법적인 특징을 공부하는 영역
2) 클라이언트 측 자바스크립트
: 브라우저를 제어할 때 사용되는 자바스크립트
(스크롤의 위치, 마우스의 위치, 브라우저의 크기등을 가져오고 싶을 때, 자바스크립트를 이용해 HTML, CSS에 접근해 변화를 주고 싶을 때)
3) 서버 측 자바스크립트
: Node.js 영역, 서버 개발에 용이
1) HTML 문서에 <script>
를 이용해 코드(javascrip 언어)를 직접 입력
<script>
console.log("Hello");
//()안쪽에 입력된 정보를 console 탭에 출력하는 명령어
</script>
-> 하나의 html 문서 안에 html 언어와 javascript 언어가 혼재된 상태 (코드분량이 길어져 가독성이 떨어짐)
2) <Script src=""><script>
를 이용해 javascript 파일 경로를 입력
<script src="js/main.js"></script>
👉 위의 두 가지 방법중 하나만 사용해야 함
(파일 경로를 입력한 <script>
에 직접 입력하는 방식으로 작성하면 작동 x)
👉 JavaScript 코드도 html, css와 마찬가지로 위에서부터 아래로 순차적으로 실행된다.
1) css와 동일 (전체 주석 처리) - 전체 주석 안에 전체 주석을 넣을 수 없음.
<script>
/*
console.log("Welcome");
console.log("Hello");
*/
</script>
2) // 한 줄 주석 처리 - 전체 주석 안에 한 줄 주석을 넣을 수 있음.
<script>
/*
// console.log("Welcome");
// console.log("Hello");
*/
// console.log("AAA");
</script>
// comic 박스 생성
// 변수 선언
var comic;
// comic 박스 안에 원피스 데이터를 할당한 상태
// 변수 초기화
comic = "원피스";
//변수 선언과 동시에 초기화 진행
var apple = "사과";
//변수 동시 선언
var a, b, c;
var a,
b,
c;
//변수 동시 초기화
var d = 10, e = 20, f = 30;
var d = 10,
e = 20,
f = 20;
👉 모든 변수는 선언과 동시에 undefined
가 자동으로 할당된다.
var house;
house = "집";
console.log(house);
house = "아파트";
console.log(house);
var house;
console.log(house);
//undefined -> 집
house = "집"
console.log(house);
: 일반적으로 변수명 작성시, 최소한 두 개의 명사를 이어서 작성
-> 구체적으로 명시를 해줘야 이해가 명확해진다.
var mathScoreStudent = 10; // camelCase
var math_score_student = 10; //snake_case
var math-score-student = 100; //kebab case
: 8개의 타입과 2가지 진영
1. 원시 타입(Primitive Type)
문자열(String), 숫자(Number), 논리(Boolean, 참/거짓), undefined, null
2. 참조 타입(Reference Type)
배열(Array), 함수(Function), 객체(Object)
: 두 가지 형식으로 작성 가능 (혼용x)
var msg1 = "Hellow World";
var msg2 = 'Welcome';
var msg4 = "She's girl";
var msg5 = 'She\'s girl';
=> 검은색 텍스트로 출력됨
정수, 실수, 연산작업 모두 가능
var num1 = 10;
var num2 = -3.14;
console.log(num1 + num2);
console.log(num1 + num3);
=> 파란색 텍스트로 출력됨
var a = 20;
var b = 10;
console.log(a + b);
console.log(a - b);
console.log(a * b);
console.log(a / b);
console.log(a % b); // 나머지
: 덧셈을 제외하고는 사칙연산 일부 작업이 가능
var str1 = "20";
var str2 = "10";
console.log(str1 + str2);
// 글자를 이어붙인다
console.log(str1 - str2);
console.log(str1 * str2);
console.log(str1 / str2);
console.log(str1 % str2);
-> 이러한 특성을 이용해 아래와 같은 작업이 가능 (공백을 문자로 인식, html과 차이점)
var firstName = "Jane"
var lastName = "Jeong"
console.log(firstName + " " + lastName)
: +1 / -1 씩 증가 / 감소 시킬 때 사용
var num10 = 10;
// num10 = num10 - 1;
// console.log(num10);
console.log(--num10); // 9
console.log(--num10); // 8
console.log(++num10); // 11
console.log(++num10); // 12
-> 등호 데이터는 뒤에서 부터 해석하는 것이 좋음 (10이라는 데이터가 들어있는num10에서 -1을 한 데이터(9)를 다시 자기자신에 업데이트 한 것)
👉 연산자를 앞/뒤, 어디에 붙이느냐에 따라 그 결과값은 달라짐
var num10 = 10;
console.log(num10--);
console.log(num10);
// -> 우선 num10의 값을 출력하고, -1을 차감하는 것 (후차감)
console.log(--num10);
console.log(num10);
// -> -1을 차감한 상태로 값을 업데이트를 해서 나타내는 것 (선차감)
: 자기자신에 대해 새로운 값을 업데이트(재할당) 할 때 사용
var num20 = 20;
// num20 = num20 + 10;
num20 += 10;
console.log(num20);
: >, <, ==, ===, !=, !==, <=, >=
결과값으로 항상 논리값(Boolean)이 나온다.
==
: 값만 동일하면 true
===
: 값과 데이터타입 모두 동일해야 true
var num10 = 10;
var num20 = 20;
var str10 = "10";
var str20 = "20";
console.log(num10 == str10);
console.log(num10 === str10);
&&
: 모든 조건이 참이어야 true 반환||
: 하나라도 참이면 true 반환: 결과값이 true/false 로 나타나는 상황 자체, 일반적으로 논리 연산자와 결합해 사용
console.log(true);
console.log(false);
console.log(1 === 2);
console.log(10 < 20);
console.log(10 === 10 || 20 === 30)
ex) 사이트에 로그인 하는 경우 아이디와 비밀번호 입력시, 하나라도 틀리면 로그인이 되지 않게 함
: 양쪽 모두 값이 없는 상태
null
: 등호 사용, 변수 초기화로 명시적으로 빈 값을 변수 안에 할당한 상태undefined
: 변수를 선언만 한 상태<null과 undefined 차이점>
typeof a
: a 의 데이터 타입을 반환 console.log(typeof 10);
console.log(typeof "Hello World");
typeof null
-> object
: null 이 태생적으로 갖고 있는 버그때문
typeof undefined
-> undefined
null == undefined
-> true
: 값이 없음
null === undefined
-> false
: 데이터타입 다름
<null과 undefined의 사칙연산>
: 반대값으로 반환
!true
-> false
/ !false
-> ture
!null
-> true
!!null
-> false
: 이미 ture
로 반환된 값을 다시 !ture
한 것으로 취급되어 false
가 됨, undefined도 동일한 결과를 가짐
// 함수 선언 : 기능을 만든 상태
// 매개변수 : a, b
function 함수명(a, b) {
console.log(a + b);
}
//함수 호출 : 만들어진 기능의 스위치를 켜는 행위 자체
// 인수 : 10, 20
함수명(10, 20);
Parameter
(매개변수) : 함수 작동 시 필요로 하는 값 선언Argument
(인수) : (인자), 함수 호출 시 전달되는 값: 함수를 호출했을 때, 호출된 시점에 return 안에 들어가있는 값을 반환
function sum(num1, num2) {
return num1 + num2;
}
var result = sum(10, 20);
console.log(result);
function area(hor, ver) {
return hor * ver;
}
var volume = area(10, 20) * 100; // 200을 갖고 있는 상태
console.log(volume);
(참고 사이트 : https://brunch.co.kr/@brunch92ny/9)
var alphabet = ["a", "b", "c"];
console.log(alphabet);
-> 각각의 좌표값(index)
0: "a"
1: "b"
2: "c"
console.log(alphabet[2]); // c
console.log(alphabet[1]); // b
-> 특정 데이터에 접근 가능
alphabet[2] = "d";
consle.log(alphabet);
// => ["a", "b", "d"]
length
: 배열안에 들어가있는 데이터의 갯수
자바스크립트의 모든 데이터타입을 배열에 삽입 가능
1) 배열 안의 데이터는 가능한 동일한 데이터 타입을 갖고 있어야 함.
var num = [10, 20, 30, 3.14]; // o
var num = [10, 20, 30, "Hello World"]; // x
2) 배열 안의 데이터는 가능한 동일한 성격을 갖고 있어야 함.
var fruit = ["사과", "배", "바나나", "멜론"]; // o
var fruit = ["사과", "배", "바나나", "양상추"]; // x
var score = [[10, 20, 30], [100, 200, 300]];
console.log(score);
console.log(score[1]);
console.log(score[1][2]);
: 베열과 유사, 여러 개의 데이터를 한 곳에 넣고자 할 때(항목들을 받아내는 영역)
var student = {
name: "Jane",
age: 23,
skills: ["JS", "HTML", "CSS"]
}
console.log(student);
key
: name, age, skillsvalue
: "Jane", 23, ["JS", "HTML", "CSS"]=> property
1) consloe.log(변수명.데이터 key)
console.log(student.name);
// => Jane
2) console.log(변수명['데이터key']);
console.log(student['name']);
// => Jane
console.log(studet.skills[1]);
// -> HTML
객체명.새로운key값 = "value"
직접적으로 추가
var student = {
name: "Jane",
age: 23,
skills: ["JS", "HTML", "CSS"],
test1: true,
test2: null,
test3: undefined,
test4: {color: "red"},
//메서드
sum: function (num1, num2) {
// sum이라는 키값 자체가 함수명을 대체
return num1 + num2
}
};
var result = student.sum(10, 20);
console.log(result); // => 30
student.sum(10, 20);
// student라는 객체 안에 있는 sum이라는 에서드를 이용한 것.
console.log("Hellow World");
// console이라는 객체 안에 있는 log 라는 메서드를 아용한 것.
(참고 사이트 : https://brunch.co.kr/@brunch92ny/10)
원시 타입
: 원본과 복사본의 개념이 존재, 서로 독립적
(원본을 수정하든, 복사본을 수정하든, 서로의 데이터에는 영향을 미치지 x)
참조 타입
-> Obj1이 가리키고 있는 주소를 Obj2도 가리키게 되는 것으로, 주소를 공유하고 있는 것. 따라서 주소 안의 데이터가 변경되면 양쪽 모두의 데이터가 바뀌게 되는 것이다.
<div id="color-bg">
<button id=btn type="button">클릭</button>
</div>
var colors = [
'yellow',
'green',
'pink',
'#dc143c',
'rgba(123, 123, 123, 0.5)'
];
var bg = document.getElementById('color-bg');
var btn = document.getElementById('btn');
btn.addEventListener('click', function() {
// 0 ~ 4
var random = Math.floor(Math.random() * 5)
// console.log(random);
console.log(colors[random]);
bg.style.backgroundColor = colors[random];
})
document
: html문서에 영향력을 미치는 객체 (클라이언트 측 자바스크립트 - html 문서를 제어, 브라우저를 제어)getElementById
: document 객체 안에 있는 메서드addEventListener('이벤트의 종류', function()' {})
btn.addEventListener('click', function() {
console.log("Hello");
})
익명 함수 : 함수 이름이 없는 함수
콜백 함수 : 호출 기호 없이 특정 조건 하에 자동으로 호출이 되는 함수
Math.random()
: 0을 포함해 1미만까지의 숫자를 실수형태로 랜덤하게 표현할 때 사용하는 메서드
Math.floor()
: 소수점 이하는 버림
여러 개의 js 파일을 html에 연동할 때도, 작성된 순서 대로 결과값을 반환한다.
하나의 js파일에서 생성한 변수를 다른 js파일에서 호출할 수 있다.
하나의 js파일에서 생성한 함수를 다른 js파일에서 호출할 수 있다. 단, html파일에 연동시키는 순서는 항상 주의해야 한다. (먼저 존재하는 파일을 연동 시키고, 사용할 파일을 그 후에 연동시켜야 한다)
오늘부터 드디어 자바스크립트를 시작했다! 오늘은 자바스크립트 코어(문법) 영역을 중점적으로 공부했다. Python을 몇 번 다뤄 본적이 있어서 변수명과 데이터 타입에 대해서는 금방 따라갈 수 있었다. 하지만 실습에서 html과 css 그리고 자바스크립트를 연동해 다양한 객체와 메서드를 불러와서 작업할 때는 어질어질했다. 처음 접하는 작업이니 그럴 수 있다고 생각하다가도 얼른 이해해버리고 다음 단계로 넘어가야지하는 의욕이 생긴다. 오랜만에 실습이 아닌 개념 공부를 하니까 또한 재미있었다.😋