【重温基本】8.字符串

本文是 重温基本 系列文章的第八篇。
本日感觉:人在他乡,也不能遗忘汤圆。

系列目次:

本章节温习的是JS中的字符串,另有字符串的相干属性和要领。

前置学问:
JavaScript中的字符串的每一个元素,在字符串中都占有一个位置,第一个元素的索引值为0,今后累加,别的建立字符串有2个要领:

  • 1.字面量建立:
let a = 'hello';  // "hello"
typeof a; // "string"
  • 2.字符串对象建立:
let a = new String('hello'); //String {"hello"}
typeof a; // "object"

现实开辟中,除非必要,发起运用字面量建立,由于两种建立要领会有差别:

let a1 = "1+1";
let a2 = new String("1+1");
eval(a1); // number  2
eval(a2); // string  "1+1"

String有一个length属性,示意字符串中字符个数:

let a = "hello";
a.length; // 5

1.String对象要领:

String对象的要领异常多,发起人人能够到 W3school JavaScript String 对象 进修完全的内容。

要领形貌
charAt, charCodeAt, codePointAt返回字符串指定位置的字符或许字符编码。
indexOf, lastIndexOf离别返回字符串中指定子串的位置或末了位置。
startsWith, endsWith, includes返回字符串是不是以指定字符串最先、完毕或包括指定字符串。
concat衔接两个字符串并返回新的字符串。
fromCharCode, fromCodePoint从指定的Unicode值序列组织一个字符串。这是一个String类要领,不是实例要领。
split经由过程将字符串星散成一个个子串来把一个String对象分裂到一个字符串数组中。
slice从一个字符串提取片段并作为新字符串返回。
substring, substr离别经由过程指定肇端和完毕位置,肇端位置和长度来返回字符串的指定子集。
match, replace, search经由过程正则表达式来事情.
toLowerCase, toUpperCase离别返回字符串的小写示意和大写示意。
normalize根据指定的一种 Unicode 正规情势将当前字符串正规化。
repeat将字符串内容反复指定次数后返回。
trim去掉字符串开首和末端的空缺字符。

1.1 charAt

作用:查找字符串中指定位置内容
str.charAt(index) index : 查找的字符的下标(大于即是0,若小于0则返回空字符串),若没传则示意1。

let a = "hello leo!"
a.charAt();  // "h"
a.charAt(1); // "e"
a.charAt(-1);// ""

1.2.indexOf和lastIndexOf

作用:查找指定字符串位置
indexOflastIndexOf相同点:
二者吸收的参数一致,没有查到内容,返回-1
indexOflastIndexOf不同点:
若查找到内容,则indexOf返回第一次涌现的索引lastIndexOf返回末了一次涌现的索引

str.indexOf(value[, fromIndex])吸收2个参数:

  • value : 须要查找的字符串内容;
  • fromIndex : 可选,最先查找的位置,默许0;
let a = 'hello leo';     
let b = a.indexOf('lo');  // 3
let c = a.indexOf('lo',4);// -1
let e = a.lastIndexOf('l');  // 6

肯定要注意:

  1. fromIndex > a.length,则fromIndex被视为a.length
let a = 'hello leo';  
let b = a.indexOf('lo',99);// -1
  1. fromIndex < 0,则fromIndex被视为0
let a = 'hello leo';  
let b = a.indexOf('lo',-1);// 3
  1. indexOflastIndexOf辨别大小写。
let a = 'hello leo'; 
let b = a.indexOf('Lo'); // -1

1.3 concat

作用:衔接字符串。
concat()吸收恣意个参数作为衔接的字符串,返回一个兼并后的新字符串。

let a = 'hello';
let b = ' leo ';
let c = '!'
a.concat(b,c); // "hello leo !"

1.4 split

作用:把字符串支解为字符串数组,并能够指定分隔符。
split(separator[,limit])能够吸收2个参数:

  • separator:必须,字符串或许正则表达式,作为支解的内容;
  • limit:可选,作为指定返回的数组的最大长度;

separator"",则字符串会在每一个字符之间支解;

let a = 'How are you doing today?';
a.split();
// ["How are you doing today?"]
a.split("");
// ["H", "o", "w", " ", "a", "r", "e", " ", "y", "o", "u", " ", "d", "o", "i", "n", "g", " ", "t", "o", "d", "a", "y", "?"]
a.split(" ");
// ["How", "are", "you", "doing", "today?"]
a.split("",4);
// ["H", "o", "w", " "]
a.split(" ",4);
// ["How", "are", "you", "doing"]

运用其他支解标记:

let a = "ni,hao,a!";
a.split(","); // ["ni", "hao", "a!"]

1.5 slice

作用:提取并返回字符串的片段。
slice([start,end]) 能够吸收2个参数:

  • start:要提取的片段的肇端下标,若小于零,则从字符串尾部最先算起,如-1示意字符串末了一个字符,-2为倒数第二个字符等等。
  • end:要提取的片段的完毕下标,若没有传入,则示意从start到字符串末端,若为负数则从字符串尾部最先算起。
