728x90

rest parameter

함수 (...작명){ }

...작명을 하면 파라미터를 여러개 받을 수 있고

함수 (x,...작명){ }
함수 (x,y...작명){ }

x,...작명 은 필수적으로 한개의 파라미터가 필요한다는 의미이다.
x,y,...작명 는 필수적으로 3개의 파라미터가 필요하다는 의미.

...작명 (rest parameter)를 사용할려면 파라미터를 명시하는 곳에서 제일 마지막에 선언하면 된다.

그리고 rest 파라미터자리에 집어넣은 값들은 전부 [ ] 안에 담긴다.


Spread operator

자바스크립트에서 ...을 쓰는 또다른 기능중 하나는 배열이나 오브젝트를 벗길때 사용하는 Spread operator가 있다.

let arr = [1,2,3];
let arr2 = [4,5];
let arr3 = [...arr, ...arr2]
console.log(arr3 //[1, 2, 3, 4, 5]

를 해보면 결과는 [1, 2, 3, 4, 5] 로 나온다.


설명 참조

https://sgcomputer.tistory.com/152

 

자바스크립트 함수와 매개변수, 인수

매개변수의 타입 자바 스크립트에서 함수를 정의할 때 매개 변수의 타입은 따로 명시하지 않는다. 어차피 변수 자체도 타입을 명시하지 않기 때문에 전달되는 파라미터 값도 데이터를 가려받진

sgcomputer.tistory.com

 

728x90
728x90

startWith()

str.startWith(searchString, position)
어떤 문자열이 특정 문자로 시작하는지 확인하여 결과를 true 혹은 false로 반환

var name = '김동현';

console.log(name.startsWith('김')); //name의 0번째 자리가 '김'인지
console.log(name.startsWith('동',1)); //name의 1번째 자리가 '동'인지


some()

조건에 true가 1개라도 있으면 true, 없으면 false

var nameArray = [
    '김동현', '강호동', '박민기',
    '고민정', '황철순', '지피티',
    '강경원', '박동현', '안철수',
    '김민수', '이준기', '박동훈'
]

var tempData = nameArray.some((item)=>{ //nameArray중에 '김'으로 시작하는 데이터가 있나?
    return item.startsWith('김')
    });

console.log(tempData);

 


every()

모든 데이터가 조건에 맞는지 확인
예를들면 아래 데이터 중에 모든 사람이 김씨인가? => false

var nameArray = [
    '김동현', '강호동', '박민기',
    '고민정', '황철순', '지피티',
    '강경원', '박동현', '안철수',
    '김민수', '이준기', '박동훈'
]

var tempData = nameArray.every((item)=>{  //모든 데이터가 '김'으로 시작하는가?
	return item.startsWith('김')
    });

var tempData2 = nameArray.every((item)=>{ //모든 데이터의 길이가 0보다 큰가?
	return item.length > 0
    });

console.log(tempData); //false
console.log(tempData2); //true


forEach()

for문처럼 배열에 있는걸 다 돌린다.
근데 멈추는거 없고 그냥 다 돌려버린다.

var nameArray = [
    '김동현', '강호동', '박민기',
 ]
nameArray.forEach((item, index)=>{
    console.log(item, index);
});


 

map()

map는 array를 리턴한다.

var nameArray = [
    '김동현', '강호동', '박민기',
    '고민정', '황철순', '지피티',
    '강경원', '박동현', '안철수',
    '김민수', '이준기', '박동훈'
 ]
 
var tempData = nameArray.map((item)=>{
    return item
})

console.log(tempData);

ex) 배열안의 여러 데이터 중에서 예를들어 이름이라던지, 나이라던지 하나의 데이터만 뽑아와서 배열을 만들 수 있다.
엄청 많은 데이터 중에서 원하는 데이터만 뽑아서 새로 데이터를 만들어서 작업 가능


filter()

var nameArray = [
    '김동현', '강호동', '박민기',
    '고민정', '황철순', '지피티',
    '강경원', '박동현', '안철수',
    '김민수', '이준기', '박동훈'
 ]
var tempData = nameArray.filter((item)=>{
    return item.startsWith('김');
})

console.log(tempData);


 

728x90
728x90

리턴값으로 무슨타입인지 string 으로 알려준다.

