Mozilla wants to hear from developers like you. http://www.surveygizmo.com/s3/2737536/440b74c45e94?a=mdn

String

String 글로벌 오브젝트는 문자열의 생성자, 또는 문자열의 순서입니다.

문법

문자 리터럴들은 다음 형식을 취합니다:

'string text'
"string text"
"中文 español English हिन्दी العربية português বাংলা русский 日本語 ਪੰਜਾਬੀ 한국어 தமிழ்"

문자열은 String을 사용하여 바로 생성할 수 있습니다:

String(thing)

파라미터들

thing
문자열로 변환될 수 있는 모든 것

Template Strings

ECMAScript 2015 이후, 문자열 리터럴들은 소위 Template strings이 될 수 있습니다:

`hello world` `hello! world!` `hello ${who}` escape `<a>${who}</a>`

Beside regular, printable characters, special characters can be encoded using escape notation:

Code Output
\0 NULL 문자
\' 단따옴표
\" 쌍따옴표
\\ 백슬래시
\n 개행문자
\r 캐리지리턴
\v vertical tab
\t
\b 백스페이스
\f 폼 피드
\uXXXX unicode codepoint
\u{X} ... \u{XXXXXX} unicode codepoint
\xXX Latin-1 문자

다른 프로그래밍 언어와 달리, JavaScript는 단따옴표와 쌍따옴표 문자열 간의 차이점이 없습니다; therefore, the escape sequences above work in strings created with either single or double quotes.

긴 리터럴 문자열

때때로, 여러분이 작성한 코드에는 상당히 긴 문자열을 포함해야 할 수 있습니다. 여러분들은 끝 없이 계속되는 여러 줄을 작성하는 것보다는 실제 문자열 컨텐츠에 영향을 주지 않는 선에서 여러 줄로 끊어서 소스코드를 작성하길 원할 수 있습니다. 방법은 두 가지가 있습니다. 

 아래와 같이, + 연산자를 사용하는 것입니다. 

let longString = "This is a very long string which needs " +
                 "to wrap across multiple lines because " +
                 "otherwise my code is unreadable.";

