Primitive Types

99PERCENT·2022년 2월 17일
0

JavaScript

목록 보기
1/12

자바스크립트의 원시타입(Primitive Types) : 프로그래밍 언어의 일반적인 개념들(여기서는 자바스크립트의 일반적인 개념)

Number

다른 언어에는 정수와 소수를 분리해 타입이 여러 개 있지만, 자바스크립트에서는 오직 하나의 넘버 타입이 있다. 양수, 음수, 정수, 소수를 포함한다.

	Modulo —> 	% 기호를 사용하며 나머지 연산자라고 한다.
				(ex. 9 % 2 = 1, 19 % 4 = 3)
				숫자가 홀수인지 짝수인지를 판단하는 데에 자주 쓰인다. 
				어떤 숫자든 N % 2 를 통해서 판별하는 것이다. 1이 나오면 홀수, 0이 나오면 짝수.	

	exponentiation —> 	** 기호를 사용하며, 지수 연산자라고 한다.
						첫 번째 숫자에 뒤의 숫자만큼 지수 연산을 해서 거듭제곱하는 방식.
						(ex. 2 ** 3 = 8 )
	
	NaN —> Not a Number. NaN은 숫자가 아닌 뭔가를 나타낸다. 
			(ex. 0/0 = NaN)
			NaN은 엄밀히 말하면 자바스크립트에서 숫자로 간주된다.
			증명) typeof NaN —> “number” (typeof N / typeof는 피연산자가 숫자인지 아닌지 판별해줌)
			
			
	연산자 퀴즈
		1. 	4 + 3  * 4 / 2  = 10
		2. 	(13 % 5) ** 2 = 9
		3. 	200 + 0/0 = NaN

Variables(변수들)

	변수는 값에 어떤 이름을 저장하고 Javascript로 그 값을 저장하여 나중에 다시 돌아오거나 다시 쓰거나 업데이트하거나 불러올 수 있게 해준다.
	결국에는 나중에 돌아올 수 있게 값에 이름을 지정해서 저장하는게 다이다.

	변수 키워드 1. Let

		let someName = value;
		(let은 키워드, someName은 지정하는 변수의 이름, value는 변수 이름으로 저장하려는 값)
		(ex. let year = 1984; 	/	나중에 스크립트에서 year을 언급하면 자바스크립트가 1984라는 숫자를 저장해 놓은 것을 볼 수 있음)
			let numMale = 2;
			let numFemale = 3;							
			let numTotal = numMale + numFemale;
				(numTotal —> 5)
			numMale = numMale + 1;
				(numMale —> 3)
				(numTotal —> 5, 	피연산자 변수를 업데이트 해줘도 값이 새로 반영이 안되는데, 이는 앞서 let numTotal = numMale + numFemale; 에서 본질적으로 연결이 된 것이 아닌
									그 순간을 스냅샷으로 찍은 것이기 때문이다.)
			numTotal = numMale + numFemale;
				(numTotal —> 6,		새로 스냅샷을 찍었기 때문에 신규 업데이트가 반영된 모습이다.)					
		
			let score = 0;
			score = 5;
			score = score + 5;
				(score —> 10)
			score += 5;
				(score —> 15, score += 5는  score = score + 5 와 정확히 동일한 기능이다. 그냥 축약한 것이다.)
			score += 10;
				(score —> 25)
			score -= 20;
				(score —> 5)
			score *= 3;
				(score —> 15, *= 는 자주 쓰이지 않는다.)
			score /= 3;
				(score —> 5, /= 은 자주 쓰이지 않는다.)
			score- -;
				(score —> 4, - - 메모특성상 띄웠지만 붙여 쓰는거. 1씩 제거)
			score++;
				(score —> 5, ++1씩 추가)
	변수 키워드 2. Const(상수, 상수 = 항상 일정한 값이다.)
        
		const는 constant의 줄임말이다. 	
		let과 다르게 한 번 const로 저장된 변수값은 값이 바뀔 수 없다.
		원주율 값이나(const pi = 3.14159;)
		확실한 값(const daysInWeek = 7;	const minHeightForRide = 60;)에 사용한다.
		Javascript의 데이터구조인 array나 object를 배우고 나면 왜 const가 유용한지 알 수 있다.

