[Javascript log] 자료구조와 자료형(1)

원시값과 메서드

원시값 : 문자열, 숫자,bigint,boolean, symbol, null, undefined
자바스크립트는 원시값을 마치 객체처럼 다룰 수 있게 해준다. 원시값에서도 객체에서처럼 메서드를 호출할 수 있다.

객체의 장점 중 하나는 함수를 프로퍼티로 저장할 수 있다는 것.
자바스크립트는 날짜, 오류, html 요소등을 다룰 수 있는 다양한 내장객체를 제공하는데 이 객체들은 고유한 프로퍼티와 메서드를 가진다. -> 시스템 자원이 많이 소모된다.

1) 원시값은 원시값 그대로 남겨둬 단일 값 형태를 유지한다.
2) 문자열, 숫자, 불린, 심볼의 메서드와 프로퍼티에 접근할 수 있도록 언어 차원에서 허용한다.
3) 이를 가능하게 하기 위해, 원시값이 메서드나 프로퍼티에 접근하려 하면 추가 기능을 제공해주는 특수한 객체, "원시 래퍼 객체(object wrapper)"를 만들어준다. 이 객체는 곧 삭제된다.

래퍼 객체는 원시 타입에 따라 종류가 다양한데 각 레퍼 객체는 원시 자료형의 이름을 그대로 사용해 string, number, boolean, symbol이라고 부른다. 래퍼 객체 마다 제공하는 메서드 역시 다르다.

ex) str.UpperCase()

let str = "Hello;
alert(str.UpperCase()); // 이후 특별한 객체는 파괴되고 원시값 str만 남는다.

toFixed(n) : n번째 수까지의 어림수를 구한 후 이를 문자형으로 반환

let n = 1.23456;
alert(n.toFixed(2));
let str = "Hello";

str.test = 5; // 이 문자열이 들어있는지 확인, 있으면 true
alert(str.test);

엄격모드에서는 레퍼 객체를 수정하려 할때 에러가 발생하고 비엄격모드에서는 에러가 발생하지 않는다. 레퍼 객체에 프로퍼티 test가 추가되는데 레퍼객체는 바로 삭제되기 때문에 마지막줄에서 test를 찾을 수 없다.

숫자형

모던 자바스크립트 숫자 자료형
1) 일반적인 숫자는 배정밀도 부동소수점 숫자로 알려진 64bit IEEE-754
2) 임의의 길이를가진 정수는 Bigint로 나타낼 수 있다.

10억 => billion
숫자 옆에 'e'를 붙이고 0의 개수를 그 옆에 붙여주면 숫자를 줄일 수 있다. 즉, 왼쪽의 수에 e 오른쪽 수만큼 10의 거듭제곱을 하는 효과가 있다. 엄청 작은 수를 쓸때는 '1e-6'처럼 음수로 쓴다.

16진수는 0x를 사용해 표현할 수 있다. 0b와 0o를 이용하면 각각 이진수와 8진수로 쓸 수 있다.

num.toString(base) : base진법으로 num을 표현한 후 이를 문자형으로 변환해 반환한다.

어림수 구하기
1) math.floor : 첫째자리에서 버림
2) math.ceil : 첫째자리에서 올림
3) math.round : 첫째자리에서 반올림

IEEE-754에서 너무 크면 infinity로 변환된다.

isNaN : NaN인지 테스트함
NaN은 자기 자신을 포함해 그 어떤 값과도 같지 않다. (Nan===Nan하면 false)
isFinite : 일반 숫자인 경우 true 반환

단항 덧셈 연산자 + 또는 Number()를 사용하여 숫자형으로 변형할 때 적용되는 규칙은 꽤 엄격합니다. 피연산자가 숫자가 아니면 형 변환이 실패한다.
parseInt,parseFloat는 100px같이 숫자와 단위를 함께 쓰는 경우 숫자를 읽는다.

random(start,end), randomInteger(start,end)

function readNumber(){
  
  let num;
  
  do{
    num = +prompt("Enter a number please?", 0);
  }while(!isFinite(num));
  
  if(num===null || num==='') return null;
  
  return +num;
  

}

alert(`read : ${readNumber()}`);

문자열

`` : 백틱, 여러줄에 걸쳐 작성할 수 있다

문자열길이 : str.length

let str = 'hello';

alert(str[0]); // h
alert(str.charAt(0));//h

charAt는 하위호완성을 위해 남아있는 메서드다. 접근하려는 위치에 글자가 없는 경우 []는 undefined, charAt는 빈문자열을 반환한다.

for..of를 사용하면 문자열을 구성하는 글자를 대상으로 반복작업을 할 수 있다.

문자열의 불변성 : 문자열은 수정할 수 없다. 만들려면 새로운 문자열을 하나 만든다음 할당한다.

toUpperCase();
toLowerCase();

부분 문자열찾기
1)
str.indexOf('str'); // 부분 문자열찾기, 원하는 부분을 찾으면 위치를 반환하고 아니면 -1을 반환한다. 두번째 인수로 n번째로 등장하는 위치를 찾을 수 있다.

2)

let str = "Widget with id";

if (str.indexOf("Widget")) {
    alert("찾았다!"); // 의도한 대로 동작하지 않습니다.
}

str.indexOf("Widget")은 0을 반환하는데, if문에선 0을 false로 간주하므로 alert 창이 뜨지 않는다.비트 연산자 : ~n은 -(n+1)과 같다. ~n을 0으로 만드는건 n이 -1일때가 유일하다. 그렇기 때문에

let str = "Widget";

if (~str.indexOf("Widget")) {
  alert( '찾았다!' ); // 의도한 대로 동작합니다.
}

이렇게 작성해준다.

"Widget with id".includes("Widget") //true or false, str.indexOf처럼 두번째 인수를 넘기면 해당 위치부터 부분 문자열을 검색한다.
alert( "Widget".startsWith("Wid") ); // true, "Widget"은 "Wid"로 시작합니다.
alert( "Widget".endsWith("get") ); // true, "Widget"은 "get"으로 끝납니다.
let str = "stringify";
alert(str.slice(0,5)); // strin 0부터 5번까지 자른다. 음수를 넘기면 문자열 끝에서부터 카운트한다.
let str = "stringify";
alert(str.substring(2,6)); // ring start와 end 사이의 문자열을 반환한다. start가 end보다 커도 된다. 음수를 허용하지 않는다.
let str = "stringify";. 
alert( str.substr(2, 4) ); // ring, 두 번째부터 글자 네 개. 음수허용.

문자열 비교
1) 소문자는 대문자보다 항상 더 크다.
2) 발음 구별 기호가 붙은 문자는 알파벳 순서 기준을 따르지 않는다.

str.trim() : 문자열 앞과 끝의 공백 문자를 제거해준다.
str.repeat(n) : 문자열을 n번 반복한다.

function ucFirst(strings){

  return strings[0].toUpperCase()+strings.slice(1); //이후 문자들도 slice로 붙여준다.
  

}
    
alert( ucFirst("john") ); 
function checkSpam(strings){
  
  let answer = strings.toLowerCase();

  if(answer.includes("viagra")||answer.includes("xxx")){
    return true;
  }else{
    return false;
  }
  

}
    
alert( checkSpam('buy ViAgRA now') );
function truncate(strings,max){
  
  let len = strings.length;
  
  if(len>max){
    
    return strings.slice(0,max-1)+"...";
  }else{
    return strings;
  }
  
}

alert(truncate("abcdfaefafdsfd",5))
function extractCurrencyValue(strings){
  
  return +strings.slice(1);
  
}

alert(extractCurrencyValue("$120"));

좋은 웹페이지 즐겨찾기