<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>자바스크립트 내장함수</title>
</head>
<body>
<h1>자바스크립트 내장객체</h1>
<h2>개요</h2>
<p>자바스크립트에서 기본적으로 제공하는 객체에 포함된
여러가지 함수들에 대해 알아봄</p>
<p>자바스크립트의 내장객체는 크게 3가지로 분류:
native 객체, host 객체, 사용자정의 객체</p>
<h2>Native 객체</h2>
<p>ECMAscript 규격에 따라 정의된 객체</p>
<p>Object, String, Number, Function, Array,
Date, Math, RegExp 등이 제공됨</p>
<p>이러한 객체는 전역객체(global object) 라고도 불림</p>
<h2>Fuction</h2>
<p>함수 정의시 사용</p>
<script>
let add = new Function('a', 'b', 'return a+b');
document.write(add(10,10));
</script>
<h2>String</h2>
<p>문자열을 효율적으로 다룰 수 있게 해줌</p>
<p>String 객체는 기본적으로 불변immutable(변경불가) 객체임 </p>
<p>문자열은 기본적으로 문자열 상수풀을 이용해서 관리함 </p>
<script>
let str1 = 'Hello, World!!';
let str2 = new String('Hello, World!!');
let str3 = 'Hello, World!!';
let str4 = new String('Hello, World!!');
document.write(str1,'<br>');
document.write(str2,'<br>');
document.write(str1 === str2, ' '); //문자열 ===비교시엔 주소를 비교함
document.write(str1 === str3, ' '); // 같은 주소
document.write(str2 === str4, ' '); // string은 주소가 고유
document.write( //문자열은 문자들로 구성된 배열임
str1[0],' ', str1[1], ' ', str1[2], '<br>');
//문자열은 불변이므로 개별 문자는 수정불가!
str1[0] = 'h';
document.write(str1,' ' );
str1='h' + str1.slice(1);
str1b = ['H','e','l','l','o'];
document.write(str1b,'<br>');
</script>
<hr>
<script>
// length : 문자열 길이 반환
document.write(str1, ' ', str1.length, '<br>');
// indexOf(찾는문자열) : 특정 문자열의 존재여부(위치) 확인
document.write(str1.indexOf('World'),'<br>' ); //7은 존재하는 위치
document.write(str1.indexOf('java'),'<br>' ); //-1은 없다는 뜻
// lastIndexOf(찾는문자열) : 마지막에 발견된 문자열의 존재여부(위치) 확인
str5 = 'Hello, World!! Hello, World!!';
document.write(str5.lastIndexOf('World'),'<br>' );
document.write(str5.indexOf('World', 14),'<br>' ); //시작위치 지정가능
// slice (시작, 끝-1) : 지정한 범위내 문자열 추출
// str5에서 world만 추출
document.write(str5.slice(7,12), '<br>');
// str5에서 !!만 추출
document.write(str5.slice(27), '<br>');
</script>
<hr>
<script>
//주민번호를 입력하면 성별을 판별하여 출력
// let jumin = prompt('주민번호');
// if (jumin.slice(7,8) == 1) {
// document.write(`${jumin.slice(7,8)}, 남자 <br> `);
// } else if (jumin.slice(7,8) == 2) {
// document.write(`${jumin.slice(7,8)}, 여자 <br> `);
// }
let checkGender = (jumin) => {
gender = '';
switch (parseInt(jumin.slice(7, 8))) {
case 1 : gender = '2000년 이전 남자'; break;
case 2 : gender = '2000년 이전 여자'; break;
case 3 : gender = '2000년 이후 남자'; break;
case 4 : gender = '2000년 이후 여자'; break;
default : gender = '잘못된 주민번호';
}
return gender;
}
document.write(checkGender('123456-100000'), '<br>');
document.write(checkGender('123456-900000'), '<br>');
</script>
<hr>
<script>
// substring() : slice() 동일하나 양수만 지원(뒤에서부터 찾기 x)
let jumin = '123456-1234567';
document.write(jumin.substring(7,8), '<br>');
document.write(jumin.substring(-1)); // 작동 x
// substr(시작위치, 추출할 문자길이)
document.write(jumin.substr(7, 1),'<br>');
// replace(찾을문자, 대체문자)
'Hello, World!! Hello, Again!!';
document.write(str5.replace('Hello', 'Hi' ), '<br>'); //첫째만 바뀜
document.write(str5.replace(/Hello/g, 'Hi' ), '<br>');
//찾을 문자열을 정규표현식 형태로 작성하고
// 찾을 범위를 지정하면 모든 문자를 대상으로 바꿔줌
str5 = 'Hello, World!! hello, Again!!';
document.write(str5.replace(/Hello/ig, 'Hi' ), '<br>');
// 대소문자 상관없이 global로 바꾸려면
// insenstive 약자 i를 추가지정
//toUpperCase , toLowerCase : 대소문자 변환
document.write(str5.toUpperCase(), '<br>');
document.write(str5.toLowerCase(), '<br>');
// concat : 문자열 연결해 하나의 문자열로 합침
let str6 = 'Hello ';
let str7 = 'World';
document.write(str6.concat(', ',str7, '<br>'));
// trim : 앞뒤 공백문자 제거
let num = ' 12345 ';
document.write(num + 67890,'<br>');
document.write(num.trim() + 67890,'<br>');
document.write(Number(num),'<br>');
document.write(parseInt(num),'<br>');
// trim을 쓰지 않더라도 자동으로 제거 후 형변환
// padStart , padEnd : 문자열 앞/뒤 에 지정한 길이만큼 문자 추가
let age = '5'; // 전체자리 5자리, 나머지 0으로 채움
document.write(age.padStart(5,0),'<br>' );
document.write(age.padEnd(5,0),'<br>' );
</script>
<script>
//대학교 학번코드는 입학년도(2자리) + 학과번호(4자리) + 개인번호(6자리)로 구성
// 입학년도 2022, 학과번호 35, 개인번호 157일때 학번코드 작성
ip = '2022';
hak = '35';
ga = '157';
document.write(
ip.slice(2).concat( hak.padStart(4,0), (ga.padStart(6,0)) ), '<br>' );
document.write( ip.slice(2,5), hak.padStart(4,0), ga.padStart(6,0),'<br>' );
// 년월일시분호를 다음의 형식으로 작성하세요.
// 2022-06-09 03:39:05
</script>
<hr>
<script>
//chatAt(위치): 지정한 위치에 해당하는 문자 추출
// 'Hello, World!! hello, Again!!'
document.write(str5.charAt(0), ' ' ,str5.charAt(7) , '<br>');
// split(구분문자): 문자열을 구분 문자를 사용해서
// 각각의 문자열로 분리해서 배열로 반환
let today = '2022-06-09 15:44:43'
document.write(today.split(' ') [0], ' / ' );
document.write(today.split(' ') [1], '<br>' );
// 년월일 추출
let ymd = today.split(' ')[0];
let date = ymd.split('-');
document.write( date[0], ' ',
date[1], ' ', date[2], '<br>' );
// 시분초 추출
let si = today.split(' ')[1];
let ch = si.split(':');
document.write(ch[0], ' ',
ch[1], ' ', ch[2] , '<br>');
// repeat : 문자열 지정한 횟수만큼 반복 - ES5추가됨
document.write( str6.repeat(10), '<br>' );
</script>
<h2> Number </h2>
<p>숫자를 다룰때 유용한 함수 제공</p>
<script>
//toFixed(소수자리수) : 소수점 이하 출력할 자리수 지정
num = 3.141592;
document.write(num.toFixed(2), '<br>')
</script>
<h2> Math </h2>
<p>수학적 상수와 기타 함수제공</p>
<script>
// round : 반올림 함수
document.write(Math.round(num), '<br>');
// ceil : 무조건 올림 함수
document.write(Math.ceil(num), '<br>');
// floor : 무조건 내림 함수
document.write(Math.floor(num), '<br>');
</script>
<hr>
<script>
// random : 0보다 크고 1보다 작은 실수 값을 하나 생성
let rnd = Math.random();
document.write(rnd ,'<br> ');
document.write('random x 10 => ', parseInt(rnd * 10 ) ,'<br> ');
document.write('random x 10 => ', parseInt(rnd * 10 ) +1 ,'<br> '); //0~10까지
document.write('random x 100 => ', parseInt(rnd * 100 ) ,'<br> ');
// 1 ~ 45 사이 임의의 정수
document.write('random x 10 => ', (parseInt(rnd * 100 )-11)/2 +1 ,'<br> ');
// 특정범위의 임의의 정수 생성 공식
// floor(random * (max - min + 1)) + min
// 1~45 사이 임의의 정수 생성
lotto = Math.floor( Math.random() * (45 - 1 + 1) + 1 );
document.write(lotto, '<br>');
// 로또 생성 함수
let randInt = (mx, mm) => Math.floor( (Math.random() * (mx - mm + 1) ) + mm );
for (let i = 1; i<=6; ++i )
document.write(randInt( 1, 45 ) , ' ');
</script>
<hr>
<script>
// 주민번호를 하나 입력받아
// 올바른 주민번호인지 여부를 출력하는 함수 작성
// 1) 주민번호 앞부터 12자리(지역번호까지)까지 각 자리를 2~9까지 곱한다.
// 2) 계산되어 나온 숫자를 모두 더한다.
// 3) 더한 숫자를 11로 나눈 나머지를 구한다.
// 4) 11에서 나머지를 뺀 값의 마지막 숫자와 13번째 숫자 일치여부 확인
jumin = '999999-1000002';
let sum = 0;
let result = '올바르지 않은 주민번호입니다. ';
sum += parseInt(jumin[0]) * 2;
sum += parseInt(jumin[1]) * 3;
sum += parseInt(jumin[2]) * 4;
sum += parseInt(jumin[3]) * 5;
sum += parseInt(jumin[4]) * 6;
sum += parseInt(jumin[5]) * 7;
sum += parseInt(jumin[7]) * 8;
sum += parseInt(jumin[8]) * 9;
sum += parseInt(jumin[9]) * 2;
sum += parseInt(jumin[10]) * 3;
sum += parseInt(jumin[11]) * 4;
sum += parseInt(jumin[12]) * 5;
sum = sum % 11
code = (11 - sum) % 10;
if (code == parseInt(jumin[13])) {
result = '올바른 주민번호입니다.';
}
document.write(code, ' / ' , jumin[13], ' / ', result);
</script>
<hr>
<script>
sum = 0;
let w = [2,3,4,5,6,7, 0, 8,9,2,3,4,5];
//
// for (let i = 0; i < w.length; ++i )
// if (i != 6 )
// sum += parseInt(jumin[i]) * w[i];
for (let [idx, val] of w.entries() ) {
if (val != 0)
sum += parseInt(jumin[idx]) * val;
}
// [idx순번, val값]
code = (11 - (sum % 11)) % 10;
if (code == parseInt(jumin[13])) {
result = '올바른 주민번호';
}
document.write(code, ' / ' , jumin[13] )
</script>
<hr>
<script>
let checkJumin = (jumin) => {
sum = 0;
let w = [2,3,4,5,6,7, 0, 8,9,2,3,4,5];
for (let [idx, val] of w.entries() ) {
if (val != 0)
sum += parseInt(jumin[idx]) * val;
}
code = (11 - (sum % 11)) % 10;
return code == parseInt(jumin[13])
};
document.write(checkJumin('111111-1111114'), '<br>');
document.write(checkJumin('111111-1111118'), '<br>');
</script>
</body>
</html>