Boolean

	두 개의 값인 true와 false가 있다.
	주로 yes or no 값과 true or false 값에 사용된다.
	일반적인 어플리케이션에서 얼마나 많은 참/거짓으로 표현할 수 있는지 생각해보아야 한다.
	게임의 경우 아직도 플레이중인지, 이 사람이 이겼는지 졌는지 이런 정보들을 다른 정보와 마찬가지로 변수에 저장해둘 수 있다.

	boolean은 저장하기 매우매우 쉽다. 
	true / false
	yes / no
	0 / 1

Variables can change types

		자바스크립트에서는 type을 변경하는 변수를 가질 수 있다.
		숫자 변수를 만들었다고 해서 숫자만 저장해야 하는 것이 아니다.
			let numPuppies = 23;	// Number
			numPuppies = true;	// Now Boolean
			numPuppies = 100;	// Back to Number 
		매우 드문 경우지만, 타입을 변경할 수 있다는 정도만 알아두자.
		또한 다른 프로그래밍 언어에서는 변수를 만들 때 저장하는 값이 숫자라면 숫자만 저장할 수 있다.
		자바스크립트가 다른 것.

		TypeScript = 애드온 혹은 자바스크립트의 개량판인데, 이런 타입 전환을 제한시킬 수 있다. 
		숫자만 저장하는 변수라든지 boolean만 저장하는 변수라든지 하는 방식으로.

How to make the Variable’s Name

		공백 금지
		숫자를 붙일 순 있으나, 숫자로 시작해서는 안 된다.
		한 단어 이상은 반드시 camelCase 준수. + 한 글자 짜리 변수명은 절대 금지
		boolean 변수명을 생성할 때, 변수 이름 앞에는 is를 붙일 것. is를 통해 이 변수가 boolean 변수인지 확실하게 알 수 있다. 
		(ex. let isLoggedIn = true;	/	isGameOver = false;	)
		
	

String

		문자열은 기본적으로 텍스트 정보이다.(글자로 된 줄이라는 의미)
		문자열은 공백이 가능하다.
		사용자 이름, 주소, 주와 도시 등		
		문자열은 또 하나의 원시타입이다.

		문자열이 인덱싱(indexing) 되었다.
		문자열 안의 모든 문자는 관련된 숫자에 상응한다는 것이다.
		C H I C K E N 	
		0 1 2 3 4 5 6 
		문자열의 시작부터 이어지는 자릿수는 0부터 시작한다. 공백도 세는 것에 포함!
		+ 인덱싱되는 것 = 문자열, 배열이 있다.
		위의 예시에서 K는 인덱스의 4이다. N은 인덱스의 6이다.
		이것이 왜 중요한가 —> 우리가 인덱스를 기반으로 각각의 인덱스, 각각의 문자에 접근할 수 있기 때문이다.  
		(ex. let animal = “chicken” —> animal[2] —> i 출력)
		
		모든 문자열에는 length라는 특성이 포함되어 있다.
		문자열의 길이를 확인해주는 것인데 variableName.length 로 쓸 수 있다.
		animal.length —> 7(문자열의 길이는 7이다. 총 문자수는 7이다.)
		animal[6] —> n (문자열의 길이는 7이지만, animal 변수의 인덱스의 끝(6)은 n이다.)
		
		문자열의 대문자와 소문자는 다른 문자열이다.
		비슷해보이지만 메모리 상으로는 전혀 다르다는 것이다.
		(ex. River와 river은 다르다는 것)

		숫자와 문자열을 합치면 자바스크립트에서는 문자열로 인식한다.
		let result = 1 + “”hi”;
		result —> “1hi”	
		typeof result —> string	
		typeof 1 —> number	

