SlideShare ist ein Scribd-Unternehmen logo
1 von 32
스파르탄 스터디
CH.01. JS Intro. Data Type
1. 빠르게 훑어 보는
자바스크립트의 흐름
2. 적응 안되는 데이터 타입
3. 모르면 다치는 연산자
4. 이해가 필요한 객체와 배열
+@ 꼭 알아야 될 것들 몇 가지
1. 빠르게 훑어 보는
자바스크립트의 흐름
2. 적응 안되는 데이터 타입
3. 모르면 다치는 연산자
4. 이해가 필요한 객체와 배열
Javascript
공부할게 있나?
페이지 전체
새로 고침
Validation
체크 정도
간단한 이벤
트 발생
1. 빠르게 훑어 보는 자바스크립트의 흐름
AJAX의 등장
Sync -> Async
하드웨어↑
Javascript 엔
진의 발전
1. 빠르게 훑어 보는 자바스크립트의 흐름
활용범위 확대
1. 빠르게 훑어 보는 자바스크립트의 흐름
SPA(Single Page Application)
하이브리드 웹앱
Node.js
인기가 아주 그냥
1. 빠르게 훑어 보는 자바스크립트의 흐름
Best Programming Language 2015
단어로 보는 역사
Brendan Eich
Mocha -> Live Script -> Javascript
<-> Jscript
ECMA(European Computer Manufacturers Association)
- 문법과 의미를 표준화하여 일반적인 목적에 쓸 수 있고 플랫폼을 가리지
않으며 제조사에 중립인 스크립트 언어
TC39 - 넷스케이프, 마이크로소프트, 선, 볼랜드, NOMBAS 등
Javascript 1.0 -> 1.1
-> ECMA-262 -> 2판 -> 3판 -> 4판(폐기) -> 5
판 -> 6판
https://ko.wikipedia.org/wiki/ECMA스크립트
1. 빠르게 훑어 보는 자바스크립트의 흐름
1. 빠르게 훑어 보는
자바스크립트의 흐름
2. 적응 안되는 데이터 타입
3. 익숙하지 않은 연산자
4. 이해가 필요한 객체와 배열
데이터 타입은 몇 가지?
2. 적응 안되는 데이터 타입
Undefined
Null
Boolean
String
Number
and Object
Java와 다른 점 몇 가지
2. 적응 안되는 데이터 타입
* Dynamic typing
숫자를 표현하는데에 Number type 하나만 존재, 소수 표현에
부동소수점 사용
String의 표현에 Double/Single quotation 둘 다 사용 가능
String이 참조타입이 아닌 기본타입.
* Dynamic typing
2. 적응 안되는 데이터 타입
// Java 개발자에게 익숙한 형태
int a = 1;
// 하지만...
var a;
a = null;
a = 1;
a = 'str';
a = [];
a = {};
* Dynamic typing
Dynamic typing = Javascript is a loosly typed of
dynamic language.
변수를 선언할때 타입을 지정하지 않아도 된다.
=> 코드 실행시에 문맥에 따라 데이터 타입이 결
정된다.
이것이 가능한 이유?
2. 적응 안되는 데이터 타입
실행 시점의 문맥에 따라 변수를 Wrapper Class로 감싼다.
이 Wrapper 객체는 사용이 끝나면 시스템이 회수해간다.
* Wrapper Class :
자바스크립트에는 세 가지 핵심 기본 데이터 타입 각각에 대응되는 Wrapper 클래스가
정의되어 있다. Wrapper는 기본 데이터 타입 값과 동일한 값을 담고 있고, 데이터 조작
을 위한 프로퍼티와 메서드도 가지고 있다.
* Dynamic typing
+, -, *, /, ! 5가지의 연산자를 통해 타입이 어떻게 변하는지 보자
2. 적응 안되는 데이터 타입
+ 연산자의 작동방식은 피연산자중 하나라도 String형이 있으면 나머지 피연산자를 String 형으로 변
환
그렇지 않으면 모든 피연산자를 Number형으로 변환한다.
나머지 사칙연산자 -, *, / 는 모든 피연산자를 Number type으로 변환
'123' + 123;
'123' - 123;
'123' * 123;
'123' / '123';
! 연산자는 피연산자를 Boolean 형으로 변환한다.
!'123';
!'';
!123;
!false;
* Dynamic typing
이러한 성질을 이용하면 형변환을 간단히 할 수 있다.
2. 적응 안되는 데이터 타입
- string 형으로 변환
var x = 123;
x += '';
- number 형으로 변환 (*, -, / 연산자를 활용)
var x = '123'
x *= 1;
- Boolean 형으로 변환
var x = '';
x = !!x;
* Dynamic typing
Wrapper Class로 변환
2. 적응 안되는 데이터 타입
var num_wrapper = new Object(3);
console.dir(num_wrapper);
- 보다 명시적인 방식
new Number(1);
new Boolean(true);
var str_wrapper = new String("It's String!");
console.dir(str_wrapper);
기본타입과 참조타입
2. 적응 안되는 데이터 타입
Javascript의 Primitive types 를 제외한 나머지 모든 객체는 참조타입.
Java의 String이 참조타입인 것과 대조된다.
1. 빠르게 훑어 보는
자바스크립트의 흐름
2. 적응 안되는 데이터 타입
3. 모르면 다치는 연산자
4. 이해가 필요한 객체와 배열
== 연산자
3. 모르면 다치는 연산자
==, != 연산자 : 값을 비교 -> 자동 형변환이 발생
The Abstract Equality Comparison Algorithm
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
'' == 0;
undefined == null;
=== 연산자
The Strict Equality Comparison Algorithm
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6
===, !== 연산자 : 값과 타입을 비교 -> 타입 변환이 발생하지 않음.
'' === 0;
* 정확한 비교를 위해서는 ==, != 보다는 ===, !== 사용 권장
3. 모르면 다치는 연산자
&&, || 연산자
var x = (1 && true && "str" && {}); // ?
var x = (1 || true || "str" || {}); // ?
var x = (1 && true || "str" || {}); // ?
if(a==b) stop();
(a==b) && stop();
(1==true) && function() {console.log("function's called")}();
3. 모르면 다치는 연산자
&&, || 연산자
var x = (1 && true && "str" && {}); // ?
var x = (1 || true || "str" || {}); // ?
var x = (1 && true || "str" || {}); // ?
// 같은 표현
if(a==b) stop();
(a==b) && stop();
(1==true) && function() {console.log("function's called")}();
3. 모르면 다치는 연산자
&&, || 연산자
* 공통적으로 적용되는 원리는 가장 왼쪽의 표현식부터 평가된다는 점이다.
&& 연산자는 나열된 표현식의 Boolean 처리 결과가 true인지 확인한다. 즉, 왼쪽의 표현식부터 순서
대로 하나씩 확인하며 모두 true인지 검사한다. 만약 표현식의 처리결과가 false 경우에는 해당 시점
의 표현식을 리턴한다. 만약에 모두 true라면 마지막의 표현식이 리턴된다.
|| 연산자는 반대로 하나라도 true가 있는지 확인하며, 모두 false인 경우 마지막의 표현식이 리턴된다.
3. 모르면 다치는 연산자
&&, || 연산자
|| 연산자는 반대로 하나라도 true가 있는지 확인하며, 모두 false인 경우 마지막의 표현식이 리턴된다.
var x = (0 || false || "" || null || undefined); // ?
var x = (0 || false && "a" || null || undefined); // ?
var x = (0 || true && "a" || null || undefined); // ?
* 위와 같은 방식은 표현식의 값에 따라 원치 않는 작동을 할 수 있으므로 &&, ||는 true, false를 판별
하는 용도로만 확인하는 것을 권장
3. 모르면 다치는 연산자
1. 빠르게 훑어 보는
자바스크립트의 흐름
2. 적응 안되는 데이터 타입
3. 모르면 다치는 연산자
4. 이해가 필요한 객체와 배열
생성방법
4. 이해가 필요한 객체와 배열
객체 : {}, new object()
var obj = {};
var obj = new Object();
배열 : [], new Array()
var arr = []
var arr = new Array()
Javascript 배열의 특수한 점
4. 이해가 필요한 객체와 배열
* Javascript 배열의 특수한 점은 배열의 길이가 동적으로 변한다는 점
length 속성의 값을 조정함으로써 배열의 크기를 확장하거나 축소시킬 수 있다.
그리고 다양한 자료형을 담을 수 있다. <- 당연한 이야기 (dynamic typing)
var arr = []; // arr.length == 0
arr.push(1); // arr.length == 1
arr.push(2); // arr.length == 2
arr.push(3); // arr.length == 3
arr.pop(); // arr.length == 2
arr.length = 1; // 나머지 요소는 삭제
arr.length = 5; // 나머지 요소는 undefined
유사배열
4. 이해가 필요한 객체와 배열
객체, String wrapper class, document.getElementsByTagName("div") 등 배열과 유사한 구조
var obj = {a:1, b:2, c:3};
for(idx in obj) {
console.log(obj[idx]);
};
var str_wrapper = new String('abcdefg');
console.dir(str_wrapper);
console.dir(document.getElementsByTagName("div"));
+@ 꼭 알아야 될 것들 몇 가지
1. 함수 선언문 해석
2. 변수 초기화
3. 자바스크립트코드 실행
debugger;
alert(square(4)); // ????
var square = 0;
function square(x) {
return x*x;
}
alert(square); // ????
자바스크립트 엔진 해석
변수 선언, 함수선언문을 읽기 전에 이미 square가 function으
로 등록되어 있다.
+@ 꼭 알아야 될 것들 몇 가지
Function에 사용되는 파라미터는 동적이다
동적 파라미터
function func(arr) {
arr = arr || [];
if (arr.length == 0) {
console.log('Error')
} else {
console.log(arr)
}
}
func(); // 파라미터가 없을 때
func([1,2,3]); // 파라미터가 있을 때
+@ 꼭 알아야 될 것들 몇 가지
동적 파라미터
function printArg() {
console.log(arguments);
}
printArg(1);
printArg(1,'a');
printArg(1,'a',{},[1,2,3]);
이것이 가능한 이유는 Arguments 오브젝트 때문
=> 파라미의 type이나 갯수로 함수의 오버로딩이 불가능.
Javascrip는 이름으로만 참조.
4. 이해가 필요한 객체와 배열
* 출처 :
ECMA5 Specification : http://www.ecma-international.org/ecma-262/5.1/
MDN : https://developer.mozilla.org/ko/docs/Web/JavaScript/Data_structures
자바스크립트 완벽 가이드 5/E - 데이비드 플래너건
몰입! 자바스크립트 - 김영보
Inside Javascript - 송형주, 고현준
프론트엔드 개발자를 위한 자바스크립트 프로그래밍 - 니콜라스 자카스
우리 머리에 주먹질을 해 대는 책이 아니라면, 우리가 왜 그런 책을 읽어야 한단 말인가?
- 프란츠 카프카

