반응형

# 자바스크립트 학습

# 산술연산자

## - 연산자

  • 왼쪽 표현식 평가 결과에서, 오른쪽 표현식 평가 결과를 뺍니다.
  • String 타입이지만, 값이 숫자이면 Number 타입으로 변환하여 계산한다.
log("135" - 2);

=>
135가 String 타입이지만, 값이 숫자이므로
값을 Number 타입으로 변환하여 계산
133

## * 연산자

  • 왼쪽 표현식 평가 결과와, 오른쪽 표현식 평가 결과를 곱한다.
  • 숫자 값으로 변환할 수 있으면 변호나하여 곱한다.
  • NaN 반환 : 양쪽의 평가 결과가 하나라도 숫자가 아닐 때, NaN을 반환한다.
log(10 * "20");
log(10 * true);
log(10 * false);
log(10 * null);
log(10 * "A"); 

=>
200
10
0
0
NaN
  • 소수 값이 생기는 경우 처리
log(2.3 * 3);
log(2.3 * 10 * 3 / 10);

=>
6.8999999999999995	// IEEE 754 유동 소수점 처리 때문
6.9	// 위 대응 방법으로 실수를 정수로 변환하여 값 구하고, 다시 정수를 실수로 변환

## / 연산자

  • 왼쪽 표현식 평가 결과를 오른쪽 표현식 평가 결과로 나눈다.
  • NaN 반환 : 양쪽의 평가 결과가 하나라도 숫자가 아닐 때, 분모와 분자 모두 0일 때 NaN 반환

## % 연산자

  • 왼쪽 표현식 평가 결과를 오른쪽 표현식 평가 결과로 나누어 나머지를 구한다.
  • 3 % 2의 나머지는 1
log(5 % 2.5);
log(5 % 2.3);
log((5 *10 - (2 * 2.3 * 10)) / 10);

=>
0
0.40000000000000036	// IEEE 754 유동 소수점 처리 때문
0.4	// 위 해결위해 실수를 정수로 변환하여 연산 후 다시 정수를 실수로 변환

# 단항 연산자

## 단항 + 연산자

  • 형태 : +value
  • 값을 Number 타입으로 변환한다.
var value = "7";
log(typeof value);
log(typeof +value);
log(typeof Number(value));	// Number() 함수가 가독성이 더 좋다.

=>
string
number
number

## 단항 - 연산자

  • 형태 : -value
  • 값의 부호를 바꾼다. ( +는 -로, -는 +로 바꾼다.)
  • 연산을 할 때만 바뀌며, 원래 값은 바뀌지 않는다.
var value = 7;
log(-value);
log(8 + -value);
log(value);

=>
-7
1	// 8 + (-7)
7

# 후치, 전치, 논리 NOT 연산자

## 후치 ++ 연산자

  • 형태 : value++
  • 값을 자동으로 1 증가 시킨다.
  • 문장을 수행한 후에 1 증가 시킨다. (문장을 수행한 후에 1증가, 즉, 세미콜론(;) 다음에서 증가)
var one = 1;
var value = one++ + 3;	// 1 + 3으로 value = 4, 그 후 one의 값 2로 변경
log(value);
log(one);

=>
4	
2

## 전치 ++ 연산자

  • 형태 : ++value
  • 값을 자동으로 1 증가 시킨다.
  • 문장 안에서 1 증가 시킨다. (표현식을 평가하기 전에 1증가, 표현식에서 증가된 값을 사용한다.)
var one = 1;
var value = ++one + 3;	// one가 2로 값 변경, 2 + 3 = 5
log(value);

=>
5

