기반을 다지자 ES6

Operator, String

Jungsoomin :) 2020. 9. 25. 04:44

== 동등비교 즉, 값을 비교

=== 자료형의 일치여부까지 동등한가 비교

!== 자료형의 일치여부가 맞지 않는 지까지 비교

 

  • 가급적 일치비교 연산자를 쓰는 것이 정확하다. Type Safe 의 이야기인 듯 하다.

 

0 == '0' // true
0 === '0' //false Number, Boolean

1 === '1' // false
1 === true // false

1 !== 2 //true , 같은 타입일 경우 값 비교
1 !== 'true' // true , 문자열과 숫자의 비고는 일치하지 않으므로 true


String 은 java 의 charSequence 와 동일. 즉, 배열

 

  • String 은 한번 선언되면 그 값을 변경시킬 수 없다.
var name = '정수민';

console.log(name[0]) // 정

name[2] = '수'

console.log(name[2]) // 민, 한번 선언된 String 은 값을 변경할 수 없다.

 

String 랩퍼 오브젝트의 prototype 객체에 쓰여진 메서드를 상속받아 문자열을 조작할 수 있는데, 

규칙에 따라 문자열은 변경 불가능 하므로, 언제나 새로운 문자열이 리턴된다.

////String.prototype.length

const str1 = 'Hello';
console.log(str1.length) // 5


///String.prototype.charAt(number)

for(let i =0; i<str.length; i++){
    console.log(str.charAt(i))
    }

///String.prototype.concat()
성능 상  + += 등의 할당연산자를 쓰는 것이 성능에 유리하므로 패스


/**
 * @param {string} searchString - 검색할 문자 또는 문자열
 * @param {string} [fromIndex=0] - 검색 시작 index (생략할 경우, 0)
 * @return {number}
 */
///String.prototype.indexOf(searchString: string, fromIndex=0): number

const str = 'soomin';
console.log(str.indexOf('m'));  // 3

console.log(str.indexOf('min') !== -1); // true



///ES6: String.prototype.includes(string)

console.log(str.includes('Hello')); // false
console.log(str.includes('so')); // true


/**
 * @param {string} searchString - 검색할 문자 또는 문자열
 * @param {number} [fromIndex=this.length-1] - 검색 시작 index (생략할 경우, 문자열 길이 - 1)
 * @return {number}
 */
///str.lastIndexOf(searchString[, fromIndex])

str.lastIndexOf('in'); // 4
str.lastIndexOf('in',3); // -1 , 2번 인자가 들어올 경우 인자로부터 역순 탐색


/**
 * @param {string | RegExp} searchValue - 검색 대상 문자열 또는 정규표현식
 * @param {string | Function} replacer - 치환 문자열 또는 치환 함수
 * @return {string}
 */
///str.replace(searchValue, replacer)

console.log(str1.replace('world','soomin')); // Hello soomin
console.log(str1.replace(/world/gi, 'soomin')); // 정규 표현식에 맞는 값을 치환  Hello soomin

const camelCase = "calmelCase";
camelCase.replace(/.[A-Z]/g, function(match) { 
return match[0]+'_'+match[1].toLowerCase();
});
   //"calmel_case" , 문자와 대문자의 조합부분을 찾아 조작 후 치환
   
const snakeCase = "hello_world";
snakeCase.replace(/_./g,function(match){
    return match[1].toUpperCase();
});
   //"helloWorld" , 언더바와 문자조합을 찾은후 조작 후 치환
   
   
/**
 * @param {string | RegExp} [separator] - 구분 대상 문자열 또는 정규표현식
 * @param {number} [limit] - 구분 대상수의 한계를 나타내는 정수
 * @return {string[]}
 */
///str.split([separator[, limit]]) : 정규 표현식이나 문자열을 검색하여 구분한 뒤 배열화

console.log(str3.split(' ')); // (4) ["How", "are", "you", "doing?"]
console.log(str3.split(/\s/)); // (4) ["How", "are", "you", "doing?"]
console.log(str3.split('')); // (18) ["H", "o", "w", " ", "a", "r", "e", " ", "y", "o", "u", " ", "d", "o", "i", "n", "g", "?"]
console.log(str3.split(' '),3); // (4) ["How", "are", "you", "doing?"] , 구부하되 원소 수 제한


/**
 * @param {number} start - 0 ~ 해당문자열 길이 -1 까지의 정수
 * @param {number} [end=this.length] - 0 ~ 해당문자열 길이까지의 정수
 * @return {string}
 */
 ///str.substring(start[, end]) : 1 부터 ~까지 잘라가져와
 
 console.log(str4.substring(0,str4.length-1)); // Hello worl
 console.log(str4.substring(5)); //  world : 2번째 인자 미입력시 끝까지 자름
 console.log(str4.substring(-1));  Hello world : 음수일경우 0 취급
 
 
 ///String.prototype.slice : substring 과 동일하나 음수 전달 가능
 
 console.log(str4.slice(-2)); //  ld , 0부터 -2 즉 음수는 마지막 인덱스 부터 역순
 console.log(str4.slice(1, -2)); // ello wor , 1글자부터 -2까지 잘라라
 

///String.prototype.toUpperCase(): string
///String.prototype.toLowerCase(): string

str.toUpperCase(); // "SOOMIN"
str.toLowerCase(); // "soomin"


/// String.prototype.trim(): string , trimStart() , trimEnd();

const str5 = "    soomin      ";

console.log(str5.trim()); // soomin
console.log(str5.trimStart()); // soomin      뒷공백
console.log(str5.trimEnd());  // 앞공백       soomin


///String.prototype.repeat(count: number): string : 수만큼 문자열을 반복

console.log(str.repeat(2)); // soominsoomin

///String.prototype.includes(searchString: string, position?: number): boolean

str.includes('so'); // true
str.includes('zoo'); // false

 


값이 없음은 null, 

 

typeof 연산자로 검사시 null은 object 로 반환 됨 .

즉 null의 검사는 === 일치 연산자를 이용해야 함.

 

존재하지 않는 객체로 접근 , 변수에 값이 할당되지 않을 경우 undefined

 

  • 명시적으로 값이 없음  > null
  • 존재치 않음 > undefined

Wrapper Object

 

Number, String Boolean 의 메서드를 포함함, 자바의 Wrapper Class 와 비슷한 용도.

 

원시타입이 wrapper Object 의 메서드를 사용할 수 있는 데 , 이는 호출시 WrapperObject 로 일시적으로 변환 되어 prototype 객체를 공유하기 떄문임.

 

new String(value) // 랩퍼 오브젝트 생성

let strObj = new String(undefined); // length:9 PrimitiveValue: 'undefined'


var x = String('soomin'); // 원시타입
console.log(typeof x, x) string soomin

const str = 'soomin'; //원시타입
const strObj = new String('soomin'); // 랩퍼 오브젝트 

console.log(typeof str) // string
console.log(typeof strObj) // object

console.log(str == strObj) // true
console.log(str === strObj) // false

 

'기반을 다지자 ES6' 카테고리의 다른 글

Function Object  (0) 2020.09.25
Constructor Function  (0) 2020.09.25
Function  (0) 2020.09.25
흐름 제어.  (0) 2020.09.25
Object  (0) 2020.09.25