<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript 연산자</title>
</head>
<body>
<h1>===JavaScript 연산자===</h1>
<script type="text/javascript">
//1.산술 연산자
document.writeln('<h2> 산술연산자 </h2>');
var num = 20; //정수
var str = '20'; //문자열
var bool = true; //boolean
var obj = {}; //빈객체
//1-1.피연산자가 숫자일 경우, 덧셈 연산을 행함
document.writeln('num + 13 : ');
document.writeln(num + 13); //=>33
document.writeln('<br/>');
//1-2.피연산자가 boolean일 경우,
//true는1로 / false는0으로 변환되어 덧셈연산실행
document.writeln('bool + 1 : ');
document.writeln(bool + 1); //=>2
document.writeln('<br/>');
//1-3.피연산자의 한쪽이 문자열일 경우,
//나머지 피연산자도 문자열도 변환되어 접합연산실행
document.writeln('str + 13 : ' + (str+13) + '<br/>'); //=>2013
//1-4.피연산자의 한쪽이 객체일 경우,
//객체는 문자열로 변환되고, 나머지 피연산자도 문자열로 변환되어 문자열 접합연산을 실행
document.writeln('obj + 13 : ' + (obj+13) + '<br/><br/><hr>'); //=>[object Object]13
//2.후위증감 연산자
//먼저 피연산자의 값을 반환하고, 피연산자의 값을 1증감시킴
document.writeln('<h2> 후위,전위증감 연산자 </h2>');
var x=3;
var y=x++;
document.writeln('x : ' + x + ', y : ' + y + "<br/>");
//2.전위증감 연산자
var x=3;
var y=++x;
document.writeln('x : ' + x + ', y : ' + y + "<br/><br/><hr>");
//3.대입 연산자
document.writeln('<h2> 대입 연산자 </h2>');
var a=5;
a += 3;
document.writeln('a += 3' + a + "<br/>");
a=5;
a -= 3;
document.writeln('a -= 3' + a + "<br/>");
a=5;
a %= 3;
document.writeln('a %= 3' + a + "<br/><br/><hr>");
//4.복합 연산자
//대입연산자와 비트연산자를 함께 사용
document.writeln('<h2> 복합 연산자 </h2>');
a = 5;
a &= 2; //비트 AND연산을 통해 a가 짝수인지 검사 가능
document.writeln('a &= 2' + a + "<br/>");
a = 5;
a |= 2; //비트 OR연산을 통해 a가 짝수인지 검사 가능
document.writeln('a |= 2' + a + "<br/>");
a = 5;
a ^= 2; //비트 XOR연산을 통해 a가 짝수인지 검사 가능
document.writeln('a ^= 2' + a + "<br/>");
a = 5;
a <<= 2; //shift연산
document.writeln('a <<= 2' + a + "<br/></br><hr>");
//5.비교연산자
document.writeln('<h2> 비교 연산자 </h2>');
var a=5;
var b=3;
var c='5';
document.write('a == b : ' + ( a==b ) + "<br/>"); //a==b : false
document.write('a == c : ' + ( a==c ) + "<br/><br/>"); //a==c : true
document.write('a != b : ' + ( a!=b ) + "<br/>"); //a!=b : true
document.write('a != c : ' + ( a!=c ) + "<br/><br/>"); //a!=c : false
document.write('a >= b : ' + ( a>b ) + "<br/><br/>"); //a>b : true
document.write('a == b : ' + ( a==b ) + "<br/>"); //a==b : false
//==연산자에서 문자열과 숫자를 비교할 경우,
//숫자가 문자열로 변환되어 비교연산 수행함
document.write('a == c : ' + ( a==c ) + "<br/><br/>"); //a==b : true
//===연산자에서 비교연산할 경우,
//데이터 타입변환을 수행하지 않음
document.write('a === c : ' + ( a===c ) + "<br/>"); //a===b : false
document.write('a !== b : ' + ( a!==b ) + "<br/><br><hr>"); //a!==b : true
//6.배열
//==연산자에서 참조형을 비교하는 겅우, 참조값이 같을 경우에만 true반환
document.writeln('<h2> 배열 연산자 </h2>');
var arr1=['aaa', 'bbb', 'ccc'];
var arr2=['aaa', 'bbb', 'ccc'];
//(heap영역에 분배된)배열의 주소가 다르기 때문에 false
document.write('arr1 == arr2 : ' + ( arr1==arr2 ) + "<br/>"); //false
//true가 나온건, 주소가 같아진것
arr2 = arr1;
document.write('arr1 == arr2 : ' + ( arr1==arr2 ) + "<br/><br><hr>"); //true
</script>
</body>
</html>