근데 배열도 object로 알려준다.

그래서 타입이 배열인지 확인하기 위해서는 isArray() 를 사용해야한다.


Array.isArray() 를 사용하면된다.
그럼 아래 사진처럼 리턴값으로 true, false를 반환한다.

 

728x90
728x90

첫번째 인자는 배열의 인자값,
두번째 인자는 그 인자값의 인덱스 (몇번째인지),
세번째 인자는 배열이 찍힌다. (현재는 testArray의 배열이 그대로 찍힌다.)


1~5까지 있는 배열에서 3보다 큰수만 골라내 보면

 1.위에 처럼 하면 된다.

2.근데 보통 위 사진 처럼  function을 따로 빼서 만든다.

3.애로우 펑션을 쓰면 이렇게....


var filterTest = [
    {name:'김동현', age:'31', position:'대리', sex:'남'},
    {name:'이준기', age:'20', position:'사원', sex:'남'},
    {name:'운지기', age:'45', position:'과장', sex:'여'},
    {name:'지피티', age:'35', position:'대리', sex:'여'},
    {name:'김계란', age:'65', position:'사장', sex:'남'},
    {name:'각선미', age:'22', position:'사원', sex:'남'},
    {name:'김수란', age:'26', position:'주임', sex:'여'},
    {name:'아이유', age:'26', position:'가수', sex:'여'},
    {name:'박박박', age:'36', position:'과장', sex:'남'},
    {name:'박오십', age:'55', position:'부장', sex:'남'},
    {name:'박동현', age:'32', position:'대리', sex:'남'},
    {name:'김대리', age:'28', position:'대리', sex:'여'},
    {name:'유대리', age:'30', position:'대리', sex:'여'},
    {name:'최대리', age:'29', position:'대리', sex:'남'},
    {name:'이주임', age:'27', position:'주임', sex:'여'},
    {name:'문주임', age:'30', position:'주임', sex:'남'},
    {name:'박사원', age:'23', position:'사원', sex:'여'},
    {name:'김사원', age:'26', position:'사원', sex:'남'},
    ]


   var testJson = JSON.stringify(filterTest);

json형태의 데이터가 있으면 filter를 이용해서 원하는 데이터만 뽑아낼 수있다.

남자이면서 대리 인 조건을 하면 위에 처럼된다.


thisArg 매개변수? 하는데 이렇게 사용할 수 도 있다.

 

 

 

참고 

https://aljjabaegi.tistory.com/312

 

javascript filter 함수에 대해 알아보자 자바스크립트 filter 함수

javascript filter 함수에 대해 알아보자 자바스크립트 filter 함수 지난 포스팅에서 자바스크립트 고차함수(High-Order_Function) 중 reduce에 대해 알아보았습니다. Link : javascript reduce 함수에 대해 알..

aljjabaegi.tistory.com

 

728x90
728x90

자바스크립트에서 함수를 선언하는 방법중에 함수 선언식, 함수표현식, 화살표 함수 란게 있다

함수 선언문은 함수의 이름을 꼭 써야 한다.

function 함수명() {
	구현로직
}

 

함수 표현식은 익명 함수표현식과, 기명 함수표현식으로 나뉜다.
말그대로 함수 이름이 있냐 없냐 차이다.

let test1 = function(){
	return '익명 함수표현식';
}

let test2 = function test2(){
	return '기명 함수표현식';
}

 


왜 이렇게 다르게 사용하느냐?

함수 선언식은 호이스팅의 영향을 받지만
함수 표현식은 호이스팅의 영향을 받지 않기 때문이다.

개발할때보면 내가 의도치 않게 함수가 먼저 읽히거나 실행되서 의도하지 않은 동작이 이뤄질 수 있다.
그걸 방지 할려면 함수 선언문과 표현식을 잘 구분해서 사용하면 되겠다.

호이스팅이란?
JavaScript 호이스팅은 인터프리터가 코드를 실행하기 전에 함수, 변수, 클래스 또는 임포트(import)의 선언문을 해당 범위의 맨 위로 이동시키는 과정
https://developer.mozilla.org/ko/docs/Glossary/Hoisting

 

호이스팅 - MDN Web Docs 용어 사전: 웹 용어 정의 | MDN

