javascript - 형변환, String 메서드, Array 메서드
javascript 형(type)
javascript는 실행될 때 타입이 결정되는 언어이므로, 정확한 연산이 필요할 때 원하는 타입으로 객체를 초기화하거나, 형변환을 해야한다.
literal
리터럴(literal)이란 소스 코드의 고정된 값을 대표하는 용어로, Javascript에서 값을 나타내기 위해 리터럴을 사용한다.
- 정수
- 10진수, 16진수, 8진수, 2진수 표현
- 부동소수점
[(+|-)][digits][.digits][(E|e)[(+|-)]digits]
- boolean
ture | false
- String
- ‘또는 “로 묶인 0개이상의 문자
[ex]
"foo" 'bar' "one line \n another line"
- 문자열 리터럴 값은 문자 객체의 모든 메서드를 호출 할 수 있다. // “foo”.length <- 3
- ‘또는 “로 묶인 0개이상의 문자
[ex]
- 배열
- var myList = []; // 배열로 초기화
- var myList = [‘one’, , ‘three’] // 지정되지 않은 요소는 undefined
- 빠진 요소의 값은 명시적으로 undefined 선언하는 것이 명확성과 유지보수 측면에서 좋다.
- 객체
- {}로 묶인 0개 이상의 객체 속성-값 쌍 목록.
ex
var car = { manyCars: {a: "Saab", "b": "Jeep"}, 7: "Mazda" }; console.log(car.manyCars.b); // Jeep console.log(car[7]); // Mazda
- {}로 묶인 0개 이상의 객체 속성-값 쌍 목록.
ex
- MDN Javascript Values, variables and literals
- https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Values,_variables,_and_literals
형 변환
타입이 다른 변수끼리 사칙 연산 수행 시
- 는 문자열 우선, 그 외는 숫자를 우선하는 점을 참고한다.
숫자 -> String
- 1 + ““;
- String(1);
- 1.toString();
- (1.123).toFixed(0); // 부동소수점 숫자, 0 -자리수 제한
String -> 숫자
- parseInt(“1”);
- parseFloat(“3.14”);
- “1” * 1
javascript String
- 선언
var x = "John Doe"; var x = 'John Doe';
methods
- length : 배열의 길이 리턴 (메서드는 아니고 프로퍼티이다.)
var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var sln = txt.length; // 26
- indexOf() : 해당 문자열을 첫번째로 만나는 위치를 리턴
var str = "Please locate where 'locate' occurs!";
var pos = str.indexOf("locate"); //7
var pos2 = str.indexOf("locate", 15); // 21
- lastIndexOf() : 뒤에서 부터 탐색하여 처음 만나는 위치 리턴
var str = "Please locate where 'locate' occurs!";
var pos = str.lastIndexOf("locate"); //21
- search() : 문자열 을 검색
var str = "Please locate where 'locate' occurs!";
var pos = str.search("locate"); // 7
- slice(start, end) : start ~ end-1 까지 추출. 음수일 경우, string의 끝부터 추출한다.
var str = "Apple, Banana, Kiwi";
var res = str.slice(7, 13); // Banana
var str = "Apple, Banana, Kiwi";
var res = str.slice(-12, -6); // Banana
- substring(start, end) : slice와 동일하나 음수를 사용할 수 없다.
var str = "Apple, Banana, Kiwi";
var res = str.substring(7, 13); // Banana
- substr(start, length) : start 부터 해당하는 길이만큼 추출. (범위 음수 가능)
var str = "Apple, Banana, Kiwi";
var res = str.substr(7, 6); // Banana
var res2 = str.substr(-4); // Kiwi
- replace() : 해당 문자열을 대체
str = "Please visit Microsoft!";
var n = str.replace("Microsoft", "W3Schools");
/* Please visit W3Schools! */
-
toUpperCase(), toLowerCase() : 대소문자 변경
-
concat() : 첫번째 인자로 받은 구분자로 String을 연결
var text1 = "Hello";
var text2 = "World";
var text3 = text1.concat(" ", text2); // Hello world!
[참고] concat() 메서드가 아닌 + 연산자로 string을 연결했을 때는 원본 string을 수정하는게 아니고, 대체하는 것이다.
- trim() : 좌우 공백제거
var str = " Hello World! ";
alert(str.trim()); // Hello World!
- split() : 인자로 설정한 구분자를 기준으로 String을 배열로 분리해준다.
var txt = "a,b,c,d,e"; // String
txt.split(","); // Split on commas
txt.split(" "); // Split on spaces
txt.split("|"); // Split on pipe
- w3schools - JavaScript String Methods
- https://www.w3schools.com/js/js_string_methods.asp
javasciprt Array
- 선언
var cars = ["Saab", "Volvo", "BMW"];
var cars = new Array("Saab", "Volvo", "BMW");
methods
-
toString() : array를 ,로 구분된 string으로 변환한다.
-
join(“ “) : toString과 유사하며 구분자를 지정한다.
-
pop() : 마지막 요소를 리턴 후 제거
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Kiwi"); // Adds a new element ("Kiwi") to fruits
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var x = fruits.pop(); // the value of x is "Mango"
- push() : array의 마지막 부분에 요소 추가 후 배열의 길이 리턴.
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Kiwi"); // Adds a new element ("Kiwi") to fruits
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var x = fruits.push("Kiwi"); // the value of x is 5
- shift() : 맨 앞의 요소를 리턴 후 삭제
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.shift(); // Removes the first element "Banana" from fruits
- unshift() : 맨앞에 요소를 추가하고, 배열의 길이를 리턴
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.unshift("Lemon"); // Adds a new element "Lemon" to fruits
- delete : 해당 인덱스의 요소 삭제
var fruits = ["Banana", "Orange", "Apple", "Mango"];
delete fruits[0]; // Changes the first element in fruits to undefined
- splice(): 해당 위치부터 n개의 요소를 삭제 (하고 요소를 추가할 수 있다.)
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 0, "Lemon", "Kiwi"); // 2번 위치에서 삭제하지 않고 추가
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(0, 1); // Removes the first element of fruits
- concat() : 배열을 연결하여 리턴
var myGirls = ["Cecilie", "Lone"];
var myBoys = ["Emil", "Tobias", "Linus"];
var myChildren = myGirls.concat(myBoys); // Concatenates (joins) myGirls and myBoys
concat()은 배열을 변경하지 않고 항상 새로운 배열을 리턴한다.
- slice(start, end) : 해당위치의 요소를 포함한 배열을 리턴 (원본을 지우지 않는다.) (end 생략 가능, end-1)
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1);
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1,3); // Orange, Lemon
-
sort() : 요소를 오름차순으로 정렬한다.
-
reverse() : 요소를 내림차순으로 정렬한다.
[주의] sort()는 문자기준으로 정렬한다. 숫자 정렬을 하고 싶을 경우 비교 기준 function을 주어야하는 점에 주의할 것
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
iteration methods
- forEach() : 배열의 각 요소에 따라 파라미터에 해당하는 함수(콜백함수)를 실행한다. ```js var txt = “”; var numbers = [45, 4, 9, 16, 25]; numbers.forEach(myFunction);
function myFunction(value, index, array) {
txt = txt + value + “
”;
}
// txt 에 배열의 모든 요소를 저장.
**[참고]** array의 iteration 메서드를 통해 부르는 function은 value, index, array(해당 array 자신)을 arguments로 취한다. 위 예제의 경우 value만 사용하고 있는데, 이 경우 myFunciton의 파라미터 값으로 value만 받아서 사용해도 된다.
{: .notice--info}
* map() : 각 배열 요소에 function을 수행하여 새 배열을 만들며, _값이 없는 배열 요소에 대한 함수는 실행하지 않는다._ array의 _원본을 변경하지 않고_ 새로운 array를 생성한다.
```js
var numbers1 = [45, 4, 9, 16, 25];
var numbers2 = numbers1.map(myFunction);
function myFunction(value, index, array) {
return value * 2;
}
- filter() : 각 배열 요소에 function의 조건을 만족하는 요소로 이루어진 새 배열을 만든다. ```js var numbers = [45, 4, 9, 16, 25]; var over18 = numbers.filter(myFunction);
function myFunction(value, index, array) { return value > 18; }
* reduce() : 배열 요소에 대해 함수를 실행하여 단일 값을 생성한. 원본 값을 변경하지 않는다. _배열의 합을 구할때 사용._ 좌->우로 실행되며, reduceRight() 메서드는 마지막 인덱스부터 시작한다.
```js
var numbers1 = [45, 4, 9, 16, 25];
var sum = numbers1.reduce(myFunction); // 99
function myFunction(total, value, index, array) {
return total + value;
}
[참고] total은 초기값 || 이전에 반환된 값
- every() : 배열의 모든 요소가 지정조건을 통과하는지 체크한다. ```js var numbers = [45, 4, 9, 16, 25]; var allOver18 = numbers.every(myFunction); // false
function myFunction(value, index, array) { return value > 18; }
* find() / findInder() : 해당 조건을 통과하는 요소의 값/인덱스를 반환한다. (해당하는 요소가 여러개일 경우, 가장 먼저 만족하는 요소를 리턴)
```js
var numbers = [4, 9, 16, 25, 29];
var first = numbers.find(myFunction); // 25
function myFunction(value, index, array) {
return value > 18;
}
var numbers = [4, 9, 16, 25, 29];
var first = numbers.findIndex(myFunction); // 3
function myFunction(value, index, array) {
return value > 18;
}
- w3schools - JS Array Method
- https://www.w3schools.com/js/js_array_methods.asp
- w3schools - JS Array Sort
- https://www.w3schools.com/js/js_array_sort.asp
Comments