== 동등비교 즉, 값을 비교
=== 자료형의 일치여부까지 동등한가 비교
!== 자료형의 일치여부가 맞지 않는 지까지 비교
- 가급적 일치비교 연산자를 쓰는 것이 정확하다. 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 |