JavaScript 호이스팅은 인터프리터가 코드를 실행하기 전에 함수, 변수, 클래스 또는 임포트(import)의 선언문을 해당 범위의 맨 위로 이동시키는 과정을 말합니다.

developer.mozilla.org


   //testFunc(); 에러

    let testFunc = function() {
        console.log('1');
    }
    
    testFunc(); //1출력

함수표현식으로 만든 trstFunc를 선언하기전에 먼저 불러내면 (함수보다 윗줄에서 호출하면)
testFunc is not a function 이라는 에러메세지가 나온다.

​하지만

testtt(); //2 출력

function testtt(){
	console.log('2');
}

testtt(); //2출력​

함수 선언문을 사용하면 함수를 선언한 줄 보다 위에 호출해도 2가 잘 출력된다

이게 호이스팅이다.


​그럼 각각의 장점을 알아보자

함수표현식의 장점
1. 호이스팅의 영향을 받지 않는다
2. 클로저로 사용한다.
3. 콜백으로 사용한다. (다른 함수의 인자로 넘길 수 있다.)

 

 

 출처

https://gmlwjd9405.github.io/2019/04/20/function-declaration-vs-function-expression.html

 

[JavaScript] 함수선언문과 함수표현식의 차이 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

https://ko.javascript.info/new-function

728x90

'JavaScript' 카테고리의 다른 글

[javaScript] 타입확인 typeof, isArray()  (0) 2022.08.04
filter 사용법  (0) 2022.06.10
호이스팅 (Hoisting)  (0) 2022.05.08
[javaScript] name을 이용한 데이터 저장  (0) 2021.08.27
[jquery] 정리해야 할거  (0) 2021.08.20
728x90
  • 호이스팅(Hoisting)의 개념
    1. 함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효범위의 최상단에 선언하는 것
    2. 인터프리터가 변수와 함수의 메모리 공간으 선언 전에 미리 할당하는 것
    3. 코드를 실행하기 전 변수선언/함수선언을 해당 스코프의 최상단으로 끌어올리는게 아니라
       코드를 실행하기 전 변수선언/함수선언이 해당 스코프의 최상단으로 끌어 올려진 것 같은 현상
    4. var을 통해 정의된 변수의 선언문을 유효범위의 최상단으로 끌어올리는 행위 = '선언과 할당의 분리'
    5. var로 선언한 표현식이나 function 선언문 등을 실행단계에서 해당 Scope의 맨 위로 올리는 것

 

  • 호이스팅을 하는 이유
    변수생성과 초기화(선언과 할당)가 분리되어 진행되기 때문이다.

 

  • var와 함수 선언식만 호이스팅의 대상이 된다.
    let, const, 함수 표현식으로 선언한 함수는 호이스팅이 적용되지 않는다.

 

출처

https://developer.mozilla.org/ko/docs/Glossary/Hoisting

https://gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html

https://hanamon.kr/javascript-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85%EC%9D%B4%EB%9E%80-hoisting/

https://yuddomack.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85Hoisting

https://simplejs.gitbook.io/olaf/09.-hoisting

https://tibetsandfox.tistory.com/23

728x90
728x90

예제1

<table>
	<input type="text" class="sample" id="a1" name="inputVal" value="1">
	<input type="text" class="sample" id="a2" name="inputVal" value="2">
	<input type="text" class="sample" id="a3" name="inputVal" value="3">
	<input type="text" class="sample" id="a4" name="inputVal" value="4">
</table>

예를들어 위에 처럼 테이블이 있다 치면 각 다른 id값을 이용해 데이터 값을 받아올 수 있지만 그렇게 되면 코드가 길어지고 id값을 하나씩 정하기 귀찮아진다.

그래서 name값을 이용해 자바스크립트의 배열에 저장할 수 있다.

var param = [];
var sampleArr = $('[name="inputVal"]');

for ( var i = 0 ; i < sampleArr.length ; i++ ) {
	param.push(sampleArr[i].value);
}

var sampleStr = '';

param.map(function(item){
	sampleStr += item + ',';
});
//마지막 구분점 지우기
sampleStr = sampleStr.substr( 0 , sampleStr.lastIndexOf(',') );