String Methods

		우리가 자바스크립트에서 만드는 모든 문자열은 실질적으로 어떤 동작을 내포하고 있다.
		특정 문자열을 사용해 수행할 수 있는 이런 동작을 메서드라고 부른다. 메서드 뒤에 괄호가 없으면 실행이 안된다.
		
		사용	
           thing.method( )
		예시 1
            let msg=“hello world!”		
            msg.toUpperCase(); 	//HELLO WORLD!
		예시2 : trim은 문자열 사이사이가 아닌 끝과끝의 좌우의 공백만 제거
            let userInput = “ hello my name is Tim. ”
			userInput.trim(); // hello my name is Tim.	
		예시3: 메서드는 복수로도 사용 가능하다.
           let userInput = “ hello my name is Tim. ”
			userInput.trim().toUpperCase();	// HELLO MY NAME IS TIM.
		많은 메서드는 위의 패턴말고도 method.(인수); 패턴이 존재한다.
		인수란 메서드로 전달되어서 메서드의 전달되어서 메서드의 동작을 변경하는 입력 값이다.
		특정 메서드는 인수를 전달해줘야 실행이 가능하다.
		
		**indexOf 메서드**
		indexOf는 문자열에서 주어진 인수가 나타나는 문자열 인덱스와 그 자릿수를 반환한다.
				let tvShow = ‘catdog’;
				tvShow.indexOf(‘cat’);	// 0	(cat은 인덱스 0에서부터 나타나기 때문)
				tvShow.indexOf(‘dog’);	// 3	(dog는 인덱스 3에서부터 나나타기 때문)
				tvShow.indexOf(‘z’);	// -1	(문자열에 없는 것이기 때문에 -1이 나타난다.)
		indexOf(인수)는 문자열에 뭐가 포함되어 있는지 확인할 때 자주 쓰인다. 
		
		**slice 메서드**
		slice(인수)는 문자열을 자르는데, 인수에 인덱스 어느 부분까지 자를지 정해주면 된다.
		 		let tvShow = ‘catdog’;
				tvShow.slice(2);	// dog
		**replace 메서드**
		문자열을 교체할 수 있다. replace(인수1, 인수2). 인수 1=현재 값, 인수2=교체할 값
		(+정규 표현식을 이용해서 패턴에 매칭시켜서 특정한 문자열 대신에 패턴을 교체할 수 있다. // 아직 안배워서 패스)
				let greeting = ‘hi my name is M.;
				greeting.replace(‘hi’, ‘hello’);	// hello my name is M.
		**repeat 메서드**
		반복하고 싶은 횟수만큼 인수에 값을 넣는다.
			“ㅎㅇ”.repat(5);	//	ㅎㅇㅎㅇㅎㅇㅎㅇㅎㅇ

Template Literals(탬플릿 리터럴)

		문자열 안에 표현식을 내장할 수 있는 문자열을 만들고 해당 표현식은 평가된 후 문자열로 바뀐다.
			`I counted ${3 + 4} sheep`;	//	“I counted 7 sheep”
		${3+4}가 평가된 후 문자열로 교체된다.

		탬플릿 리터럴에는 백틱(back-tick)기호를 사용한다. (맥에서는 영어로 바꾸고 ₩을 누르면 —> ` 가 나온다.)
		위의 예시에서 전체 문장을 감싸는 것도 백틱기호(``)이다.
				let cost = 1000;
				let quantity = 3;
				`You bought ${quantity} products. Total is ${quantity*cost} won. Thank you.`;
				// You bought 3 products. Total is 3000 won. Thank you.

Null

		일부러 값을 지정하지 않는 것으로 설정한다.
		변수를 만들고 나서 그 변수를 null로 설정할 수 있다.
		변수에 대해서 값으로 지정하는 요소이다.
			// 아직 아무도 로그인하지 않은 상태…
			let loggedInUser = null;	//	값이 없다고 알림
			
			// 유저가 로그인 시도
			loggedInUser = ‘Alan Rickman’;

Undefined

		null과 달리 undefined는 우리가 따로 설정하지 않는다.
		아무 것도 정의된 것이 없다는 뜻이다.
		

Recap

Primitive Types(원시 타입들) : 자바스크립트의 기본 빌딩 블럭들
		Number
		String
		Boolean
		Null
		Undefined

Math Object(수학 객체)
Math 객체들에 내장되어 있는 매서드들이다.
			Math.PI	// 3.141592653589793

			// Rounding a numbe(숫자를 반올림해주는):
			Math.round(4.9)	// 5

			// Absolute value(절대값):
			Math.abs(-456)	// 456

			// Raises 2 to the 5th power(제곱, 2의 5제곱):
			Math.pow(2, 5)	// 32

			// Removes decimal(소수점 제거):
			Math.floor(3.9999)	// 3

			Math.Random();	// random number
			1~10 자연수 얻기
			const step1 = Math.random( );
			const step2 = step1 * 10;
			const step3 = Math.floor(step2);
			const step4 = step3 + 1;

			Math.floor(Math.random()*10) + 1;	
			// +1 은 0을 없애기 위해서 , *5는 1~5의 값, *10은 1~10의 값

			// 20~22를 구하려면?
			Math.floor(Math.random()*3) + 20;
	
profile
99 ~ 100

0개의 댓글