또는 각 라인의 끝에 문자열이 계속 연결된다는 표시인 백슬래시 문자("\")를 사용하는 것입니다. 백슬래시 뒤에는 어떤 공백이나 문자열이 오지 않아야 합니다. 문자를 백슬래시 뒤에 작성하게 되면 제대로 동작하지 않을 겁니다. 사용 방법은 다음과 같습니다:

let longString = "This is a very long string which needs \
to wrap across multiple lines because \
otherwise my code is unreadable.";

위 두 가지 방법으로 작성한 코드는 똑 같은 문자열을 생성하게 됩니다. 

설명

문자열은 텍스트 형태로 표현될 수있는 데이터를 보관하는 데 유용합니다. 문자열에서 가장 많이 사용되는 작업들은 문자열의 길이를 확인하는 (length), 문자열을 생성하고 연결하는 + 와 += 문자열 연산자, 서브문자열(substring)이 있는지 확인하고, 있으면 위치를 확인하는 indexOf() 메서드, 서브문자열(substring)을 추출해내는 substring() 메서드가 있습니다.

문자 접근(Character access)

문자열에서 개개의 문자에 접근할 수 있는 방법은 두가지가 있습니다. 첫번째는 charAt() 메서드를 이용하는 것입니다:

return 'cat'.charAt(1); // returns "a"

다른 방법(ECMAScript 5에서 소개하고 있는)은 문자열을 배열과 같은 오브젝트로 취급하여, 문자에 해당하는 숫자 인덱스를 사용하는 방법입니다 :

return 'cat'[1]; // returns "a"

브라켓([ ]) 표기법을 사용하여 문자에 접근하는 경우 , 이러한 프로퍼티들에 새로운 값을 할당하거나 삭제할 수는 없습니다. 포함되어 있는 프로퍼티들은 작성할 수도, 수정할 수도 없습니다. (더 자세한 정보는 Object.defineProperty()를 참고 바랍니다 .)

문자열 비교

C 개발자는 문자열 비교를 위하여 strcmp() 함수를 사용합니다. JavaScript에서는 단지 less-than와 greater-than 연산자만을 사용하여 문자열을 비교할 수 있습니다 :

var a = "a";
var b = "b";
if (a < b) { // true
  console.log(a + " is less than " + b);
} else if (a > b) {
  console.log(a + " is greater than " + b);
} else {
  console.log(a + " and " + b + " are equal.");
}

비슷한 결과를 얻을 수 있는 방법으로 String 인스턴스에서 상속된 localeCompare() 메서드를 사용할 수 있습니다.

문자열 원형과 String 오브젝트의 차이

Javascript는 String 오브젝트와 원형의 문자열을 다르게 취급한다는 것에 주의해야 합니다. (Boolean숫자의 true도 마찬가지입니다.)
 

문자열 리터럴(작은 따옴표 또는 큰 따옴표로 생성되는)과 생성자 없이(즉. new 키워드를 사용하지 않고) String을 호출하여 반환된 문자열은 원형 문자열(primitive strings)입니다. JavaScript는 자동적으로 원형을 String 오브젝트로 변환하기 때문에, String 오브젝트 메서드를 사용하여 원형문자열을 생성할 수 있습니다. 문맥 안의 메서드에서 프로퍼티 조회 또는 원형의 문자열 호출이 발생하면, JavaScript는 자동으로 문자열 원형을 감싸고 프로퍼티 조회를 수행 하거나 메서드를 호출합니다.

var s_prim = "foo";
var s_obj = new String(s_prim);

console.log(typeof s_prim); // Logs "string"
console.log(typeof s_obj);  // Logs "object"

문자열 원형과 String 오브젝트는 eval()을 사용할 때 다른 결과를 제공합니다. eval에 전달되는 문자열 원형들은 소스 코드 취급을 받습니다; String 오브젝트들은 다른 모든 오브젝트들과 마찬가지로 취급하며, 오브젝트를 반환합니다. 예를 들면:

var s1 = '2 + 2';               // creates a string primitive
var s2 = new String('2 + 2');   // creates a String object
console.log(eval(s1));          // returns the number 4
console.log(eval(s2));          // returns the string "2 + 2"

이러한 이유로, 비록 코드 상에서 원형 문자열을 사용하는 대신에 String 오브젝트를 사용하게 되면 코드가 손상될 수 있지만, 일반적인 개발자는 차이를 걱정할 필요는 없습니다.

String 오프젝트는 언제든지 valueOf() 메서드로 원형에 대응하도록 전환할 수 있습니다.

console.log(eval(s2.valueOf())); // returns the number 4
Note: JavaScript에서 또 다른 접근법을 알고 싶다면, StringView — a C-like representation of strings based on typed arrays 문서를 참조하시기 바랍니다.

프로퍼티

String.prototype
String 오브젝트는 프로퍼티의 추가가 가능합니다.

메서드

String.fromCharCode()
지정된 유니코 값의 순서를 이용하여 만든 문자열을 반환합니다.
String.fromCodePoint()
지정된 코드 포인트 순서를 이용하여 만든 문자열을 반환합니다.
String.raw()
원형 템플릿 문자열(raw template string)에서 생성된 문자열을 반환합니다.

String generic 메서드

String generic들은 비표준으로, 가까운 미래에 사라질 것입니다. 아래에서 제공하고 있는 방식을 사용하지 않으면, 브라우저들간의 호환성은 기대하기 어렵습니다. 

String 인스턴스 메서드는 JavScript 1.6으로 Firefox에서(ECMAScript 표준에 속하지는 않지만) 어떤 오브젝트라도 String 메서드에 적용하여 String 오브젝트에서 사용가능합니다:

var num = 15;
console.log(String.replace(num, /5/, '2'));

Generics Array 메서드에도 사용 가능합니다.

다음은 지원하지 않는 브라우저를 지원하기 위한 방법입니다:

/*globals define*/
// Assumes all supplied String instance methods already present (one may use shims for these if not available)
(function () {
  'use strict';

  var i,
    // We could also build the array of methods with the following, but the
    //   getOwnPropertyNames() method is non-shimable:
    // Object.getOwnPropertyNames(String).filter(function (methodName) {
    //    return typeof String[methodName] === 'function';
    // });
    methods = [
      'quote', 'substring', 'toLowerCase', 'toUpperCase', 'charAt', 
      'charCodeAt', 'indexOf', 'lastIndexOf', 'startsWith', 'endsWith', 
      'trim', 'trimLeft', 'trimRight', 'toLocaleLowerCase', 
      'toLocaleUpperCase', 'localeCompare', 'match', 'search', 
      'replace', 'split', 'substr', 'concat', 'slice'
    ],
    methodCount = methods.length,
    assignStringGeneric = function (methodName) {
      var method = String.prototype[methodName];
      String[methodName] = function (arg1) {
        return method.apply(arg1, Array.prototype.slice.call(arguments, 1));
      };
    };

    for (i = 0; i < methodCount; i++) {
      assignStringGeneric(methods[i]);
    }
}());

String 인스턴스

프로퍼티

String.prototype.constructor
오브젝트의 프로토타입을 생성하는 함수를 명세합니다.
String.prototype.length
문자열의 길이를 반영합니다.
N
N번째 위치에 있는 문자에 접근하기 위해 사용합니다.  N 은 0과 length보다 작은 값 사이에 있는 양의 정수입니다. 이 퍼라퍼티들은 읽기 전용(read-only) 속성을 가지고 있습니다. 

메서드

HTML과 관계없는 메서드

String.prototype.charAt()
Returns the character at the specified index.
String.prototype.charCodeAt()
Returns a number indicating the Unicode value of the character at the given index.
String.prototype.codePointAt()
Returns a non-negative integer that is the UTF-16 encoded code point value at the given position.
String.prototype.concat()
Combines the text of two strings and returns a new string.
String.prototype.includes()
Determines whether one string may be found within another string.
String.prototype.endsWith()
Determines whether a string ends with the characters of another string.
String.prototype.indexOf()
Returns the index within the calling String object of the first occurrence of the specified value, or -1 if not found.
String.prototype.lastIndexOf()
Returns the index within the calling String object of the last occurrence of the specified value, or -1 if not found.
String.prototype.localeCompare()
Returns a number indicating whether a reference string comes before or after or is the same as the given string in sort order.
String.prototype.match()
Used to match a regular expression against a string.
String.prototype.normalize()
Returns the Unicode Normalization Form of the calling string value.
String.prototype.padEnd()
Pads the current string from the end with a given string to create a new string from a given length.
String.prototype.padStart()
Pads the current string from the start with a given string to create a new string from a given length.
String.prototype.quote()
Wraps the string in double quotes (""").
String.prototype.repeat()
Returns a string consisting of the elements of the object repeated the given times.
String.prototype.replace()
Used to find a match between a regular expression and a string, and to replace the matched substring with a new substring.
String.prototype.search()
Executes the search for a match between a regular expression and a specified string.
String.prototype.slice()
Extracts a section of a string and returns a new string.
String.prototype.split()
Splits a String object into an array of strings by separating the string into substrings.
String.prototype.startsWith()
Determines whether a string begins with the characters of another string.
String.prototype.substr()
Returns the characters in a string beginning at the specified location through the specified number of characters.
String.prototype.substring()
Returns the characters in a string between two indexes into the string.
String.prototype.toLocaleLowerCase()
The characters within a string are converted to lower case while respecting the current locale. For most languages, this will return the same as toLowerCase().
String.prototype.toLocaleUpperCase()
The characters within a string are converted to upper case while respecting the current locale. For most languages, this will return the same as toUpperCase().
String.prototype.toLowerCase()
Returns the calling string value converted to lower case.
String.prototype.toSource()
Returns an object literal representing the specified object; you can use this value to create a new object. Overrides the Object.prototype.toSource() method.
String.prototype.toString()
Returns a string representing the specified object. Overrides the Object.prototype.toString() method.
String.prototype.toUpperCase()
Returns the calling string value converted to uppercase.
String.prototype.trim()
Trims whitespace from the beginning and end of the string. Part of the ECMAScript 5 standard.
String.prototype.trimLeft()
Trims whitespace from the left side of the string.
String.prototype.trimRight()
Trims whitespace from the right side of the string.
String.prototype.valueOf()
Returns the primitive value of the specified object. Overrides the Object.prototype.valueOf() method.
String.prototype[@@iterator]()
Returns a new Iterator object that iterates over the code points of a String value, returning each code point as a String value.

HTML wrapper methods

These methods are of limited use, as they provide only a subset of the available HTML tags and attributes.

String.prototype.anchor()
<a name="name"> (hypertext target)
String.prototype.big()
<big>
String.prototype.blink()
<blink>
String.prototype.bold()
<b>
String.prototype.fixed()
<tt>
String.prototype.fontcolor()
<font color="color">
String.prototype.fontsize()
<font size="size">
String.prototype.italics()
<i>
String.prototype.link()
<a href="rul"> (link to URL)
String.prototype.small()
<small>
String.prototype.strike()
<strike>
String.prototype.sub()
<sub>
String.prototype.sup()
<sup>

Example

문자열 변환

비록 일반적으로 toString() 함수를 많이 사용하고 있지만, toString()의 "안전한" 대안으로 String을 사용할 수 있습니다. String은 null과 undefined에 대해서도 잘 동작합니다. 예를 들면: 

var outputStrings = [];
for (var i = 0, n = inputValues.length; i < n; ++i) {
  outputStrings.push(String(inputValues[i]));
}

Specifications

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) Standard Initial definition.
ECMAScript 5.1 (ECMA-262)
The definition of 'String' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'String' in that specification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
The definition of 'String' in that specification.
Draft  

브라우저 호환성

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 0.2 (Yes) 9.0 (Yes) (Yes)
Feature Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)

 

관련 문서

문서 태그 및 공헌자

 이 페이지의 공헌자: pusanbear, teoli, MoGi
 최종 변경: pusanbear,