수색…
통사론
- "문자열 리터럴"
- '문자열 리터럴'
- "문자열이 리터럴에 '불일치하는 따옴표'가 있습니다."// 오류가 없습니다. 따옴표가 다릅니다.
- "이스케이프 된 따옴표가있는 문자열 리터럴" "// 오류가 없습니다. 따옴표가 이스케이프됩니다.
- `템플릿 문자열 $ {표현식}`
- String ( "ab c") // 생성자가 아닌 컨텍스트에서 호출 될 때 string을 반환합니다.
- new String ( "abc") // 문자열 프리미티브가 아닌 String 객체
기본 정보 및 문자열 연결
JavaScript의 문자열은 Template Literals ( backticks ) 'hello'
에서 작은 따옴표 'hello'
, 큰 따옴표 "Hello"
및 (ES2015, ES6의)로 `hello`
있습니다.
var hello = "Hello";
var world = 'world';
var helloW = `Hello World`; // ES2015 / ES6
문자열은 String()
함수를 사용하여 다른 유형에서 만들 수 있습니다.
var intString = String(32); // "32"
var booleanString = String(true); // "true"
var nullString = String(null); // "null"
또는 toString()
을 사용하여 숫자, 부울 또는 객체를 문자열로 변환 할 수 있습니다.
var intString = (5232).toString(); // "5232"
var booleanString = (false).toString(); // "false"
var objString = ({}).toString(); // "[object Object]"
String.fromCharCode
메서드를 사용하여 문자열을 만들 수도 있습니다.
String.fromCharCode(104,101,108,108,111) //"hello"
new
키워드를 사용하여 String 객체를 만들 수는 있지만 원시 문자열과 달리 Object와 유사하므로 권장되지 않습니다.
var objectString = new String("Yes, I am a String object");
typeof objectString;//"object"
typeof objectString.valueOf();//"string"
문자열 연결하기
문자열 연결은 +
연결 연산자 또는 String 객체 프로토 타입에 내장 된 concat()
메서드를 사용하여 수행 할 수 있습니다.
var foo = "Foo";
var bar = "Bar";
console.log(foo + bar); // => "FooBar"
console.log(foo + " " + bar); // => "Foo Bar"
foo.concat(bar) // => "FooBar"
"a".concat("b", " ", "d") // => "ab d"
문자열은 문자열이 아닌 변수와 연결될 수 있지만 문자열이 아닌 변수는 문자열로 유형 변환됩니다.
var string = "string";
var number = 32;
var boolean = true;
console.log(string + number + boolean); // "string32true"
문자열 템플릿
문자열은 템플릿 리터럴 ( backticks ) `hello`
사용하여 만들 수 있습니다.
var greeting = `Hello`;
템플릿 리터럴을 사용하면 템플릿 리터럴 내에서 ${variable}
사용하여 문자열 보간을 수행 할 수 있습니다.
var place = `World`;
var greet = `Hello ${place}!`
console.log(greet); // "Hello World!"
String.raw를 사용하면 백 슬래시를 수정하지 않고 문자열에 넣을 수 있습니다.
`a\\b` // = a\b
String.raw`a\\b` // = a\\b
인용 부호 이스케이프
문자열이 작은 따옴표로 묶여 있다면, 역 슬래시 \
하여 내부 따옴표를 이스케이프 처리해야합니다.
var text = 'L\'albero means tree in Italian';
console.log( text ); \\ "L'albero means tree in Italian"
큰 따옴표에 대해서도 동일합니다.
var text = "I feel \"high\"";
HTML 문자열은 따옴표를 많이 사용하기 때문에 문자열에 HTML 표현을 저장하는 경우 따옴표를 이스케이프 처리하는 데 특별한주의를 기울여야합니다.
var content = "<p class=\"special\">Hello World!</p>"; // valid String
var hello = '<p class="special">I\'d like to say "Hi"</p>'; // valid String
HTML 문자열의 인용문은 '
(또는 '
) 따옴표 등 "
(또는 "
) "
를 큰 따옴표로 사용하십시오.
var hi = "<p class='special'>I'd like to say "Hi"</p>"; // valid String
var hello = '<p class="special">I'd like to say "Hi"</p>'; // valid String
참고 : '
"
브라우저가 속성 인용에 자동으로 붙일 수있는 큰 따옴표를 덮어 쓰지 않습니다. 예를 들어, <p class=special>
로 이루어지고 <p class="special">
하여, "
<p class=""special"">
\"
은 <p class="special">
이 될 수 있습니다.
문자열이있는 경우 '
와 "
당신은 탈출 할 필요가 없습니다 (또한 이전 ES6 버전에서 템플릿 문자열로 알려진) 템플릿 리터럴 사용을 고려할 수 '
와 "
. 이것들은 작은 따옴표 나 큰 따옴표 대신 백틱 ( `
)을 사용합니다.
var x = `"Escaping " and ' can become very annoying`;
문자열 역방향
자바 스크립트에서 문자열을 뒤집는 가장 인기있는 방법은 다음과 같은 코드입니다.
function reverseString(str) {
return str.split('').reverse().join('');
}
reverseString('string'); // "gnirts"
그러나 역순으로 처리되는 문자열에 서로 게이트 쌍이 포함되어 있지 않은 경우에만 작동합니다. 아스트랄 기호, 즉 기본 다국어 평면 외부의 문자는 두 개의 코드 단위로 표현 될 수 있으며,이 순진 기술로 인해 잘못된 결과가 발생합니다. 더욱이 결합 표시가있는 문자 (예 : 분음 기호)는 결합 된 원래 문자 대신 논리 "다음"문자에 나타납니다.
'𝌆■.'.split('').reverse().join(''); //fails
이 메서드는 대부분의 언어에서 제대로 작동하지만 문자열 반전을위한 진정한 정확성의 인코딩 존중 알고리즘이 약간 더 복잡합니다. 그러한 구현 중 하나는 Esrever 라는 작은 라이브러리로, 역전을 완벽하게 수행하기 위해 조합 기호와 서로 게이트 쌍을 일치시키는 정규식을 사용합니다.
설명
섹션 | 설명 | 결과 |
---|---|---|
str | 입력 문자열 | "string" |
String.prototype.split( deliminator ) | 문자열 str 을 배열로 나눕니다. 매개 변수 "" 는 각 문자를 분리하는 것을 의미합니다. | ["s","t","r","i","n","g"] |
Array.prototype.reverse() | 분할 된 문자열에서 요소를 역순으로 배열을 반환합니다. | ["g","n","i","r","t","s"] |
Array.prototype.join( deliminator ) | 배열의 요소를 문자열로 결합합니다. "" 매개 변수는 빈 deliminator를 의미합니다 (즉, 배열 요소는 서로 바로 옆에 놓입니다). | "gnirts" |
스프레드 연산자 사용
function reverseString(str) {
return [...String(str)].reverse().join('');
}
console.log(reverseString('stackoverflow')); // "wolfrevokcats"
console.log(reverseString(1337)); // "7331"
console.log(reverseString([1, 2, 3])); // "3,2,1"
사용자 정의 reverse()
함수
function reverse(string) {
var strRev = "";
for (var i = string.length - 1; i >= 0; i--) {
strRev += string[i];
}
return strRev;
}
reverse("zebra"); // "arbez"
공백 제거
문자열의 가장자리에서 공백을 제거하려면 String.prototype.trim
사용하십시오.
" some whitespaced string ".trim(); // "some whitespaced string"
Internet Explorer 가 아닌 많은 자바 스크립트 엔진이 비표준 trimLeft
및 trimRight
메서드를 구현했습니다. 현재 표준화 된 trimStart
및 trimEnd
메소드에 대해 프로세스의 1 단계에있는 제안 이 있습니다.이 메소드는 호환성을 위해 trimLeft
및 trimRight
에 별명을 지정합니다.
// Stage 1 proposal
" this is me ".trimStart(); // "this is me "
" this is me ".trimEnd(); // " this is me"
// Non-standard methods, but currently implemented by most engines
" this is me ".trimLeft(); // "this is me "
" this is me ".trimRight(); // " this is me"
슬라이스가있는 부분 문자열
.slice()
를 사용하여 두 개의 인덱스가 주어진 부분 문자열을 추출하십시오.
var s = "0123456789abcdefg";
s.slice(0, 5); // "01234"
s.slice(5, 6); // "5"
하나의 인덱스가 주어지면 인덱스에서 문자열의 끝까지 걸립니다.
s.slice(10); // "abcdefg"
문자열을 배열로 분할하기
.split
을 사용하여 문자열에서 분할 된 하위 문자열 배열로 이동하십시오.
var s = "one, two, three, four, five"
s.split(", "); // ["one", "two", "three", "four", "five"]
배열 메소드 .join
을 사용하여 문자열로 돌아가십시오.
s.split(", ").join("--"); // "one--two--three--four--five"
문자열은 유니 코드입니다.
모든 JavaScript 문자열은 유니 코드입니다!
var s = "some ∆≈ƒ unicode ¡™£¢¢¢";
s.charCodeAt(5); // 8710
JavaScript에는 원시 바이트 또는 2 진 문자열이 없습니다. 이진 데이터를 효과적으로 처리하려면 Typed Arrays를 사용하십시오.
문자열 감지
매개 변수가 기본 문자열인지 여부를 확인하려면 typeof
:
var aString = "my string";
var anInt = 5;
var anObj = {};
typeof aString === "string"; // true
typeof anInt === "string"; // false
typeof anObj === "string"; // false
new String("somestr")
통해 String
객체를 가지고 있다면 위의 코드는 작동하지 않습니다. 이 경우, 우리가 사용할 수 있습니다 instanceof
:
var aStringObj = new String("my string");
aStringObj instanceof String; // true
두 인스턴스를 모두 커버하기 위해 간단한 도우미 함수를 작성할 수 있습니다.
var isString = function(value) {
return typeof value === "string" || value instanceof String;
};
var aString = "Primitive String";
var aStringObj = new String("String Object");
isString(aString); // true
isString(aStringObj); // true
isString({}); // false
isString(5); // false
또는 Object
의 toString
함수를 사용할 수 있습니다. 이 메소드는 typeof
와 같은 다른 데이터 유형을 지원하기 때문에 switch 문에서 다른 유형을 확인해야하는 경우 유용 할 수 있습니다.
var pString = "Primitive String";
var oString = new String("Object Form of String");
Object.prototype.toString.call(pString);//"[object String]"
Object.prototype.toString.call(oString);//"[object String]"
보다 견고한 솔루션은 문자열을 전혀 감지 하지 않고 필요한 기능 만 확인하는 것입니다. 예 :
var aString = "Primitive String";
// Generic check for a substring method
if(aString.substring) {
}
// Explicit check for the String substring prototype method
if(aString.substring === String.prototype.substring) {
aString.substring(0, );
}
어휘 적으로 문자열 비교하기
문자열을 사전 순으로 비교하려면 localeCompare()
. 이것은 참조 문자열이 비교 문자열 (매개 변수) 앞에 사전 식으로 (사전 순으로) 있으면, 음수 값을 반환하고 이후에 오는 경우 양수 값과 같으면 0
값을 반환합니다.
var a = "hello";
var b = "world";
console.log(a.localeCompare(b)); // -1
>
연산자와 <
연산자는 문자열을 사전 식으로 비교하는 데에도 사용할 수 있지만 0 값을 반환 할 수는 없습니다 (이 연산자는 ==
항등 연산자로 테스트 할 수 있습니다). 결과적으로 localeCompare()
함수의 형식은 다음과 같이 작성할 수 있습니다.
function strcmp(a, b) {
if(a === b) {
return 0;
}
if (a > b) {
return 1;
}
return -1;
}
console.log(strcmp("hello", "world")); // -1
console.log(strcmp("hello", "hello")); // 0
console.log(strcmp("world", "hello")); // 1
이것은 반환 값의 부호 (예 : sort
)를 기반으로 비교하는 정렬 함수를 사용할 때 특히 유용합니다.
var arr = ["bananas", "cranberries", "apples"];
arr.sort(function(a, b) {
return a.localeCompare(b);
});
console.log(arr); // [ "apples", "bananas", "cranberries" ]
대문자로 문자열
String.prototype.toUpperCase () :
console.log('qwerty'.toUpperCase()); // 'QWERTY'
소문자로 문자열
String.prototype.toLowerCase ()
console.log('QWERTY'.toLowerCase()); // 'qwerty'
단어 카운터
<textarea>
있고 다음에 대한 정보를 검색하려고한다고 가정 <textarea>
.
- 문자 (전체)
- 문자 (공백 없음)
- 말
- 윤곽
function wordCount( val ){
var wom = val.match(/\S+/g);
return {
charactersNoSpaces : val.replace(/\s+/g, '').length,
characters : val.length,
words : wom ? wom.length : 0,
lines : val.split(/\r*\n/).length
};
}
// Use like:
wordCount( someMultilineText ).words; // (Number of words)
문자열의 인덱스에있는 문자에 액세스
charAt()
를 사용하여 문자열의 지정된 인덱스에있는 문자를 가져옵니다.
var string = "Hello, World!";
console.log( string.charAt(4) ); // "o"
또는 문자열을 배열처럼 처리 할 수 있으므로 대괄호 표기법을 통해 색인을 사용하십시오.
var string = "Hello, World!";
console.log( string[4] ); // "o"
지정된 인덱스에있는 문자의 문자 코드를 가져 오려면 charCodeAt()
.
var string = "Hello, World!";
console.log( string.charCodeAt(4) ); // 111
이 메소드는 모두 getter 메소드 (값을 반환)입니다. JavaScript의 문자열은 변경할 수 없습니다. 다시 말해 문자열 중 한 위치에 문자를 설정하는 데 사용할 수있는 문자열이 없습니다.
문자열 찾기 및 바꾸기 함수
문자열 내에서 문자열을 검색하려면 다음과 같은 여러 가지 기능이 있습니다.
indexOf( searchString )
및 lastIndexOf( searchString )
indexOf()
는 문자열에서 searchString
이 처음 나타나는 색인을 반환합니다. searchString
이 없으면 -1
이 반환됩니다.
var string = "Hello, World!";
console.log( string.indexOf("o") ); // 4
console.log( string.indexOf("foo") ); // -1
마찬가지로, lastIndexOf()
는 searchstring
이 마지막으로 발견 된 색인을 반환하거나 찾지 못한 경우 -1
반환합니다.
var string = "Hello, World!";
console.log( string.lastIndexOf("o") ); // 8
console.log( string.lastIndexOf("foo") ); // -1
includes( searchString, start )
includes()
는 searchString
이 index start
(기본값은 0)부터 시작하여 문자열에 searchString
이 있는지 여부를 알려주는 부울을 반환합니다. 하위 문자열의 존재 여부 만 테스트하면되는 경우 indexOf()
보다 낫습니다.
var string = "Hello, World!";
console.log( string.includes("Hello") ); // true
console.log( string.includes("foo") ); // false
replace( regexp|substring, replacement|replaceFunction )
replace()
는 RegExp regexp
또는 문자열 substring
이 문자열 replacement
또는 replaceFunction
의 반환 값과 일치하는 모든 substring
을 포함하는 문자열을 반환합니다.
이것은 문자열을 제자리에 수정하지 않고 대체 문자열을 반환합니다.
var string = "Hello, World!";
string = string.replace( "Hello", "Bye" );
console.log( string ); // "Bye, World!"
string = string.replace( /W.{3}d/g, "Universe" );
console.log( string ); // "Bye, Universe!"
replaceFunction
은 정규 표현식 객체의 조건부 대체 (즉, regexp
와 함께 사용)에 사용할 수 있습니다. 매개 변수의 순서는 다음과 같습니다.
매개 변수 | 의미 |
---|---|
match | 정규 표현식 전체와 일치하는 부분 문자열 |
g1 , g2 , g3 , ... | 정규 표현의 일치하는 그룹 |
offset | 전체 문자열에서 일치 항목의 오프셋 |
string | 전체 문자열 |
모든 매개 변수는 선택 사항입니다.
var string = "heLlo, woRlD!";
string = string.replace( /([a-zA-Z])([a-zA-Z]+)/g, function(match, g1, g2) {
return g1.toUpperCase() + g2.toLowerCase();
});
console.log( string ); // "Hello, World!"
문자열 안의 하위 문자열 인덱스 찾기
.indexOf
메서드는 다른 문자열 안에있는 하위 문자열의 인덱스를 반환합니다 (존재하는 경우에는 문자열을 반환하고 그렇지 않으면 -1을 반환합니다)
'Hellow World'.indexOf('Wor'); // 7
.indexOf
는 또한 어떤 인덱스에서 함수가 찾고 있어야 하는지를 나타내는 추가 숫자 인자를 받아 들인다.
"harr dee harr dee harr".indexOf("dee", 10); // 14
.indexOf
는 대소 문자를 구분합니다.
'Hellow World'.indexOf('WOR'); // -1
숫자의 문자열 표현
JavaScript는 Number 에서 2에서 36 까지의 임의의 기준에 대한 문자열 표현 을 기본 변환합니다.
10 진수 ( 10 진수 ) 이후의 가장 일반적인 표현은 16 진수 (16 진수) 이지만이 절의 내용은 해당 범위의 모든 기본에 적용됩니다.
Number 를 10 진수 (기수 10)에서 16 진수 (기수 16)의 String 표현으로 변환 하려면 toString 메소드를 기수 16
으로 사용할 수 있습니다.
// base 10 Number
var b10 = 12;
// base 16 String representation
var b16 = b10.toString(16); // "c"
표현 된 수치가 정수의 경우,이 반대의 조작은 parseInt
및 radix 16
다시 할 수 있습니다.
// base 16 String representation
var b16 = 'c';
// base 10 Number
var b10 = parseInt(b16, 16); // 12
임의의 수 (즉, 비 정수)를 String 표현 에서 Number 로 변환하려면 연산을 두 부분으로 나누어야합니다. 정수 부분과 분수 부분.
let b16 = '3.243f3e0370cdc';
// Split into integer and fraction parts
let [i16, f16] = b16.split('.');
// Calculate base 10 integer part
let i10 = parseInt(i16, 16); // 3
// Calculate the base 10 fraction part
let f10 = parseInt(f16, 16) / Math.pow(16, f16.length); // 0.14158999999999988
// Put the base 10 parts together to find the Number
let b10 = i10 + f10; // 3.14159
참고 1 : 다른 기준으로 표현할 수있는 차이로 인해 작은 오류가 발생할 수 있으므로주의하십시오. 이후에 일종의 반올림을 수행하는 것이 바람직 할 수 있습니다.
참고 2 : 숫자의 매우 긴 표현은 변환이 발생한 환경의 숫자 의 정확성과 최대 값으로 인해 오류가 발생할 수도 있습니다.
문자열 반복
이 작업은 .repeat () 메소드를 사용하여 수행 할 수 있습니다.
"abc".repeat(3); // Returns "abcabcabc"
"abc".repeat(0); // Returns ""
"abc".repeat(-1); // Throws a RangeError
일반적인 경우 ES6 String.prototype.repeat () 메서드에 올바른 polyfill을 사용하여 수행해야합니다. 그렇지 않으면, 관용구 new Array(n + 1).join(myString)
은 문자열 myString
n
번 반복 할 수 있습니다.
var myString = "abc";
var n = 3;
new Array(n + 1).join(myString); // Returns "abcabcabc"
문자 코드
charCodeAt
메소드는 단일 문자의 유니 코드 문자 코드를 검색합니다.
var charCode = "µ".charCodeAt(); // The character code of the letter µ is 181
문자열에서 문자의 문자 코드를 얻으려면 문자의 0부터 시작하는 위치가 charCodeAt
의 매개 변수로 전달됩니다.
var charCode = "ABCDE".charCodeAt(3); // The character code of "D" is 68
일부 유니 코드 기호는 단일 문자에 맞지 않으며 인코딩하는 대신 두 개의 UTF-16 서로 게이트 쌍이 필요합니다. 이것은 2 16 이상 문자 코드의 경우 -로 검색 할 수있는 1 63553.이 확장 된 문자 코드 또는 코드 포인트 값 codePointAt
:
// The Grinning Face Emoji has code point 128512 or 0x1F600
var codePoint = "😀".codePointAt();