Weitere ähnliche Inhalte

Was ist angesagt?

Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
ETRIBE_STG
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
유진 변
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
Sung-hoon Ma
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
해강
 

Was ist angesagt? (20)

Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
Startup JavaScript 6 - 함수, 스코프, 클로저
Startup JavaScript 6 - 함수, 스코프, 클로저Startup JavaScript 6 - 함수, 스코프, 클로저
Startup JavaScript 6 - 함수, 스코프, 클로저
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료
 
동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기
 
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리
 
Java lambda
Java lambdaJava lambda
Java lambda
 
헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 
2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 

Ähnlich wie Javascript introduction, dynamic data type, operator

Itcookbook Asp Chapter2
Itcookbook Asp Chapter2Itcookbook Asp Chapter2
Itcookbook Asp Chapter2
xyzlee
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
Jaehoonyam
 
Regex & property sheet
Regex & property sheetRegex & property sheet
Regex & property sheet
Youngkwon Lee
 

Ähnlich wie Javascript introduction, dynamic data type, operator (20)

4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
Itcookbook Asp Chapter2
Itcookbook Asp Chapter2Itcookbook Asp Chapter2
Itcookbook Asp Chapter2
 
7주 JavaScript Part2
7주 JavaScript Part27주 JavaScript Part2
7주 JavaScript Part2
 
Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3
 
Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1
 
