var str = 'JavaScript';
// 1. 문자열의 길이
console.log(str.length);
// 2. 특정 문자(지정된 인덱스에 위치하는 문자)
console.log(str.charAt(0));
console.log(str.charAt(str.length - 1));
// 3. 특정 문자열
console.log(str.substring(0, 4)); // 'Java' : 인덱스 0 포함 ~ 인덱스 4 불포함
console.log(str.substring(4)); // 'Script' : 인덱스 4 포함 ~ 끝까지
console.log(str.slice(0, 4)); // 'Java' : 인덱스 0 포함 ~ 인덱스 4 불포함
console.log(str.slice(4)); // 'Script' : 인덱스 4 포함 ~ 끝까지
console.log(str.slice(-10, -6)); // 'Java' : 인덱스 -10 포함 ~ 인덱스 -6 불포함 (마지막 글자의 인덱스 = -1)
console.log(str.slice(-6)); // 'Script' : 인덱스 -6 포함 ~ 끝까지
// 4. 문자열 연결
console.log(str.concat(', ', 'Hello World')); // 'JavaScript, Hello World'
// 5. 특정 패턴으로 시작/특정 패턴으로 끝나는지 검사
console.log(str.startsWith('Java')); // 'Java'로 시작하면 true
console.log(str.endsWith('Script')); // 'Script'로 끝나면 true
// 6. 특정 문자열의 위치(인덱스) 찾기
console.log(str.indexOf('a')); // 1, 'JavaScript'에서 발견된 첫번째 a의 인덱스를 반환
console.log(str.lastIndexOf('a')); // 3, 'JavaScript'에서 발견된 마지막 a의 인덱스를 반환
// 7. 특정 문자열을 주어진 길이가 될 때까지 채우기
console.log(str.substring(0, 4).padEnd(10, '*')); // 'Java******'
console.log(str.substring(4).padStart(10, '*')); // '****Script'
// 8. 주어진 횟수만큼 반복하기
console.log(str.repeat(3));
// 9. 찾아 바꾸기
var str = '192.168.0.101';
console.log(str.replace('.', '_')); // '192.168.0.101' -> '192_168.0.101'
console.log(str.replaceAll('.', '_')); // '192.168.0.101' -> '192_168_0_101'
// 10. 대소문자 변환하기
var str = 'JavaScript';
console.log(str.toLowerCase()); // 'JavaScript' -> 'javascript'
console.log(str.toUpperCase()); // 'JavaScript' -> 'JAVASCRIPT'
// 11. 문자열 앞뒤로 포함된 불필요한 공백 제거하기
var str = ' Java Script ';
console.log('[' + str.trim() + ']');
console.log('[' + str.trimStart() + ']'); // alias 가능 : trimLeft()
console.log('[' + str.trimEnd() + ']'); // alias 가능 : trimRight()
// 12. 문자열 객체의 문자열 값 반환
var str = new String('JavaScript');
console.log(str); // 객체 {'JavaScript'}
console.log(str.valueOf()); // 문자열 'JavaScript'
// 13. 문자열을 분리해서 배열로 만들기
var str = 'Hello tom Nice to meet you!';
var words = str.split(' '); // words = ['Hello', 'tom', 'Nice', 'to', 'meet', 'you!']
console.log(words[1]); // 'tom'
var array = ['travel', 'fitness', 'movie', 'tracking', 'fishing'];
// 1. 반복 메소드
array.forEach(function(element){
console.log(element);
});
array.forEach(function(element, i){
console.log(i + ':' + element);
})
// forEach 메소드에 의해 자동으로 배열 요소가 하나씩 꺼내진 다음 element에 전달
// 인덱스 전달해서 쓰고 싶으면 두번째 매개변수(여기서는 i)로 선언하기
// 첫번째는 배열 요소, 두번째는 인덱스. 순서 지키기
// 2. 필터 (지정한 조건을 만족하는 요소만 남긴 배열 만들기)
// array.filter((요소) => 요소 검사);
var result = array.filter((element) => element.length > 6); // 길이가 6보다 큰 요소만 남긴 배열 반환
console.log(result);
// 3. 배열 요소를 변경하기
// array.map((요소) => 변경할 값)
var array = [1, 2, 3, 4, 5];
var map = array.map((element) => element ** 2); // 모든 요소를 2제곱 값으로 바꾼 배열 반환
console.log(map);
// 4. 배열 요소를 합쳐서 문자열로 반환하기
var array = ['travel', 'fitness', 'movie', 'tracking', 'fishing'];
console.log(array.join()); // 콤마(,)로 연결 (디폴트)
console.log(array.join(' ')); // 공백으로 연결
console.log(Math.abs(-5)); // 5 , -5의 절대값
console.log(Math.ceil(7.1)); // 8 , 7.1의 정수 올림값
console.log(Math.ceil(-7.1)); // -7 , -7.1의 정수 올림값
console.log(Math.floor(7.1)); // 7 , 7.1의 정수 내림값
console.log(Math.floor(-7.1)); // -8 , -7.1의 정수 내림값
console.log(Math.round(7.1)); // 7 , 7.1의 정수 반올림
console.log(Math.round(-7.1)); // -7 , -7.1의 정수 반올림
console.log(Math.trunc(7.1)); // 7 , 7.1의 소수점 절사
console.log(Math.trunc(-7.1)); // -7 , -7.1의 소수점 절사
console.log(Math.max(1, 2, 3, 4, 5)); // 5, 주어진 값 중 가장 큰 값
console.log(Math.min(1, 2, 3, 4, 5)); // 1, 주어진 값 중 가장 작은 값
var array = [1, 2, 3, 4, 5];
console.log(Math.max(...array)); // 5, 배열의 요소 중 가장 큰 값
console.log(Math.min(...array)); // 1, 배열의 요소 중 가장 작은 값
console.log(Math.pow(2, 3)); // 8, 2의 3제곱
console.log(Math.random()); // 0 <= 난수 < 1
console.log(Math.sqrt(25)); // 5, 루트 25
this 키워드로 확인할 수 있다.하나의 이벤트 타입은 하나의 이벤트 리스너만 가질 수 있다.
형식
1) 선언 함수
2) 익명 함수 (추천!)
//선언
function 함수명(){
}
문서객체.onclick = 함수명;
//익명
문서객체.onclick = function(){
}
// 익명함수 사용
/*
1. 이벤트 대상 : document.getElementById('box')
event.target
this
2. 이벤트 타입 : click
3. 이벤트 리스너 : function(event){}
4. 이벤트 객체 : event
*/
document.getElementById('box1').onclick = function(event){
// event.target.style.fontSize = '32px';
this.style.fontSize = '32px';
}
function 함수명(){
}
문서객체.addEventListener('click', 함수명);
2) 익명 함수 (추천!)
문서객체.addEventListener('click', function(event){
});
this.style.fontSize = '32px';
});
document.getElementById('box2').addEventListener('click', function(event){
this.style.color = 'crimson';
});
function 함수명(){
}
<div onclick="함수명()"></div>
2) JavaScript 코드
<div onclick="alert('메시지')"><div>
<a> 태그를 클릭하면 href 속성으로 이동한다.<form> 태그를 서브밋하면 <form> 태그의 모든 입력 요소들을 action 속성으로 가지고 간다.html
<ul id="site">
<li><a href="https://www.google.com/">구글</a></li>
<li><a href="https://www.naver.com/">네이버</a></li>
<li><a href="https://www.daum.net/">다음</a></li>
</ul>
js
var sites = document.querySelectorAll('#site a');
// sites는 <a> 태그 3개가 저장된 배열이다.
sites.forEach(function(element){
// element에는 sites 배열에 저장된 <a> 태그가 1개씩 전달된다.
element.addEventListener('click', function(event){
// 이벤트 방지를 위해서 event 객체를 매개변수로 선언한다.
if(this.href.endsWith('.net/')){
// this는 element(<a> 태그)를 의미한다. href는 속성(프로퍼티)이다.
event.preventDefault();
// 기본 이벤트가 방지된다.(<a> 태그는 링크 이동이 되지 않는다.)
}
})
})
다음은 .net으로 끝나니까 이벤트 방지 처리돼서 클릭 후 이동이 안됨.
<!-- 문제1. 서브밋 방지하기 -->
<div id="wrap1">
<form action="https://search.naver.com/search.naver" id="frm">
<div>
<input type="text" id="query" name="query">
<button type="submit">네이버 검색</button>
</div>
</form>
</div>
<script>
// 주의! 서브밋은 <form> 태그가 이벤트 대상 (<button> 태그가 아님)
document.getElementById('frm').addEventListener('submit', function(event){
// 검색어가 비어 있으면 서브밋 방지
if(document.getElementById('query').value === ''){
alert('검색어는 필수입니다.');
event.preventDefault();
}
})
</script>