이렇게 하면 sampleStr에 값들이 하나씩 들어가 "값1, 값2, 값3, 값4" 이런식의 하나의 문자열이 된다.
이걸 split으로 나눠서 반복문으로 값을 나눠서 이용해도 되고

[ "값1" , "값2" , "값3" , "값4" ] 이렇게 배열로 값이 들어간 param을 이용해도 된다.

 

근데 여기서 구분점을 ,로 했는데 정규표현식을 검색해서 ^나 |, \ 처럼 일상생활에서 잘 안쓰이는 문자를 구분점으로 사용해야 한다.
쉼표(.)를 구분점으로 사용하면 데이터를 입력하는중 , 를 만나면 구분점으로 인식되어 우리가 원하는 대로 데이터가 들어가지 않게 된다.


Stgring getStr = (request.getParameter("변수명"));

Sgtring[] getStrAry = getStr.split(",", -1);

자바소스에서 위에처럼 해주면 앞에서 받아온 문자열을 배열 getStrAry에 담을 수 있다.

 


예제2

<table>
	<input type="text" class="sample" id="a1" name="STR_NAME">
	<input type="text" class="sample" id="a2" name="STR_CTNT">
    
    <input type="text" class="sample" id="a3" name="STR_NAME">
	<input type="text" class="sample" id="a4" name="STR_CTNT">
    
    <input type="text" class="sample" id="a5 name="STR_NAME">
	<input type="text" class="sample" id="a6" name="STR_CTNT">
    
    <input type="text" class="sample" id="a7 name="STR_NAME">
	<input type="text" class="sample" id="a8 name="STR_CTNT">
</table>

첫번째 꺼는 input하나의 값을 받아온느 거였는데 바로 위에 table처럼 받아와야 하는 값이 2개면

배열 param에 객체를 담으면 된다

var param = [];
var sampleArr1 = $('[name="STR_NAME"]');
var sampleArr2 = $('[name="STR_CTNT"]');

for ( var i = 0 ; i < sampleArr1.length ; i++ ) {
	var obj = {};
    obj.name = sampleArr1[i].value;
    obj.ctnt = sampleArr2[i].value;
	param.push(obj);
}

var nameStr = '';
var ctntStr = '';

param.map(function(item){
	nameStr += item + '|';
    ctntStr += item + '|';
});
//마지막 구분점 지우기
nameStr = nameStr.substr( 0 , nameStr.lastIndexOf('|') );
ctntStr = ctntStr.substr( 0 , ctntStr.lastIndexOf('|') );

이렇게 하면 nameStr과 ctntStr에 첫번째 예시 처럼 값이 문자열로 들어간다.

 

 


예제3

<table>
	<input type="text" class="sample" data-set="한국어" id="a1" name="STR_NAME">
	<input type="text" class="sample" data-set="한국어" id="a2" name="STR_CTNT">
    
    <input type="text" class="sample" data-set="영어" id="a3" name="STR_NAME">
	<input type="text" class="sample" data-set="영어" id="a4" name="STR_CTNT">
    
    <input type="text" class="sample" data-set="일본어" id="a5 name="STR_NAME">
	<input type="text" class="sample" data-set="일본어" id="a6" name="STR_CTNT">
    
    <input type="text" class="sample" data-set="중국어" id="a7 name="STR_NAME">
	<input type="text" class="sample" data-set="중국어" id="a8 name="STR_CTNT">
</table>

data 커스텀도 응용할 수 있다.

var param = [];
var sampleArr1 = $('[name="STR_NAME"]');
var sampleArr2 = $('[name="STR_CTNT"]');

for ( var i = 0 ; i < sampleArr1.length ; i++ ) {
	var obj = {};
    obj.lang = sampleArr1[i].getAttribute("data-set");
    obj.name = sampleArr1[i].value;
    obj.ctnt = sampleArr2[i].value;
	param.push(obj);
}
var langStr = '';
var nameStr = '';
var ctntStr = '';

param.map(function(item){
	langStr += item + '|';
	nameStr += item + '|';
    ctntStr += item + '|';
});
//마지막 구분점 지우기
langStr = nameStr.substr( 0 , nameStr.lastIndexOf('|') );
nameStr = nameStr.substr( 0 , nameStr.lastIndexOf('|') );
ctntStr = ctntStr.substr( 0 , ctntStr.lastIndexOf('|') );