## 후치 -- 연산자

  • 형태 : value--
  • 값을 자동으로 1 감소 시킨다. (문장을 수행한 후에 1감소, 즉, 세미콜론(;) 다음에 감소
var two = 2;
var value = two-- + 3;	// 2 + 3 = 5 계산 후, two 값 변경
log(value);
log(two);

=>
5
1

## 전치 -- 연산자

  • 형태 : --value
  • 값을 자동으로 1 감소 시킨다. (표현식을 평가힉 전에 1 감소, 표현식에서 감소된 값을 사용한다.)
var two = 2;
var value = --two + 3;	// two 값 변경 후 계산 1 + 3 = 4
log(value);

=>
4

## ! 연산자

  • 논리 NOT 연산자
  • 형태 : !value
  • 표현식 평가 결과를 true, false로 변환한 후, true이면 false로, false이면 true로 변환한다.
  • 원래 값은 바뀌지 않으며, 사용할 때만 변환한다.
var value = true;
log(!value);
log(!!"A");	// "A"는 true, !"A"는 false, !!"A"는 true

=>
false
true

# 유니코드, UTF

## 유니코드 (Unicode)

  • 세계의 모든 문자를 통합하여 코드화 한 것
  • 언어, 이모지 등이 코드화 되어 있다.
  • 코드 값을 코드 포인트 (code point)라고 부른다.
  • 형태 : 0000~FFFF로 되어 있다. 10000 ~ 1FFFF 값에 문자가 매핑된다.
  • 유니코드 컨소시엄에서 관장한다. (http://www.unicode.org/)

## 유니코드 표기방법

  • u와 숫자 형태 : u0031은 숫자 1
  • 자바스크립트는 u엎에 역슬래시(\)를 작성한다.
log("\u0031");	//	1
log("\u0041");	//	A
log("\u1100");	//	ㄱ
log("\uac01");	//	각
  • 역 슬래시 자체를 문자로 표시하기 위해서는 역 슬래시 2개를 작성(\\)
log("\\u0031");	// \u0031
log("\\u0041");	// \u0041
  • ES6에서 표기 방법 추가 (ES5는 4자리만 지원, ES6는 5자리 지원)

## UTF

  • Unicode Transformation Format
  • 유니코드의 코드 포인트를 매핑하는 방법으로 UTF-8, UTF-16. UTF-32로 표기한다.
  • <meta charset="utf-8">
  • UTF-8은 8비트로 코드 포인트를 매핑하겠다는 것으로, 8비트 인코딩(Encoding)이라고 부른다.
반응형
반응형

# 자바스크립트 학습

# 연산자

  • 연산의 사전적 의미 : 규칙에 따라 계산하여 값을 구함

## 연산자의 형태

+ - * / %
> >= < <=
== != === !==
콤마(,), typeof, delete, void
instanceof, in, new 등등

## 표현식의 형태

  • 자바 스크립트는 표현식의 연결이다.
1 + 2

var total = 1 + 2;

var value = total / (2+3);

=>
여기서 1 + 2 를 표현식을 평가 한다고 한다.
표현식을 평가하면 반드시! 결과가 반환된다. 이를 평가결과 라고 한다.
1+2의 평가결과는 3

## 할당 연산자

  • 단일 할당 연산자 : = 을 하나만 사용
var result = 1 + 2;
  • 복합 할당 연산자 : = 앞에 연산자를 작성한다.
= 앞에 연산자 작성
+=, -=, *=, /=, %=
<<=, >>=
>>>=, &=, ^=, |=

먼저 = 앞을 연산한 후 할당한다.
var point = 7;
point += 3;

## 해석, 실행 순서

  • 해석 : 자바스크립트 코드를 기계어로 바꾸는  것 (Compile), "엔진이 해석하고(Compile 하고) 실행한다."고 한다.
  • 실행 순서
var result = 1 + 2 + 6;
=>
왼쪽에서 오른쪽으로 실행
= 왼쪽의 표현식 평가
= 오른쪽의 표현식 평가
왼쪽에서 오른쪽으로 평가(1 + 2, 3 + 6)
= 오른쪽 표현식의 평가 결과를 왼쪽 표현식 평가 결과에 할당
var result = 9;

## 산술 연산자

  • 더하기(+) 연산자 : 양쪽의 표현식을 평가, 평가 결과를 더한다.
var value = 1 + 2 + 4;
log(value);
=>
우선 1과 2를 더하고
1과 2를 더한 값인 3에 4를 더한다.
그리고 더한 값인 7을 value 변수에 할당한다.
  • 1 + 5 + "ABC"의 결과
var value = 1 + 5 + "ABC";
log(value);

=>
6ABC
우선 더하기 규칙에 따라 1과 5를 더하여 6이 된다.
이어서 6과 "ABC"를 연결한다.




var two = "2";
var value = 1 + two;
log(value);
log(typeof value);

=>
12
string
일반적으로 number 타입과 string 타입은 계산하는 것은 문법에 맞지 않다.
하지만, 자바스크립트는 이를 "연결하여" 값을 반환한다.
(자바스크립트는 되도록이면 특정한 부분에서 에러가 발생하여 
전체 웹 페이지가 표시되지 않는 것을 방지하려는 경향(특성)이 강함, 이를 반영한 것)

## 숫자로 변환

  • 자바스크립트는 연산 전, 우선 숫자로 변환을 시도한다.
  • 숫자로 변환이 되면 변환 된 값으로 연산을 수행한다.
값 타입 변환 값
Undefined NaN
Null +0
Boolean true : 1, false : 0
Number 변환 전/후 같음
String 값이 숫자이면 숫자로 연산 (단, 더하기(+)는 연결)
var value;
log(10 + value);

=>
NaN
value 값을 선언만 했으므로 undefined
10 + value의 경우 10 + undefined로 NaN 으로 변환


log(10 + null);
log(10 + true);
log(10 + false);

=>
10
11
10
null은 0으로
true은 1로
false은 0으로 변환


log(10 + "123");
log(123 - "23");

=>
10123	// +는 연결
100		// + 외에는 숫자로 변환 시도하여 작업
반응형
반응형

# 자바스크립트 학습

# 데이터 타입

  • 데이터(Data) 의 사전적 의미는 자료이다.
  • 데이터 타입을 자료형이라고 부르기도 한다.
  • 데이터는 반드시 타입을 갖는다.
  • 자바스크립트는 데이터를 기준(변수에 설정된 데이터에 따라)으로 타입을 결정 한다. (타입을 먼저 선언하고 타입에 맞는 데이터를 할당하지 않는다.)

## 데이터 타입의 형태

  • 숫자 타입
var value = 123;
  • 문자 타입(큰 따옴표 or 작은 따옴표 안에 작성)
var value1 = "work";
var value2 = "book";

## typeof 연산자

  • typeof 연산자와 같은 단어를 키워드 라고 한다. ( 키워드란 특별한 의미를 가진 단어)
  • typeof value에 데이터를 작성, 데이터 타입을 반환
val point = 123;
log(typeof point);
=> number 출력

val book = "책";
log(typeof book);
=> string 출력

# 데이터 타입의 분류

  • 데이터 타입은 언어 타입과 스펙 타입으로 분류된다.

## 언어 타입

  • 자바스크립트 프로그램에서 사용할 수 있는 타입이다.
  • Undefined, Null, Boolean, String, Number, Object

## 스펙 타입

  • 언어 알고리즘을 위한 타입이다.
  • 자바스크립트에서는 사용할 수 없다.
  • Reference, List, Completion, Property Descriptor, Data Block, Lexical Environment, Lexical Record 등

## Number 타입

  • 부호를 가진 값(+, -)
var point = 123;
log(typeof point);
point = -1.23;
log(typeof point);
=>
number
number 출력
  • 숫자 값의 범위는 2의 64승 - 2의 53승 + 3
  • Number 타입의 특수한 3개 값
NaN : Not-a-Number (숫자가 아니라는 시맨틱이면서 값이다.)

Infinity : 양수 무한대

-Infinity : 음수 무한대
  • NaN은 자바스크립트의 특징이며 성향으로서, 되도록이면 프로그램이 죽지 않도록 하기위한 시맨틱이자 값 (숫자가 아니라는 값)
Not-a-Number 예
var point = 1 * "A";
log(point);
=> NaN

## String 타입

  • 문자 타입으로 큰 따옴표("") or 작은 따옴표('') 사이에 작성한다.
  • 최대 문자수는 2의 53승-1
  • 큰 따옴표와 작은 따옴표를 같이 사용할 때 따옴표 작성 방법
var point = "책, '123'";
log(point);
=> 책, '123' 
( 큰 따옴표 안에 작성된 작은 따옴표도 출력 )

point = '책, "123"';
=> 책, "123"
( 작은 따옴표 안에 작성된 큰 따옴표도 출력 )
  • 따옴표에 숫자를 작성하면 문자 타입이 된다.
var value = "123";
log(typeof value);
=> string

## Undefined 타입

  • Undefined (대문자)는 스펙에서 사용하는 타입이다.
  • undefined (소문자)는 값이다.
  • 변수의 디폴트 값(Defatult)이다. 
var point;
log(point)
=> undefined
변수를 선언만 한 것으로, undefined가 초깃값으로 설정된다.
  • undefined는 변수에 값을 할당하지 않은 것을 나타내는 시맨틱이다.
  • 자바스크립트의 변수는 반드시 이름과 값을 갖는 구조가 되어야 한다.
  • undefined는 값이므로, 변수에 할당할 수 있다.
var point = undefined;
log(point);
=> undefined

## Null 타입

  • Null (대문자)는 스펙에서 사용하는 타입이다.
  • null (소문자)는 값이다.

## null과 nudefined의 차이

  • undefined는 단지 변수만 선언한 것 ( 변수에 undefined 값을 할당하지 않아도 변수는 undefined 값을 갖는다. )
  • 하지만, null은 변수에 null값을 할당해야 값이 null이 된다.
  • null은 의도적으로 값을 할당한 것으로 코드를 수행한 것이 된다.
var book;			// 변수만 선언한 것
log(book);

var point = null;	// null 값을 할당한 것
log(point);

=>
undefined
null

## Boolean 타입

  • true, false
log(true);
log(false);

=>
true
false

## Object 타입

  • Object (대문자) 형태는 아래와 같다. (콤마로 구분하여 여러개 사용 가능)
{name:value} 형태		// 이름-값(=키-값)
  • 프로퍼티 (Property) : name과 value 하나(하나의 쌍)를 지칭한다. (위의 {name:value}를 의미)
  • Object (대문자)는 프로퍼티의 집합이다. Object에는 프로퍼티를 작성하지 않아도 된다.(즉, 0개 이상의 프로퍼티 작성 가능)
var book = {
	title: "책", point: 123
};
log(book);
=>
{title: 책, point: 123}

# 자바스크립트의 기본 데이터 타입 정리

  • 기본 데이터 타입을 Primitive 타입이라고 한다.
log(typeof 123);
log(typeof "문자열");
log(typeof true);
log(typeof undefined);

=>
number
string
boolean
undefined	// undefined는 값과 타입이 같다.
log(typeof null);
log(typeof {book: "책"});

=>
object	// typeof 연산자의 한계(설계 미스)
object
반응형
반응형

# 자바스크립트 학습

# 주석(Comment)

  • JS(자바스크립트) 코드로 인식하지 않도록 하는 것

## 주석의 종류

  • 한 줄 주석
// 한 줄 주석
var book = "책";	// 여기부터 주석
  • 블록 주석
/* 블록 주석 */
/*
	var book = "책";
	var music = "음악";
*/
  • /** 코드*/ 형태
/** 코드 */ 형태
/**
* @function getName
*	1. 이 형태로 작성
*	@param {String} code. 코드
*/
function getName(code){};

- 개발자들 사이의 코딩 관례!!
- 이렇게 작성 시 프로그램 설명 문서를 자동으로 만들어 주는 툴이 있다.

# JS 스펙(Specification)이란?

  • 자바스크립트 문법을 작성한 문서로 ES3, ES5는 JS 스펙의 에디션(Edition)(흔히 버전이라고 하지만 JS에서는 에디션이라고 한다.)
  • 자바스크립트 개발자는 자바스크립트 스펙에 작성된 문법을 기준으로 코드를 작성하게 된다.
  • 자바스크립트 엔진은 작성된 코드를 자바스크립트 스펙의 문법에 맞추어 컴파일, 실행하게 된다. 
  • 자바스크립트가 프로그래밍 언어를 나타내는 반면에, 자바스크립트 엔진은 내부에서 컴파일 하고 실행하는 처리 측면을 의미한다.

# console.log()

  • 소괄호( ) 안에 작성 된 값을 브라우저의 콘솔 창에 출력한다.
var point = 123;
console.log(point);
log(point);
  • 문자, 숫자 등을 출력하며, 콤마로 구분하여 다수 작성 가능하다.
  • 파라미터 값 : 소괄호( ) 안에 작성 된 값을 의미한다.
  • 콘솔 로그는 JS(자바스크립트)에서 제공하는 것이 아닌 console API에서 제공한다.

## 콘솔 창 여는 방법

  • 브라우저마다 다르지만 보통 F12를 누르면 개발자 도구에서 확인할 수 있다.

# 정수, 실수

  • 정수 : 소수가 없는 숫자를 의미한다.
123, -123
  • 실수 : 소수를 가진 숫자
1.232, 1.0
  • 자바스크립트는 정수와 실수를 구분하지 않는다. (IEEE 754 표준 준수)
1, 1. , 1.0 을 모두 1.0으로 간주한다!!
(단, 표시는 1로 표시한다.)

log(1);
log(1.);
log(1.0);
log(1.00001);

## 숫자 처리

  • 자바스크립트는 정수와 실수를 구분하지 않는다.
  • 64비트(Bit : 비트는 0, 1만의 값을 갖는 것) 부동 소수점 처리
  • 부동 소수점 처리 : 123을 123.0 으로 처리하는 것 ( 정수를 실수로 간주하여 처리하는 것 )
  • ES6에서는 정수, 실수 구분하는 기능이 추가됨
log(.123);
=> 소수점 앞에 값을 작성하지 않으면 0.123으로 사용한다.

log(0.12 + 5);
=> 정수와 실수를 구분하는 언어(C++, JAVA 등)에서는 정수와 실수의 계산이 불 가능,
하지만 자바스크립트의 경우 정수와 실수를 구분하지 않아 계산 가능
=> 표시는 5로 했지만 5.0 이므로 5.12

# 상수, 진수

  • 상수 : 변경할 수 없는 값
  • 상수 변수 : 상수가 설정된 변수, 자바스크립트의 경우 변수의 값을 변경할 수 있으므로 상수 변수는 선언적 의미가 있다.

## 상수, 변수 표기 방법

  • 코딩 관례로 영문 대문자 사용!!
var ONE = 1;
이것은 상수로 사용한다는 시맨틱 선언(값을 바꾸지 말라는 선언)

ONE = 456;
log(ONE);
log(Number.MAX_VALUE);
=> 상수 ONE의 변수 변경 가능하지만, 바꾸지 말라는 시맨틱 선언.
=> Number.MAX_VALUE는 최댓값으로 자바스크립트 상수이며, 값을 변경할 경우 에러가 발생한다.(변경 불가능)
그 외에 MIN_VALUE 등이 있다.
  • 진수의 경우 10진수, 16진수, 8진수, 2진수 등이 존재
10 진수 : 123 

16진수
0xFF: 255
1번째 자리 : 숫자 0 작성
2번째 자리 : 영문자 x 작성
3번째 이후 : 0 ~ f 작성
대소문자 구분하지 않는다.

8진수
ES3에서 폐지, ES6에서 재 정의
1번째 자리 : 숫자 0 작성
2번째 자리 : 영문자 o 작성
3번째 자리 : 0 ~ 7 작성

2진수
0 또는 1을 가진 비트를 조합하여 값을 표현한다.
ES6에서 특별한 방법을 제공한다.(머신러딩, 딥러닝 등 연산을 많이하며 빠른처리를 요구할때 사용)
반응형

+ Recent posts