
값의 타입을 변화시키는 것을 말한다.
숫자 + 문자 = 문자열
그외 연산자는 계산됨
숫자 - "숫자문자" = 숫자(계산값)
숫자로 표현하지 못하면 NaN
숫자 - "문자" = NaN
다음과 같은 함수들이 강제로 형을 변화시켜준다.
앞에 붙은 window는 생략이 가능하다.
사용자에게 간단한 메세지를 보여주고 확인을 기다린다.
let num1 = prompt("첫 번째 숫자");
let num2 = Number(prompt("두 번째 숫자"));
num1 = Number(num1)
document.write(`두 수의 합 : ${num1+num2}`);
한 문장 안에 다양한 연산자가 있을 때 먼저 연산하는 순위
최 우선 연산자
단 항 연산자
산 술 연산자
쉬 프트 연산자
관 계 연산자
논 리 연산자
삼 항 연산자
대 입 연산자
한 문장 안에 우선순위가 같은 연산자들이 있을 때 맞는 방향으로 결합되어 연산되는 성질
(1+2)+3+4
(3)+3+4
(6)+4
10
% : 나머지 연산자
a%b : a를 b로 나눈 나머지
** : 제곱 연산자
a**b : a의 b제곱
1 bit : 컴퓨터 용량의 최소 단위(0 또는 1이 담길 수 있는 공간)
1byte : 8bit / 데이터의 최소단위, 의미를 가지는 최소단위, 메모리의 최소단위
1KB : 1024byte(2의 10승)
1Mega : 1024KB
1Giga : 1024MB
1Tera : 1024GB
1Peta : 1024TB
17 > [1][0][0][0][1]
14 > [0][1][1][1][0]
AND(&) 논리곱 두 비트가 모두 1이라면 1
14 & 17 > [0][0][0][0][0]
14 & 17 0
OR(|) 논리합 두 비트 중 한개가 1이라면 1
14 | 17 > [1][1][1][1][1]
14 | 17 31
XOR(^) 배타논리합 두 비트가 서로 다르면 1
14 ^ 17 > [1][1][1][1][1]
14 ^ 17 31
NOT(~) 논리부정 비트를 0이면 1로, 1이면 0으로 뒤집어준다.
양수 부호비트도 뒤집혀져서 음수가 된다.
~14 > [1][0][0][0][1] > 사실은 [1][1][1][1]......[1][0][0][0][1] 이렇게
~14 > -15
~17 > [0][1][1][1][0] > 사실은 [1][1][1][1]......[0][1][1][1][0] 이렇게
~17 > -18
~a = -(a+1)
>> 우 쉬프트 a >> b a를 b만큼 우측으로 비트이동
17>>1 -> [1][0][0][0][1] -> [0][1][0][0][0] -> 8
<< 좌 쉬프트 a << b a를 b만큼 좌측으로 비트이동
17>>1 -> [1][0][0][0][1] -> [1][0][0][0][1][0] -> 34
// 문자열끼리 비교는 사전순으로 뒤에 있는게 큰 값
const str2 = "abcdefghijklmnopqrstuvwxyz"
const str3 = "abd"
console.log(str2 > str3) //false
조건식들 간의 관계를 설정해주는 연산자
(A,B는 조건식으로 가정 - 양 옆에 true/false 값이 와야한다.)
&&연산자는 ||연산자보다 우선 순위가 높다. (A || B && C) === A || (B && C)
A && B : 양 옆에 true 값이 올때 true, 둘 다 true 이면 true
A || B : 둘 중 하나라도 true 일때 true
const num1 =10
const num2 =5
const result1 = num1 == num2; //false
const result2 = num1 > num2; //true
let result3 = result1 && result2
console.log(result3) //fasle
result3 = result1 || result2
console.log(result3) // true
console.log(!result3) // false
console.log(10>3 && 21<17) //false
!A : 뒤에 오는게 true 라면 false, false라면 true 변경
프롬프트로 이름, 국어점수, 영어점수, 수학점수 입력받고
화면에 다음과 같이 띄운다.
------ 김사과 ------
국어점수 : 100점
영어점수 : 80점
수학점수 : 90점
총점 : 270점
평균 : 90점
let name = prompt("이름을 입력하세요")
let ko = prompt("국어 점수를 입력하세요");
let en = prompt("영어 점수를 입력하세요");
let math = prompt("수학 점수를 입력하세요");
let sum = Number(ko)+Number(en)+Number(math);
let ave = sum/3;
document.write(`----${name}-----<br>`);
document.write(`국어점수 : ${ko}<br>`);
document.write(`영어점수 : ${en}<br>`);
document.write(`수학점수 : ${math}<br>`);
document.write(`총점 : ${sum}<br>`);
document.write(`평균 : ${Math.round(ave)}<br>`);
위 코드의 문제점은 다수의 let을 선언하면서 불필요한 변수들로 인하여 저장공간을 많이 잡아 먹는 단점과 document.write 코드의 반복적인 사용으로 가독성이 떨어지는 단점이 생겼다.
위 코드의 저장공간을 줄이고 코드의 가독성을 위해 마크업언어를 사용하여 정리해보았다.
아직 수업에서 배우지 않은 객체를 응용하여 사용하였다.
let score = {};
score.name = prompt("이름을 입력하세요", "ex) 이강민");
score.ko = Number(prompt("국어 점수를 입력하세요", "85"));
score.en = Number(prompt("영어 점수를 입력하세요", "85"));
score.math = Number(prompt("수학 점수를 입력하세요", "85"));
let sum = score.ko + score.en + score.math;
document.write(`
<div class="score">
<p>----${score.name}----</p>
<p>
국어점수 : ${score.ko} <br>
영어점수 : ${score.en} <br>
수학점수 : ${score.math} <br>
총점 : ${sum} <br>
평균 : ${Math.round(sum/3)} <br>
</p>
</div>`
)