이렇게 하면  param에는 obj ={ lang, name, ctnt } 이렇게 3개의 값이 들어간 객체가 배열에 저장된다.

 


응용을 하자면 data 커스텀값을 위에서 처럼 읽어와 값이 영어일떄, 한국어 일때 같이 조건문을 줘서

param1, param2, param3 이런식으로 각각의 배열에 저장후 데이터를 저장할 수 있다.

근데 단점은 name값을 전부다 가져오기 때문에 중간에 필요없는거는 안가져오고 싶어도 가져오게 된다.

 

 

 


name 값을 이용해 값을 배열에 저장하기

728x90
728x90

id, name, class 지정하기

$('#id')
$('.class')
$('input[name=name]')

$('[name="샘플"]') 해도 값 불러올 수 있는데 이렇게 되면 name이 샘플인 value들을 전부 배열로 받는다.
만약 데이터를 받는 변수를 배열로 지정 안해주면 name이 샘플인 것중 마지막에 있는 value만 받지 않을까?

input에서 데이터 커스텀을 이용한다면
$( '[name="샘플"] [data-set="값1"] [data-set2="값2"]' ).val() 
이런식으로 name이 샘플인 것 중에서 data-set이 값1, 값2인 것들의 value만 받아올 수 있다.

 

 


select의 option 지우기

첫번째 select값에 따라서 다음 select박스의 값을 바꿔야 할때 기존 내용을 지우고 데이터를 다시 입력해야 한다.

http://www.clserver.co.kr/blog/jquery-remove-select-option/

 

[jQuery] select 의 option 제거하기 | 클서버 호스팅

[jQuery] select 의 option 제거하기 jQuery 를 이용해서 select 에 있는 option 을 제거하는 방법입니다. 모든 option 제거 $('#select_id').children('option').remove(); 첫번째 option 을 뺸 나머지 제거 $('#select_id').children(

www.clserver.co.kr


클릭말고 select박스에서 값이 변경 되었을때 이벤트 걸기

클릭이벤트를 걸면 데이터를 선택하기도 전에 
그냥 누르기만 하면 이벤트가 걸린다.
select박스에서 값이 선택되서 값이 change되면 이벤트가 걸리게

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=chsmanager&logNo=220269409239 

 

jQuery selectbox change event(이벤트), select, value, text, size 제어

jQuery 란 모든 개체를 일관되고 다루기 쉽게 해주는 자바스크립트 라이브러리로 CSS 기반의 DOM 요...

blog.naver.com


데이터 붙이기

$(id나 name값).append( $( '<option value="값">데이터1</option>') );

$('#id')
$('.class')
$('input[name=name]')


자식요소 찾기

https://androman.tistory.com/39

 

[jQuery] 자식 요소를 찾는 children() , + find()

jQuery를 사용하여 특정 선택자를 기준으로 자식 요소들을 어떻게 찾을 수 있을까? --> 바로 아래 요소, 즉 자식 요소만 탐색할때는 children()을 사용, 자식 및 하위 태그 모두에서 찾을 때는 find()를

androman.tistory.com

대부분의 jQuery 메서드와 마찬가지로 children() 함수는 텍스트 노드를 반환하지 않습니다.

- 텍스트 및 주석 노드를 포함한 모든 하위 항목을 가져 오려면 contents()함수를 사용해야 합니다.

https://sas-study.tistory.com/174?category=780544 

 

[JQuery] 제이쿼리, 선택자 종류 및 사용법!

CSS : 1.태그검색 -> 2. 속성제어 - javascript : 1. 태그검색 -> 속성,PCDATA,CSS제어 - jQuery : 1. 태그검색(BOM,DOM) -> 개량 -> 2 속성, PCDATA, CSS 제어 개량 div 태그에 모두 글자색 red 주기 1. DOM 1 2..

sas-study.tistory.com

https://chanhuiseok.github.io/posts/java-3/

 

자바(JAVA) - exception의 종류와 예외 처리(Exception Handling, try-catch)

컴퓨터/IT/알고리즘 정리 블로그

chanhuiseok.github.io

 

728x90

+ Recent posts