Java tutorial
Java tutorialJava tutorial
Java tutorial
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
 
Java_02 변수자료형
Java_02 변수자료형Java_02 변수자료형
Java_02 변수자료형
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
Jstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNG
 
Regex & property sheet
Regex & property sheetRegex & property sheet
Regex & property sheet
 
Scala
ScalaScala
Scala
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
 
5.Spring IoC&DI(DI와 관련된 어노테이션)
5.Spring IoC&DI(DI와 관련된 어노테이션)5.Spring IoC&DI(DI와 관련된 어노테이션)
5.Spring IoC&DI(DI와 관련된 어노테이션)
 
RIA Description Language(09.11.04)
RIA Description Language(09.11.04)RIA Description Language(09.11.04)
RIA Description Language(09.11.04)
 
Hacosa js study 7th
Hacosa js study 7thHacosa js study 7th
Hacosa js study 7th
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
 

Kürzlich hochgeladen

Kürzlich hochgeladen (8)

(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 

Javascript introduction, dynamic data type, operator

  • 2. 1. 빠르게 훑어 보는 자바스크립트의 흐름 2. 적응 안되는 데이터 타입 3. 모르면 다치는 연산자 4. 이해가 필요한 객체와 배열 +@ 꼭 알아야 될 것들 몇 가지
  • 3. 1. 빠르게 훑어 보는 자바스크립트의 흐름 2. 적응 안되는 데이터 타입 3. 모르면 다치는 연산자 4. 이해가 필요한 객체와 배열
  • 4. Javascript 공부할게 있나? 페이지 전체 새로 고침 Validation 체크 정도 간단한 이벤 트 발생 1. 빠르게 훑어 보는 자바스크립트의 흐름
  • 5. AJAX의 등장 Sync -> Async 하드웨어↑ Javascript 엔 진의 발전 1. 빠르게 훑어 보는 자바스크립트의 흐름
  • 6. 활용범위 확대 1. 빠르게 훑어 보는 자바스크립트의 흐름 SPA(Single Page Application) 하이브리드 웹앱 Node.js
  • 7. 인기가 아주 그냥 1. 빠르게 훑어 보는 자바스크립트의 흐름 Best Programming Language 2015
  • 8. 단어로 보는 역사 Brendan Eich Mocha -> Live Script -> Javascript <-> Jscript ECMA(European Computer Manufacturers Association) - 문법과 의미를 표준화하여 일반적인 목적에 쓸 수 있고 플랫폼을 가리지 않으며 제조사에 중립인 스크립트 언어 TC39 - 넷스케이프, 마이크로소프트, 선, 볼랜드, NOMBAS 등 Javascript 1.0 -> 1.1 -> ECMA-262 -> 2판 -> 3판 -> 4판(폐기) -> 5 판 -> 6판 https://ko.wikipedia.org/wiki/ECMA스크립트 1. 빠르게 훑어 보는 자바스크립트의 흐름
  • 9. 1. 빠르게 훑어 보는 자바스크립트의 흐름 2. 적응 안되는 데이터 타입 3. 익숙하지 않은 연산자 4. 이해가 필요한 객체와 배열
  • 10. 데이터 타입은 몇 가지? 2. 적응 안되는 데이터 타입 Undefined Null Boolean String Number and Object
  • 11. Java와 다른 점 몇 가지 2. 적응 안되는 데이터 타입 * Dynamic typing 숫자를 표현하는데에 Number type 하나만 존재, 소수 표현에 부동소수점 사용 String의 표현에 Double/Single quotation 둘 다 사용 가능 String이 참조타입이 아닌 기본타입.
  • 12. * Dynamic typing 2. 적응 안되는 데이터 타입 // Java 개발자에게 익숙한 형태 int a = 1; // 하지만... var a; a = null; a = 1; a = 'str'; a = []; a = {}; * Dynamic typing Dynamic typing = Javascript is a loosly typed of dynamic language. 변수를 선언할때 타입을 지정하지 않아도 된다. => 코드 실행시에 문맥에 따라 데이터 타입이 결 정된다.
  • 13. 이것이 가능한 이유? 2. 적응 안되는 데이터 타입 실행 시점의 문맥에 따라 변수를 Wrapper Class로 감싼다. 이 Wrapper 객체는 사용이 끝나면 시스템이 회수해간다. * Wrapper Class : 자바스크립트에는 세 가지 핵심 기본 데이터 타입 각각에 대응되는 Wrapper 클래스가 정의되어 있다. Wrapper는 기본 데이터 타입 값과 동일한 값을 담고 있고, 데이터 조작 을 위한 프로퍼티와 메서드도 가지고 있다. * Dynamic typing
  • 14. +, -, *, /, ! 5가지의 연산자를 통해 타입이 어떻게 변하는지 보자 2. 적응 안되는 데이터 타입 + 연산자의 작동방식은 피연산자중 하나라도 String형이 있으면 나머지 피연산자를 String 형으로 변 환 그렇지 않으면 모든 피연산자를 Number형으로 변환한다. 나머지 사칙연산자 -, *, / 는 모든 피연산자를 Number type으로 변환 '123' + 123; '123' - 123; '123' * 123; '123' / '123'; ! 연산자는 피연산자를 Boolean 형으로 변환한다. !'123'; !''; !123; !false; * Dynamic typing
  • 15. 이러한 성질을 이용하면 형변환을 간단히 할 수 있다. 2. 적응 안되는 데이터 타입 - string 형으로 변환 var x = 123; x += ''; - number 형으로 변환 (*, -, / 연산자를 활용) var x = '123' x *= 1; - Boolean 형으로 변환 var x = ''; x = !!x; * Dynamic typing
  • 16. Wrapper Class로 변환 2. 적응 안되는 데이터 타입 var num_wrapper = new Object(3); console.dir(num_wrapper); - 보다 명시적인 방식 new Number(1); new Boolean(true); var str_wrapper = new String("It's String!"); console.dir(str_wrapper);
  • 17. 기본타입과 참조타입 2. 적응 안되는 데이터 타입 Javascript의 Primitive types 를 제외한 나머지 모든 객체는 참조타입. Java의 String이 참조타입인 것과 대조된다.
  • 18. 1. 빠르게 훑어 보는 자바스크립트의 흐름 2. 적응 안되는 데이터 타입 3. 모르면 다치는 연산자 4. 이해가 필요한 객체와 배열
  • 19. == 연산자 3. 모르면 다치는 연산자 ==, != 연산자 : 값을 비교 -> 자동 형변환이 발생 The Abstract Equality Comparison Algorithm http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 '' == 0; undefined == null;
  • 20. === 연산자 The Strict Equality Comparison Algorithm http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6 ===, !== 연산자 : 값과 타입을 비교 -> 타입 변환이 발생하지 않음. '' === 0; * 정확한 비교를 위해서는 ==, != 보다는 ===, !== 사용 권장 3. 모르면 다치는 연산자
  • 21. &&, || 연산자 var x = (1 && true && "str" && {}); // ? var x = (1 || true || "str" || {}); // ? var x = (1 && true || "str" || {}); // ? if(a==b) stop(); (a==b) && stop(); (1==true) && function() {console.log("function's called")}(); 3. 모르면 다치는 연산자
  • 22. &&, || 연산자 var x = (1 && true && "str" && {}); // ? var x = (1 || true || "str" || {}); // ? var x = (1 && true || "str" || {}); // ? // 같은 표현 if(a==b) stop(); (a==b) && stop(); (1==true) && function() {console.log("function's called")}(); 3. 모르면 다치는 연산자
  • 23. &&, || 연산자 * 공통적으로 적용되는 원리는 가장 왼쪽의 표현식부터 평가된다는 점이다. && 연산자는 나열된 표현식의 Boolean 처리 결과가 true인지 확인한다. 즉, 왼쪽의 표현식부터 순서 대로 하나씩 확인하며 모두 true인지 검사한다. 만약 표현식의 처리결과가 false 경우에는 해당 시점 의 표현식을 리턴한다. 만약에 모두 true라면 마지막의 표현식이 리턴된다. || 연산자는 반대로 하나라도 true가 있는지 확인하며, 모두 false인 경우 마지막의 표현식이 리턴된다. 3. 모르면 다치는 연산자
  • 24. &&, || 연산자 || 연산자는 반대로 하나라도 true가 있는지 확인하며, 모두 false인 경우 마지막의 표현식이 리턴된다. var x = (0 || false || "" || null || undefined); // ? var x = (0 || false && "a" || null || undefined); // ? var x = (0 || true && "a" || null || undefined); // ? * 위와 같은 방식은 표현식의 값에 따라 원치 않는 작동을 할 수 있으므로 &&, ||는 true, false를 판별 하는 용도로만 확인하는 것을 권장 3. 모르면 다치는 연산자
  • 25. 1. 빠르게 훑어 보는 자바스크립트의 흐름 2. 적응 안되는 데이터 타입 3. 모르면 다치는 연산자 4. 이해가 필요한 객체와 배열
  • 26. 생성방법 4. 이해가 필요한 객체와 배열 객체 : {}, new object() var obj = {}; var obj = new Object(); 배열 : [], new Array() var arr = [] var arr = new Array()
  • 27. Javascript 배열의 특수한 점 4. 이해가 필요한 객체와 배열 * Javascript 배열의 특수한 점은 배열의 길이가 동적으로 변한다는 점 length 속성의 값을 조정함으로써 배열의 크기를 확장하거나 축소시킬 수 있다. 그리고 다양한 자료형을 담을 수 있다. <- 당연한 이야기 (dynamic typing) var arr = []; // arr.length == 0 arr.push(1); // arr.length == 1 arr.push(2); // arr.length == 2 arr.push(3); // arr.length == 3 arr.pop(); // arr.length == 2 arr.length = 1; // 나머지 요소는 삭제 arr.length = 5; // 나머지 요소는 undefined
  • 28. 유사배열 4. 이해가 필요한 객체와 배열 객체, String wrapper class, document.getElementsByTagName("div") 등 배열과 유사한 구조 var obj = {a:1, b:2, c:3}; for(idx in obj) { console.log(obj[idx]); }; var str_wrapper = new String('abcdefg'); console.dir(str_wrapper); console.dir(document.getElementsByTagName("div"));
  • 29. +@ 꼭 알아야 될 것들 몇 가지 1. 함수 선언문 해석 2. 변수 초기화 3. 자바스크립트코드 실행 debugger; alert(square(4)); // ???? var square = 0; function square(x) { return x*x; } alert(square); // ???? 자바스크립트 엔진 해석 변수 선언, 함수선언문을 읽기 전에 이미 square가 function으 로 등록되어 있다.
  • 30. +@ 꼭 알아야 될 것들 몇 가지 Function에 사용되는 파라미터는 동적이다 동적 파라미터 function func(arr) { arr = arr || []; if (arr.length == 0) { console.log('Error') } else { console.log(arr) } } func(); // 파라미터가 없을 때 func([1,2,3]); // 파라미터가 있을 때
  • 31. +@ 꼭 알아야 될 것들 몇 가지 동적 파라미터 function printArg() { console.log(arguments); } printArg(1); printArg(1,'a'); printArg(1,'a',{},[1,2,3]); 이것이 가능한 이유는 Arguments 오브젝트 때문 => 파라미의 type이나 갯수로 함수의 오버로딩이 불가능. Javascrip는 이름으로만 참조.
  • 32. 4. 이해가 필요한 객체와 배열 * 출처 : ECMA5 Specification : http://www.ecma-international.org/ecma-262/5.1/ MDN : https://developer.mozilla.org/ko/docs/Web/JavaScript/Data_structures 자바스크립트 완벽 가이드 5/E - 데이비드 플래너건 몰입! 자바스크립트 - 김영보 Inside Javascript - 송형주, 고현준 프론트엔드 개발자를 위한 자바스크립트 프로그래밍 - 니콜라스 자카스 우리 머리에 주먹질을 해 대는 책이 아니라면, 우리가 왜 그런 책을 읽어야 한단 말인가? - 프란츠 카프카