let a = 'How are you doing today?';
a.slice();      // "How are you doing today?"
a.slice(1);     // "ow are you doing today?"
a.slice(-1);    // '?'
a.slice(1,5);   // "ow a"
a.slice(1,-1);  // "ow are you doing today"
a.slice(-2,-1); // "y"

2.字符串拓展(ES6)

2.1 includes(),startsWith(),endsWith()

在我们推断字符串是不是包括另一个字符串时,ES6之前,我们只要typeof要领,ES6以后我们又多了三种要领:

  • includes():返回布尔值,示意是不是找到参数字符串
  • startsWith():返回布尔值,示意参数字符串是不是在原字符串的头部
  • endsWith():返回布尔值,示意参数字符串是不是在原字符串的尾部
let a = 'hello leo';
a.startsWith('leo');   // false
a.endsWith('o');       // true
a.includes('lo');      // true

而且这三个要领都支撑第二个参数,示意肇端搜刮的位置。

let a = 'hello leo';
a.startsWith('leo',1);   // false
a.endsWith('o',5);       // true
a.includes('lo',6);      // false

endsWith 是针对前 n 个字符,而其他两个是针对从第n个位置直到完毕。

2.2 repeat()

repeat要领返回一个新字符串,示意将原字符串反复n次。
基本用法

'ab'.repeat(3);        // 'ababab'
'ab'.repeat(0);        // ''

特别用法:

  • 参数为小数,则取整
'ab'.repeat(2.3);      // 'abab'
  • 参数为负数Infinity,则报错
'ab'.repeat(-1);       // RangeError
'ab'.repeat(Infinity); // RangeError
  • 参数为0到-1的小数NaN,则取0
'ab'.repeat(-0.5);     // ''
'ab'.repeat(NaN);      // ''
  • 参数为字符串,则转成数字
'ab'.repeat('ab');     // ''
'ab'.repeat('3');      // 'ababab'

2.3 padStart(),padEnd()

用于将字符串头部尾部补全长度,padStart()头部补全padEnd()尾部补全
这两个要领吸收2个参数,第一个指定字符串最小长度,第二个用于补全的字符串
基本用法

'x'.padStart(5, 'ab');   // 'ababx'
'x'.padEnd(5, 'ab');     // 'xabab'

特别用法:

  • 原字符串长度,大于或即是指定最小长度,则返回原字符串。
'xyzabc'.padStart(5, 'ab'); // 'xyzabc'
  • 用来补全的字符串长度和原字符串长度之和,凌驾指定最小长度,则截去超越部份的补全字符串。
'ab'.padStart(5,'012345'); // "012ab"
  • 省略第二个参数,则用空格补全。
'x'.padStart(4);           // '    x'
'x'.padEnd(4);             // 'x    '

2.4 模版字符串

用于拼接字符串,ES6之前:

let a = 'abc' + 
    'def' + 
    'ghi';

ES6以后:

let a = `
    abc
    def
    ghi
`

拼接变量:
反引号(`)中运用${}包裹变量或要领。

// ES6之前
let a = 'abc' + v1 + 'def';

// ES6以后
let a = `abc${v1}def`

3.字符串拓展(ES7)

用来为字符串添补特定字符串,而且都有两个参数:字符串目的长度添补字段,第二个参数可选,默许空格。

'es8'.padStart(2);          // 'es8'
'es8'.padStart(5);          // '  es8'
'es8'.padStart(6, 'woof');  // 'wooes8'
'es8'.padStart(14, 'wow');  // 'wowwowwowwoes8'
'es8'.padStart(7, '0');     // '0000es8'

'es8'.padEnd(2);            // 'es8'
'es8'.padEnd(5);            // 'es8  '
'es8'.padEnd(6, 'woof');    // 'es8woo'
'es8'.padEnd(14, 'wow');    // 'es8wowwowwowwo'
'es8'.padEnd(7, '6');       // 'es86666'

从上面效果来看,添补函数只要在字符长度小于目的长度时才有用,若字符长度已即是或小于目的长度时,添补字符不会起作用,而且目的长度假如小于字符串自身长度时,字符串也不会做截断处置惩罚,只会原样输出。

参考材料

  1. MDN Text formatting
  2. W3school JavaScript String 对象

本部份内容到这完毕

Author王安然
E-mailpingan8787@qq.com
博 客www.pingan8787.com
微 信pingan8787
逐日文章引荐https://github.com/pingan8787…
JS小册js.pingan8787.com

迎接关注微信民众号【前端自习课】天天清晨,与您一同进修一篇优异的前端手艺博文 .

    原文作者:pingan8787
    原文地址: https://segmentfault.com/a/1190000017483193
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