이 글에서는 javascript에 대한 관련 지식을 소개하는데, 주로 문자열에 대한 관련 지식을 소개합니다. 주로 사용되는 기본 메소드, 특수 문자, 이모티콘 내부 표현 등에 대해 소개합니다. 함께 살펴보시기 바랍니다. 그것은 모두에게 도움이 됩니다.
[관련 권장 사항: javascript 비디오 튜토리얼, 웹 프론트 엔드]
어떤 프로그래밍 언어이든 문자열은 중요한 데이터 유형입니다. JavaScript 코드에 대해 자세히 알아보려면 저를 팔로우하세요. >끈 지식! <code>JavaScript
字符串知识吧!
字符串就是由字符组成的串,如果学习过C
、Java
就应该知道,字符本身也可以独立成为一个类型。但是,JavaScript
没有单个的字符类型,只有长度为1
的字符串。
JavaScript
的字符串采用固定的UTF-16
编码,不论我们编写程序时采用何种编码,都不会影响。
字符串有三种写法:单引号、双引号、反引号。
let single = 'abcdefg';//单引号let double = "asdfghj";//双引号let backti = `zxcvbnm`;//反引号
单、双引号具有相同的地位,我们不做区分。
字符串格式化
反引号允许我们使用${...}
优雅的格式化字符串,取代使用字符串加运算。
let str = `I'm ${Math.round(18.5)} years old.`;console.log(str);
代码执行结果:
多行字符串
反引号还可以允许字符串跨行,当我们编写多行字符串的时候非常有用。
let ques = `Is the author handsome? A. Very handsome; B. So handsome; C. Super handsome;`;console.log(ques);
代码执行结果:
是不是看起来觉得也没有什么?但是使用单双引号是不能实现的,如果想要得到同样的结果可以这么写:
let ques = 'Is the author handsome?\nA. Very handsome;\nB. So handsome;\nC. Super handsome;';console.log(ques);
以上代码包含了一个特殊字符n
,它是我们编程过程中最常见的特殊字符了。
字符n
又名"换行符",支持单双引号输出多行字符串。当引擎输出字符串时,若遇到n
,就会另换一行继续输出,从而实现多行字符串。
虽然n
看起来是两个字符,但是只占用一个字符位置,这是因为在字符串中是转义符,被转义符修饰的字符就变成了特殊字符。
特殊字符列表
特殊字符 | 描述 |
---|---|
n |
换行符,用于新起一行输出文字。 |
r |
回车符,将光标移到行首,在Windows 系统中使用rn 表示一个换行,意思是光标需要先到行首,然后再到下一行才可以换一个新的行。其他系统直接使用n 就可以了。 |
' "
|
单双引号,主要是因为单双引号是特殊字符,我们想在字符串中使用单双字符就要转义。 |
\ |
反斜杠,同样因为 是特殊字符,如果我们就是想输出 本身,就要对其转义。 |
b f v
|
退格、换页、垂直标签——已经不再使用。 |
xXX |
编码为XX 的十六进制Unicode 字符,例如:x7A 表示z (z 的十六进制Unicode 编码为7A )。 |
uXXXX |
编码为XXXX 的十六进制Unicode 字符,例如:u00A9 表示 © 。 |
u{X...X} (1-6 个十六进制字符) |
UTF-32 编码为X...X 的Unicode 머리말 | 문자열은 문자로 구성된 문자열입니다.
console.log('I\'m a student.');// \'console.log("\"I love U\"");// \"console.log("\n is new line character.");// \nconsole.log('\u00A9')// ©console.log('\u{1F60D}');//
${...}
를 사용하여 문자열 형식을 우아하게 지정할 수 있습니다. 🎜console.log("I'm a student."); //双引号中使用单引号console.log('"" is used.'); //单引号中使用双引号console.log(`' " is used.`); //反引号中使用单双引号
console.log("HelloWorld\n".length);//11
let str = "The author is handsome."; console.log(str[0]);//Tconsole.log(str[4]);//aconsole.log(str[str.length-1]);//.
n
이 포함되어 있습니다. 프로그래밍 프로세스 문자의 특수 문자입니다. 🎜n
("개행 문자"라고도 함)은 작은 따옴표와 큰 따옴표를 지원하여 여러 줄 문자열을 출력합니다. 엔진이 문자열을 출력할 때 n
을 만나면 계속해서 다른 줄에 출력하여 여러 줄의 문자열을 구현합니다. 🎜🎜n
은 두 문자처럼 보이지만 문자열에서
가 이스케이프 문자이기 때문에 한 문자 위치만 차지합니다. 이스케이프 문자로 수정하면 특수 문자가 됩니다. 🎜🎜특수문자 목록🎜특수문자 | 설명 | 🎜||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
n 🎜 |
줄 바꿈 문자로, 출력 텍스트의 새 줄을 시작하는 데 사용됩니다. 🎜🎜 | ||||||||||||
r 🎜 |
캐리지 리턴 문자, 커서를 줄의 시작 부분으로 이동, Windows 에서 rn 사용 > system >은 줄바꿈을 나타냅니다. 즉, 커서가 먼저 줄의 시작 부분으로 이동한 후 다음 줄로 이동해야 새 줄로 변경될 수 있습니다. 다른 시스템에서는 n 을 직접 사용할 수 있습니다. 🎜🎜 |
||||||||||||
' " 🎜 |
작은따옴표와 큰따옴표, 주로 작은따옴표와 큰따옴표는 특수 문자이므로 작은따옴표를 사용하고 싶습니다. 및 문자열의 큰따옴표 이중 문자는 🎜🎜 | ||||||||||||
\ 🎜 |
백슬래시로 이스케이프해야 합니다. 이는 가 특수 문자이기 때문입니다. 자체를 출력하고 싶을 뿐입니다. 🎜🎜 |
||||||||||||
b f v 🎜백스페이스, 페이지 피드, 세로 탭 - 더 이상 사용되지 않습니다. 🎜🎜 | |||||||||||||
xXX 🎜 |
XX 로 인코딩된 16진수. 문자, 예: x7A 는 z 를 의미합니다(z 코드>의 16진수 유니코드는 7A ) 🎜🎜 |
||||||||||||
uXXXX 🎜 |
는 16진수XXXX code>유니코드 문자로 인코딩됩니다. 예: u00A9 는 © 🎜🎜 |
||||||||||||
u{X...X} (1 -6 16진수 문자)를 의미합니다. ) 🎜 |
UTF-32 는 X...X 기호의 유니코드 로 인코딩됩니다.举个例子: console.log('I\'m a student.');// \'console.log("\"I love U\"");// \"console.log("\\n is new line character.");// \nconsole.log('\u00A9')// ©console.log('\u{1F60D}');// 로그인 후 복사 代码执行结果: 有了转义符 避免使用 对于字符串中的单双引号,我们可以通过在单引号中使用双引号、在双引号中使用单引号,或者直接在反引号中使用单双引号,就可以巧妙的避免使用转义符,例如: console.log("I'm a student."); //双引号中使用单引号console.log('"" is used.'); //单引号中使用双引号console.log(`' " is used.`); //反引号中使用单双引号 로그인 후 복사 로그인 후 복사 代码执行结果如下: .length通过字符串的 console.log("HelloWorld\n".length);//11 로그인 후 복사 로그인 후 복사 这里
访问字符、charAt()、for…of字符串是字符组成的串,我们可以通过 let str = "The author is handsome."; console.log(str[0]);//Tconsole.log(str[4]);//aconsole.log(str[str.length-1]);//. 로그인 후 복사 로그인 후 복사 代码执行结果: 我们还可以使用 let str = "The author is handsome.";console.log(str.charAt(0)); //Tconsole.log(str.charAt(4)); //aconsole.log(str.charAt(str.length-1));//. 로그인 후 복사 二者执行效果完全相同,唯一的区别在于越界访问字符时: let str = "01234";console.log(str[9]);//undefinedconsole.log(str.charAt(9));//""(空串) 로그인 후 복사 我们还可以使用 for(let c of '01234'){ console.log(c);} 로그인 후 복사 字符串不可变
let str = "Const";str[0] = 'c' ;console.log(str); 로그인 후 복사 代码执行结果: 如果想获得一个不一样的字符串,只能新建: let str = "Const";str = str.replace('C','c');console.log(str); 로그인 후 복사 看起来我们似乎改变了字符串,实际上原来的字符串并没有被改变,我们得到的是 .toLowerCase()、.toUpperCase()转换字符串大小写,或者转换字符串中单个字符的大小写。 这两个字符串的方法比较简单,举例带过: console.log('Good Boy'.toLowerCase());//good boyconsole.log('Good Boy'.toUpperCase());//GOOD BOYconsole.log('Good Boy'[5].toLowerCase());//b 로그인 후 복사 代码执行结果: .indexOf()、.lastIndexOf() 查找子串
let str = "google google";console.log(str.indexOf('google')); //0 idx默认为0console.log(str.indexOf('google',1)); //7 从第二个字符开始查找console.log(str.indexOf('xxx')); //-1 没找到返回-1 로그인 후 복사 代码执行结果: 如果我们想查询字符串中所有子串位置,可以使用循环: let str = "I love love love love u.";let sub = "love";let pos = -1;while((pos = str.indexOf(sub,pos+1)) != -1) console.log(pos); 로그인 후 복사 代码执行结果如下:
let str = "google google";console.log(str.lastIndexOf('google'));//7 idx默认为0 로그인 후 복사 按位取反技巧(不推荐,但要会)由于 let str = "google google";if(~indexOf('google',str)){ ...} 로그인 후 복사 通常情况下,我们不推荐在不能明显体现语法特性的地方使用一个语法,这会在可读性上产生影响。好在以上代码只出现在旧版本的代码中,这里提到就是为了大家在阅读旧代码的时候不会产生困惑。
.includes()、.startsWith()、.endsWith()
.JavaScript 문자열의 일반적인 기본 방법에 대한 자세한 소개、.JavaScript 문자열의 일반적인 기본 방법에 대한 자세한 소개、.JavaScript 문자열의 일반적인 기본 방법에 대한 자세한 소개
对比三者的区别:
.JavaScript 문자열의 일반적인 기본 방법에 대한 자세한 소개、JavaScript 문자열의 일반적인 기본 방법에 대한 자세한 소개我们在前文中已经提及过字符串的比较,字符串按照字典序进行排序,每个字符背后都是一个编码, 例如: console.log('a'>'Z');//true 로그인 후 복사 字符之间的比较,本质上是代表字符的编码之间的比较。 console.log('a'.codePointAt(0));//97console.log('Z'.codePointAt(0));//90 로그인 후 복사 代码执行结果: 使用 console.log(String.fromCodePoint(97));console.log(String.fromCodePoint(90)); 로그인 후 복사 代码执行结果如下: 这个过程可以用转义符 console.log('\u005a');//Z,005a是90的16进制写法console.log('\u0061');//a,0061是97的16进制写法 로그인 후 복사 下面我们探索一下编码为 let str = '';for(let i = 65; i<p>代码执行部分结果如下:</p><p><img src="https://img.php.cn/upload/article/000/000/067/0f4e2a78ef52090d845bd32f6b72d01c-17.png" alt="JavaScript 문자열의 일반적인 기본 방법에 대한 자세한 소개"></p><p>上图并没有展示所有的结果,快去试试吧。</p><h2>.localeCompare()</h2><p>基于国际化标准<code>ECMA-402</code>,<code>JavaScript</code>已经实现了一个特殊的方法(<code>.localeCompare()</code>)比较各种字符串,采用<code>str1.localeCompare(str2)</code>的方式:</p><ol> <li>如果<code>str1 ,返回负数;</code> </li> <li>如果<code>str1 > str2</code>,返回正数;</li> <li>如果<code>str1 == str2</code>,返回0;</li> </ol><p>举个例子:</p><pre class="brush:php;toolbar:false">console.log("abc".localeCompare('def'));//-1 로그인 후 복사 为什么不直接使用比较运算符呢? 这是因为英文字符有一些特殊的写法,例如, console.log('á' <p>虽然也是<code>a</code>,但是比<code>z</code>还要大!!</p><p>此时就需要使用<code>.localeCompare()</code>方法:</p><pre class="brush:php;toolbar:false">console.log('á'.localeCompare('z'));//-1 로그인 후 복사 常用方法
还有很多其他方法,我们可以访问手册获取更多知识。 进阶内容生僻字、JavaScript 문자열의 일반적인 기본 방법에 대한 자세한 소개、特殊符号
这种时候就需要扩展,使用更长的位数( console.log(''.length);//2console.log('?'.length);//2 로그인 후 복사 代码执行结果: 这么做的结果是,我们无法使用常规的方法处理它们,如果我们单个输出其中的每个字节,会发生什么呢? console.log(''[0]);console.log(''[1]); 로그인 후 복사 代码执行结果: 可以看到,单个输出字节是不能识别的。 好在 我们可以通过判断一个字符的编码范围,判断它是否是一个特殊字符,从而处理特殊字符。如果一个字符的代码在 举个例子: console.log(''.charCodeAt(0).toString(16));//d83 dconsole.log('?'.charCodeAt(1).toString(16));//de02 로그인 후 복사 代码执行结果: 规范化在英文中,存在很多基于字母的变体,例如:字母 为了支持所有的变体组合,同样使用多个 console.log('a\u0307');//ȧ console.log('a\u0308');//ȧ console.log('a\u0309');//ȧ console.log('E\u0307');//Ė console.log('E\u0308');//Ë console.log('E\u0309');//Ẻ 로그인 후 복사 代码执行结果: 一个基础字母还可以有多个装饰,例如: console.log('E\u0307\u0323');//Ẹ̇ console.log('E\u0323\u0307');//Ẹ̇ 로그인 후 복사 代码执行结果: 这里存在一个问题,在多个装饰的情况下,装饰的排序不同,实际上展示的字符是一样的。 如果我们直接比较这两种表示形式,却会得到错误的结果: let e1 = 'E\u0307\u0323'; let e2 = 'E\u0323\u0307'; console.log(`${e1}==${e2} is ${e1 == e2}`) 로그인 후 복사 代码执行结果: 为了解决这种情况,有一个** <span style="max-width:90%" microsoft yahei sans gb helvetica neue tahoma arial sans-serif>let e1 = 'E\u0307\u0323';<br>let e2 = 'E\u0323\u0307';<br>console.log(`${e1}==${e2} is ${e1.normalize() == e2.normalize()}`)</span><br> 로그인 후 복사 代码执行结果: 【相关推荐:javascript视频教程、web前端】 |
위 내용은 JavaScript 문자열의 일반적인 기본 방법에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!