정의
문자열은 하나 이상의 문자가 함께 배열되어 단일 또는 이중 인용문으로 배치됩니다.
'ABC' "ABC"이중 인용문은 단일 견적 문자열 내에서 사용할 수 있습니다. 이중 인용 문자열 내에서 단일 따옴표를 사용할 수 있습니다.
'key = "value" ""긴 여행입니다 "
위의 둘 다 법적 문자열입니다.
단일 견적 문자열 내에서 단일 따옴표를 사용하려면 (또는 이중 인용 문자열 안에 이중 인용문) 내부에서 단일 견적 (또는 이중 따옴표)을 접두어를 탈출해야합니다.
'그녀는/'hello/'?'// '그녀가'안녕하세요 '라고 말 했나요? "
HTML 언어의 속성 값은 이중 인용문을 사용하기 때문에 많은 프로젝트는 JavaScript 언어 문자열이 단일 따옴표 만 사용한다는 데 동의 하며이 자습서는이 컨벤션을 따릅니다. 물론 이중 인용문 만 사용하는 것도 완벽합니다. 하나의 스타일을 고수하고 두 스타일을 혼합하지 않는 것이 중요합니다.
기본적으로 문자열은 한 줄로 만 작성할 수 있으며 여러 줄로 나뉘어지면 오류가보고됩니다.
'ABC'// syntaxerror : 예상치 못한 토큰 불법
위의 코드는 문자열을 3 줄로 나누고 JavaScript는 오류를보고합니다.
긴 문자열을 여러 줄로 나누어야하는 경우 각 줄 끝에 백 슬래시를 사용할 수 있습니다.
var longstring = "long /long /long /string"; longstring // "긴 긴 길이"
위의 코드는 백 슬래시를 추가 한 후 원래 한 줄에 쓰여진 문자열이 여러 줄의 쓰기로 나눌 수 있음을 보여줍니다. 그러나 출력시 효과는 여전히 한 줄이며 효과는 같은 줄에 쓰기와 정확히 동일합니다. 백 슬래시는 Newline 캐릭터를 따라야하며 다른 문자 (예 : 공백)가 없어야합니다. 그렇지 않으면 오류 가보고됩니다.
연결 연산자 (+)는 여러 단일 라인 문자열을 연결하고, 긴 문자열을 여러 줄로 나누어 쓸 수 있으며, 출력시 단일 줄이기도합니다.
var longstring = 'long' + 'long' + 'long' + 'string';
멀티 라인 문자열을 출력하려면 멀티 라인 주석을 활용하는 해결 방법이 있습니다.
(function () {/*line 1line 2line 3*/}). ToString (). split ( '/n'). slice (1, -1) .join ( '/n') // "line 1 // line 2 // line 3"위의 예에서 출력 문자열은 여러 줄입니다.
탈출하다
Backslash (/)는 문자열에 특별한 의미를 가지며 일부 특수 문자를 나타내는 데 사용되므로 탈출 문자라고도합니다.
백 슬래시로 탈출 해야하는 특수 문자는 주로 다음과 같습니다.
위의 문자는 백 슬래시가 앞서 있으며, 모두 특별한 의미를 나타냅니다.
Console.log ( '1/n2') // 1 // 2
위의 코드에서 /n은 새로운 줄을 의미하며 출력 할 때 두 줄로 나뉩니다.
백 슬래시에는 세 가지 특별한 용도가 있습니다.
(1)/HHHH
백 슬래시는 캐릭터를 나타내는 3 개의 8 대 숫자 (000 ~ 377)가 뒤 따릅니다. HHH는 /251과 같은 해당 문자의 유니 코드 코드 포인트에 해당합니다. 분명히이 방법은 256 자만 출력 할 수 있습니다.
(2)/xhh
/x 다음으로 문자를 나타내는 두 개의 16 진수 (00에서 ff)가 뒤 따릅니다. HH는 /xa9와 같은 문자의 유니 코드 코드 포인트에 해당합니다. 저작권 기호를 나타냅니다. 이 방법은 256 자만 출력 할 수 있습니다.
(3)/uxxxxx
/u는 캐릭터를 나타내는 4 개의 16 진수 (0000에서 fffff)가 뒤 따릅니다. HHHHH는 /u00a9와 같은 문자의 유니 코드 코드 포인트에 해당합니다. 저작권 기호를 나타냅니다.
다음은 자세히 작성된이 세 가지 특수 문자의 예입니다.
'/251'// "©" '/xa9'// "©" '/u00a9'// "©" '/172'=== 'z'// true '/x7a'=== 'z'// true '/u007a'=== 'z'// true
비전문 문자 앞에서 백 슬래시를 사용하는 경우 백 슬래시는 생략됩니다.
'/a'// "a"
위의 코드에서 A는 일반적인 문자이며, 그 전에 백 슬래시를 추가 할 특별한 의미는 없으며 백 슬래시는 자동으로 생략됩니다.
백 슬래시가 문자열의 정상 내용에 포함되어야하는 경우, 백 슬래시 전에 다른 백 슬래시를 추가하여 스스로 탈출해야합니다.
"prev // next"// "prev/ next"
문자열과 배열
문자열은 문자 배열로 취급 될 수 있으므로 배열의 사각형 브래킷 연산자를 사용하여 특정 위치에서 문자를 반환 할 수 있습니다 (위치 번호는 0에서 시작).
var s = 'hello'; s [0] // "h"s [1] // "e"s [4] // "o"// 제곱 브래킷 연산자 'Hello'[1] // "e"
정사각형 괄호의 숫자가 줄의 길이를 초과하거나 사각형 괄호의 숫자가 전혀없는 경우 정의되지 않은 반환됩니다.
'abc'[3] // undefined'abc '[-1] // undefined'abc'[ 'x'] // undefined
그러나 그것은 문자열과 어레이의 유사성에 관한 것입니다. 실제로 문자열에서 단일 문자를 변경하는 것은 불가능합니다.
var s = 'hello'; delete s [0]; s // "hello"s [1] = 'a'; s // "hello"s [5] = '!'; s // "hello"
위의 코드는 문자열 내부의 개별 문자를 변경하거나 추가하거나 삭제할 수 없으며 이러한 작업은 조용히 실패합니다.
문자열이 문자 배열과 유사한 이유는 실제로 문자열에서 사각형 브래킷 작동을 수행 할 때 문자열이 스트링 객체로 자동 변환되기 때문입니다.
길이 속성
길이 속성은 문자열의 길이를 반환하며 변경할 수 없습니다.
var s = 'hello'; s.length // 5s.length = 3; s.length // 5s.length = 7; s.length // 5
위의 코드는 문자열의 길이 속성을 변경할 수 없지만 오류가 없음을 나타냅니다.
캐릭터 세트
JavaScript는 유니 코드 문자 세트를 사용합니다. 즉, JavaScript 내에서 모든 문자는 유니 코드로 표시됩니다.
JavaScript는 Unicode를 사용하여 문자를 내부적으로 저장할뿐만 아니라 프로그램에서 직접 유니 코드를 사용할 수도 있습니다. 모든 문자는 "/uxxxx"형식으로 작성 될 수 있으며, 여기서 xxxx는 문자의 유니 코드 인코딩을 나타냅니다. 예를 들어, /u00a9는 저작권 기호를 나타냅니다.
var s = '/u00a9'; s // "©"
각 문자는 JavaScript 내부의 16 비트 (즉, 2 바이트) UTF-16 형식으로 저장됩니다. 즉, JavaScript의 단위 문자 길이는 16 비트 길이, 즉 2 바이트로 고정됩니다.
그러나 UTF-16은 두 가지 길이를 갖습니다. U+0000과 U+FFFF 사이의 문자의 경우 길이는 16 비트 (즉, 2 바이트)입니다. U+10000과 U+10FFFF 사이의 문자의 경우 길이는 32 비트 (즉, 4 바이트)이고, 처음 두 바이트는 0xD800과 0xDBFF 사이이며, 마지막 두 바이트는 0xDC00과 0xDFFF 사이입니다. 예를 들어, U+1D306의 해당 문자는 ?이며 UTF-16 (0xD834 0XDF06)으로 작성됩니다. 브라우저는이 4 바이트를 하나의 문자로 올바르게 인식하지만 JavaScript 내부의 문자 길이는 항상 16 비트로 고정 되며이 4 바이트는 두 문자로 취급됩니다.
var s = '/ud834/udf06'; s // "?"s.length // 2 /^.$/. test (s) // falseses.charat (0) // ""s.charat (1) // ""S.charcodeat (0) // 55348s.charcodeat (1) // 57094
위의 코드는 u+10000과 u+10ffff 사이의 문자의 경우, JavaScript는 항상 두 문자로 취급됩니다 (문자의 길이 속성은 2). 단일 문자와 일치하는 데 사용되는 정규 표현은 실패합니다 (JavaScript는 둘 이상의 문자가 여기에 있다고 생각합니다), Charat 메소드는 단일 문자를 반환 할 수 없으며 Charcodeat 메소드는 각 바이트에 해당하는 10 진수 값을 반환합니다.
그러므로 이것을 다룰 때, 이것은 고려해야합니다. 4 바이트 유니 코드 문자의 경우, C가 문자의 유니 코드 수이고, h는 처음 두 바이트이고, L은 마지막 두 바이트이며, 이들 사이의 변환 관계는 다음과 같습니다.
// Unicode에서 UTF -16H로 큰 U + ffffff보다 큰 문자를 변환합니다. = Math.floor ((C -0x10000)/ 0x400) + 0xD800L = (C -0x10000) % 0x400 + 0xDC00 // UTF -16에서 UNICODEC = U + FFFF보다 큰 문자를 변환합니다. 0x10000
다음과 같은 정규 표현식은 모든 UTF-16 문자를 인식 할 수 있습니다.
([/0-/ud7ff/ue000-/ufff] | [/ud800-/udbff] [/udc00-/udff])
JavaScript 엔진 (엄격하게 말하면 ES5 사양)은 보조 평면의 유니 코드 문자 (0xFFFF보다 큰 숫자)를 자동으로 인식 할 수 없으므로 모든 문자열 처리 기능은 해당 문자를 만나면 잘못된 결과를 낳습니다. 문자열 관련 작업을 완료하려면 캐릭터가 0xD800에서 0xDFF의 범위 내에 있는지 여부를 결정해야합니다.
아래는 문자열 트래버스를 올바르게 처리 할 수있는 함수입니다.
함수 getSymbols (String) {var length = string.length; var index = -1; var output = []; var 캐릭터; var charcode; while (++ index <length) {문자 = string.charat (index); charcode = arribute.charcodeat (0); if (charcode> = 0xd800 && charcode <= 0xdbff) {output.push (문자+string.charat (++ index)); } else {output.push (문자); }} return output;} var symbols = getsymbols ( '?'); symplics.foreach (function (symbol) {// ...});대체물 (String.prototype.replace), 인터셉트 하위 문자 (String.prototype.substring, String.prototype.slice)와 같은 다른 문자열 작업은 유사하게 처리해야합니다.
Base64 트랜스 코딩
Base64는 문자를 인쇄 가능한 문자로 변환 할 수있는 인코딩 방법입니다. 이 인코딩 방법은 주로 암호화하지 않고 특수 문자를 피하고 프로그램 처리를 단순화하는 데 사용됩니다.
JavaScript는 기본적으로 두 가지 Base64 관련 방법을 제공합니다.
var string = 'Hello World!'; btoa (string) // "sgvsbg8gv29ybgqh"atob ( 'sgvsbg8gv29ybgqh') // "Hello World!" 이 두 가지 방법은 비 ASCII 문자에게는 적합하지 않으며 오류를보고합니다. BTOA ( 'Hello') // ucted Domexception : 인코딩 할 문자열에는 Latin1 범위 외부의 문자가 포함되어 있습니다. 비 ASCII 문자를 Base64 인코딩으로 변환하려면 트랜스 코딩 링크를 중간에 삽입 한 다음이 두 가지 방법을 사용해야합니다. 함수 b64encode (str) {return btoa (encodeuricomponent (str));} 함수 b64decode (str) {return decodeUricomponent (atob (str));} b64encode ( 'hello') // "juu0jujejuewjuu1jue1juje"b64decode ( 'juu0jujejuewjuu1jue1juje') // "hello"