1. JS 언어 특징 및 역사
- 기본적으로 컴퓨터는 0과 1만 이해할 수 있는데, 사람과 컴퓨터 간의 소통이 필요해지기 시작
=> 프로그래밍 언어를 통해 소통을 시작함
ⅰ. JavaScript 의 역사
- 1995 탄생
- 넷스케이프 커뮤니케이션(LiveScript -> JavaScript)
- 자바스크립트는 브라우저 동작 스크립트 언어임
- 1999년 자바스크립트 표준화(ECMA-262) 완료
- 2005년 AJAX등장
✔ AJAX
- 자바스크립트를 기반으로 함
- 버튼하나를 누르면 전체가 새로고침이 실행되다가 AJAX로 인해 버튼하나만 누르면 해당 부분만 새로고침이 실행
=> 많은 개발자가 사용하게 됨
- 비동기 웹 애플리케이션 개발 가능
- 폭발적인 UX 향상
✔ UX(User Experience) - 사용자 경험
- 2008년 V8 엔진 출시(google) -> 구글 크롬에 탑재돼서 등장함
- super fast(코드 실행 속도 상당 부분 개선됨)
- 컴파일러, 메모관리 시스템
- 2009년 Node.js 등장, 서버 개발 활성화
✔ Node.js로 인하여 브라우저 내부에서만 작동하던 자바스크립트가 브라우저 밖에서도 사용이 가능해짐
- 자바스크립트 하나의 언어로 FrontEnd + BackEnd + DB(MongoDB) = FullStack 전체를 사용할 수 있게 됨
- 2015 ECMScript 6(ES6) 버전 출시
- 2016년 프론트엔드 프레임워크(React, Vue, Angular) 대중화, SPA 개발 활성화
현재 자바스크립트는 프론트엔드 및 백엔드 개발 분야에서 널리 사용되며, Node.js를 이용한 서버 개발도 활발하게 이루어지고 있음
ⅱ. JS 언어의 특징
- 객체 지향 프로그래밍지원
- 객체 지향 vs 절차지향
✔ 절차 지향은 순서대로 프로그램을 만드는 것
✔ 객체 지향은 역할을 가지고 있는 객체라는 그룹으로 묶어서 그룹 단위로 프로그래밍을 실행하는 것
- 객체 지향 vs 절차지향
- 동적 타이핑 언어
- 자바스크립트가 아닌 다른 언어에서는 변수를 지정할 때 타입으로 지정하는데 자바스크립트는 데이터 타입이 런타임에서 결정됨
✔ 런타임이란 프로그램이 실행되는 타임
- 자바스크립트가 아닌 다른 언어에서는 변수를 지정할 때 타입으로 지정하는데 자바스크립트는 데이터 타입이 런타임에서 결정됨
- 함수형 프로그래밍 지원
- 비동기 처리
- 클라이언트 측 및 서버 측 모두에서 사용 가능
2. 기본 문법
ⅰ. 변수와 상수
- 변수란?
✔ 기억하고 싶은 값을 메모리에 저장한 후 저장된 값을 읽어 들여서 재사용함 - 변수의 5가지 주요 개념
✔ 변수이름
- 변수이름 : 저장된 값의 고유 이름
- 보통 영어로 작성
- 키워드 바로 뒤에 작성
✔ 변수 값
- 변수에 저장된 값
✔ 변수 할당
- 변수에 값을 저장하는 행위
- 변수 선언 : 변수를 사용하기 위해 컴퓨터에 알리는 행위
=> 키워드를 이용해서 변수를 만들어달라고 컴퓨터에 알림
✔ 변수 참조
- 변수에 할당된 값을 읽어오는 것 - 변수를 선언할 수 있는 3가지 키워드
- var, let, const
// 1. var
// -> 재선언이 가능함
// -> 재할당이 가능함
var myVar = "Hello World"
var myVar = "Test 1"
myVar = "GoodBye"
console.log(myVar)
// 2. let
// -> 재선언이 블가능함
// -> 재할당이 가능함
let myLet = "Hello World1"
// let myLet = "Test 2" // 에러발생
myLet = "GoodBye1"
console.log(myLet)
// 3. const
// -> 재선언이 블가능함
// -> 재할당이 블가능함
const myConst = "Hello World3"
// const myConst = "Test 1" // 에러발생
// const myConst = "GoodBye2" // 에러발생
console.log(myConst)
- 변수의 선언과 할당은 따로 사용할 수 있음
=> 특별한 이유가 있지 않으면 따로 할당하지 않음
var myVar1
myVar1 = 3
ⅱ. 데이터 타입
- 자바스크립트는 코드가 실행될 때 데이터 타입이 결정됨
◾ runtime - 코드를 작성할 때가 아니라, 실제 코드가 실행될 때
// java
String a = "abc";
// JavaScript
const s = "abc"
- 숫자
- 숫자데이터에는 정수형, 실수(float), 지수형(Exp), NaN, Infinity(무한대), -Infinity, 객체(Object), 배열(Array)이 존재함
- 큰따옴표나 작은따옴표 안에 숫자를 넣으면 데이터 타입이 string이 되기 때문에 숫자는 그냥 숫자만 작성
- NaN은 자바스크립트에서 숫자가 아님을 나타내는데 보통 수학적으로 정의되지 않는 계산을 수행하거나, 숫자가 아닌 값을 숫자로 변환하려고 할때 발생
// 1-1. 정수
let num1 = 10
console.log(num1)
console.log(typeof num1) // typeof -> 데이터 타입을 확인하는 명령어
// 1-2. 실수(float)
let num2 = 3.14
console.log(num2)
console.log(typeof num2)
// 1-3. 지수형(Exp)
let num3 = 2.5e5 // 2.5 * 10^5
console.log(num3)
console.log(typeof num3)
// 1-4.
// Nan : Not a Number, JavaScript 에서 숫자가 아님을 나타내는 값
let num4 = "Hello" / 2
console.log(num4) // NaN
// 1-5. Infinity(무한대)
let num5 = 1 / 0
console.log(num5) // Infinity
console.log(typeof num5) // number
// 1-6. -Infinity(무한대)
let num6 = -1 / 0
console.log(num6) // -Infinity
console.log(typeof num6) // number
- 문자열(String)
- 문자열은 문자의 나열
- 작은따옴표나 큰따옴표로 감싸서 표현
- 문자열의 길이 확인
✔ 변수명.length - 문자열 결합하기(concatenation)
✔ 변수명.concat(변수명) - 문자열 자르기
✔ 변수명.substr(어디서부터 자를지(숫자), 몇 개까지 자를지(숫자))
✔ 변수명.slice(시작할 숫자, 끝낼 숫자) - 문자열 검색
✔ 변수명.search("검색할 문자열")
- 검색한 문자열이 몇 번째부터 시작되는지를 찾아줌 - 문자열 대체
✔ 변수명.replace("원래단어", "바꿀단어") - 문자열 분할
✔ 변수명.split("무엇을 기준으로 자를지")
// 문자열 기본
let str = "Hello World!"
console.log(str)
console.log(typeof str)
// 문자열 길이 확인하기
console.log(str.length) // 12
// 문자열 결합하기(concatenation)
let str1 = "Hello,"
let str2 = "world!"
let result = str1.concat(str2)
console.log(result) // Hello,world!
// 2-3. 문자열 자르기
let str3 = "Hello, World!"
console.log(str3.substr(7, 5)) // World
console.log(str3.slice(7, 12)) // World
// 2-4. 문자열 검색
let str4 = "Hello, World1"
console.log(str4.search("World")) // 7
// 2-5. 문자열 대체
let str5 = "Hello, World!"
let result01 = str5.replace("World", "JavaScript")
console.log(result01) // Hello, JavaScript!
// 2-6. 문자열 분할
let str6 = "apple, banana, kiwi"
let result02 = str6.split(",")
console.log(result02) // [ 'apple', ' banana', ' kiwi' ]
- 불린언(Boolean)
- 참(true)이나 거짓(false)인지에 따라서 논리적으로 판단해서 여러 가지 선택을 하기 때문에 프로그래밍 언어에서 중요함
let bool1 = true
let bool2 = false
console.log(bool1)
console.log(typeof bool1)
console.log(bool2)
console.log(typeof bool2)
- undefined
- un : not | define : 정의하다
- 값이 할당되지 않은 변수를 의미함
let x
console.log(x)
- null
- 값이 존재하지 않음을 명시적으로 나타내는 방법
- undefined와 같지 않음
let y = null
console.log(y)
- Object(객체)
- key와 value를 가지는 값
let person = {
name: 'choi',
age: 20,
isMarried: true
}
console.log(typeof person)
- array(배열)
- 여러 개의 데이터를 순서대로 저장하는 데이터 타입
let number = [1, 2, 3, 4, 5]
let fruits = ['apple', 'banana', 'orange']
ⅲ. 형변환
- 자바스크립트의 데이터 타입을 다른 타입으로 바꿈
- 형변환에는 명세적 형 변환과 암시적 형변환이 있음
- 암시적 형 변환
- 의도하지는 않았지만 암시적으로 바꿈
- 문자열
✔ 문자열과 다른 데이터 타입이 더하기 연산자로 만나면 문자열이 우선시 됨 - 숫자
✔ 더하기 연산자가 아닌 다른 연산자를 빼거나 곱하기 나누기 등의 연산자를 만나면 숫자가 우선시됨
✔ 문자랑 문자가 더하기가 아닌 다른 연산자로 만나도 숫자가 됨
let result1 = 1 + "2"
console.log(result1) // 12
console.log(typeof result1) // string
let result2 = "1" + true
console.log(result2) // 1true
console.log(typeof result2) // string
let result3 = 1 - "2"
console.log(result3) // -1
console.log(typeof result3) // number
let result4 = "2" * "3"
console.log(result4) // 6
console.log(typeof result4) // number
- 명시적 형 변환
- 개발자가 의도적으로 데이터 타입을 바꿈
- 어떠한 타입으로 형 변환한다는 것을 명시적으로 적어야 함
// Boolean
console.log(Boolean(0)) // false
console.log(Boolean("")) // false
console.log(Boolean(null)) // false
console.log(Boolean(undefined)) // false
console.log(Boolean(NaN)) // false
console.log(Boolean("false")) // true, 빈 문자열이 아닌 값이 있는 문자열은 무조건 true가 나옴
console.log(Boolean({})) // true, 객체는 값이 비어있어도 true
// 문자열
let result5 = String(123)
console.log(typeof result5) // string
console.log(result5) // 123
let result6 = String(true)
console.log(typeof result6) // string
console.log(result6) // true
let result7 = String(false)
console.log(typeof result7) // string
console.log(result7) // false
let result8 = String(null)
console.log(typeof result8) // string
console.log(result8) // null
let result9 = String(undefined)
console.log(typeof result9) // string
console.log(result9) // undefined
// 숫자
let result10 = Number("123")
console.log(result10) // 123
console.log(typeof result10) // number
ⅳ. 연산자
- 자바스크립트에서는 변수와 상수를 이용해서 많은 연산들을 처리하는데 이때 필요한 게 연산자
- 기본 연산자
// 더하기 연산자
console.log(1 + 1) // 2
console.log(1 + "1") // 11
// 빼기 연산자
console.log(1 - "2") // -1
console.log(1 - 2) // -1
// 곱하기 연산자(*)
console.log(2 * 3) // 6
console.log("2" * 3) // 6
// 나머지 연산자(/)
console.log(4 / 2) // 2
console.log("4" / 2) // 2
// 나누기 연산자(/) vs 나머지 연산자(%)
console.log(5 / 2) // 2.5
console.log(5 % 2) // 1
- 할당 연산자
// 등호 연산자(=)
let x = 10
console.log(x)
// 더하기 등호 연산자(+=)
x += 5
console.log(x)
// 빼기 등호 연산자(-=)
x -= 5 // x = x -5
console.log(x)
// Q. x를 10으로 만들어라
x -= 20 // x = x - 20
console.log(x)
// 곱하기 등호 연산자(*=)
let a = 10
a *= 2
console.log(a) // 20
- 비교 연산자
- ture 또는 false를 반환하는 연산자
- 좌, 우 혹은 어떠한 값을 비교해서 true나 false 값을 내는 연산자
- 일치 연산자(===)
✔ 타입까지 일치해야 true를 반환하는 연산자 - 불일치 연산자(!==)
✔ 타입까지 일치해야 false를 반환하는 연산자 - 등호로 비교하는 연산자
✔ 등호에 따라서 값을 비교한 후 true 또는 false를 반환
// 일치 연산자
console.log(2 === 2) // true
console.log("2" === 2) // false
console.log(2 === "2") // false
// 불일치 연산자
console.log(2 !== 2) // false -> 숫자 2가 숫자 2와 다르니? 아니
console.log("2" !== 2) // true
console.log(2 !== "2") // true
// 작다 연산자(<), 작거나 같다 연산자(<=)
console.log(2 < 3) // true
console.log(2 <= 3) // true
console.log(3 <= 3) // true
console.log(3 <= 3) // false
- 논리 연산자
✔ true와 false를 비교하는 연산자- 논리곱 연산자(&&)
✔ 두 값이 모두 true일 때만 true를 반환 - 논리합 연산자(||)
✔ 두 값 중 하나라도 true인 경우 true를 반환 - 논리부정 연산자(!)
✔ 값을 반대로 바꿈
- 논리곱 연산자(&&)
// 논리곱 연산자
console.log(true && true) // true
console.log(true && false) // flase
console.log(false && true) // false
console.log(false && false) // false
// 논리합 연산자
console.log(true || true) // true
console.log(true || false) // true
console.log(false || true) // true
console.log(false || false) // false
// 논리부정 연사자
console.log(!true) // false
let a = true
console.log(!a) // false
- 삼항연산자
- 조건에 따라 값을 선택
- 조건 ? true일 때 반환할 값 : false일 때 반환할 값
let x = 10
let result = (x > 5) ? "크다" : "작다"
console.log(result) // 크다
// Q. 삼항연산자를 이용해서 y가
// 10보다 작은 경우를 작다로 console.log로 출력
// 10보다 크다면 크다를 출력
let y = 20
let aResult = y < 10 ? "작다" : "크다"
console.log(aResult) // 크다
- 타입연산자(tyoeof)
console.log(typeof "5") // string
ⅴ. 함수(function)
- 자바스크립트에서는 함수를 정의하여 코드의 재사용성을 높일 수 있음
- input과 output을 가지고 있는 어떤 기능의 단위로 묶음
✔ input -> 매개변수(매개체가 되는 변수)
✔ output -> return문 뒤에 오는 값(반환값) - 함수 선언문
- function 함수명 (매개변수) {
// 함수 내부에서 실행할 코드
}
- function 함수명 (매개변수) {
// 두 개의 숫자를 입력 받아 덧셈을 한 후 내보내는 함수
function add (x, y) {
return x + y
}
// 함수의 호출(사용)
// 함수명(입력값)
console.log(add(2, 3))
let funtionResult = add(3, 4)
onsole.log(funtionResult)
- 함수 표현식
- let 변수명 = funtion (매개변수) {
// 함수 내부에서 실행할 코드
}
- let 변수명 = funtion (매개변수) {
let add2 = function (x, y) {
return x + y
}
// add2를 가지고 10과 20을 더한 값을 출력해보기
let funtionResult2 = add2(10, 20)
console.log(funtionResult2)
- 함수 스코프
- 스코프란 변수의 영향 범위
- 전역 스코프(global scope)
✔ 선언된 변수는 어디에서든지 참조할 수 있음 - 지역 스코프(local scope)
✔ 선언된 변수는 해당 함수 내에서만 참조할 수 있음 - 블록 스코프(block scope)
✔ if문 내에서 선언된 변수는 해당 블록 내에서만 참조할 수 있음
// 전역 스코프
let x = 10;
function printX() {
console.log(x);
}
printX(); // 10
// 지역 스코프
function printX() {
let x = 10;
console.log(x);
}
printX();
// 블록스코프
if (true) {
let x = 10;
console.log(x);
}
console.log(x); // ReferenceError: x is not defined
- 화살표 함수
- ES6부터 추가된 문법
- 기본적인 화살표 함수
let 변수명 = (매개변수) => {
실행할 코드
} - 한 줄로
let 변수명 = (매개변수) => 실행할 코드
✔ return문을 뺄 수 있는 조건은 중괄호 안에 있는 코드가 한 줄이면 가능하고 중괄호를 같이 생략해 줌
let arrowFun01 = (x, y) => {
return x + y
}
let arrowFun02 = (x, y) => x + y
function testFun(x) {
return x
}
let arrowFun03 = x => x
'공부 > JavaScript' 카테고리의 다른 글
JavaScript 문법 종합 1주차(숙제) (0) | 2023.05.24 |
---|---|
JavaScript 문법 종합 1주차(2) (0) | 2023.05.24 |
JavaScript 기초4 (0) | 2023.05.03 |
JavaScript기초 3 (1) | 2023.05.02 |
JavaScript기초 2 (0) | 2023.04.28 |