字符串构造器方法说起

  字符串作为基本的信息交流的桥梁,几乎被所有的编程语言所实现

  多数开发者几乎每天都在和字符串打交道

  JavaScript通过自动装箱字符串字面量为String对象,更加简化了字符串的使用

  字符串作为基本的信息交流的桥梁,几乎被所有的编程语言所实现(然而c、c++没有提供)。

  多数开发者几乎每天都在和字符串打交道,语言内置的String模块,极大地提升了开发者的效率。

  JavaScript通过自动装箱字符串字面量为String对象,自然地继承了String.prototype的所有方法,更加简化了字符串的使用。

  截止ES6,字符串共包含31个标准的API方法,其中有些方法出镜率较高,需要摸透原理;有些方法之间相似度较高,需要仔细分辨;甚至有些方法执行效率较低,应当尽量少的使用。下面将从String构造器方法说起,逐步帮助你掌握字符串。

  String构造器方法

  fromCharCode

  fromCharCode()方法返回使用指定的Unicode序列创建的字符串,也就是说传入Unicode序列,返回基于此创建的字符串。

  语法:fromCharCode(num1, num2,…),传入的参数均为数字。

  如下这是一个简单的例子,将返回 ABC、abc、*、+、- 和 /:

  <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;">`String.fromCharCode(65, 66, 67); // "ABC"
String.fromCharCode(97, 98, 99); // "abc"
String.fromCharCode(42); // "*"
String.fromCharCode(43); // "+"
String.fromCharCode(45); // "-"
String.fromCharCode(47); // "/"`</pre>

  看起来fromCharCode像是满足了需求,但实际上由于js语言设计时的先天不足(只能处理UCS-2编码,即所有字符都是2个字节,无法处理4字节字符),通过该方法并不能返回一个4字节的字符,为了弥补这个缺陷,ES6新增了fromCodePoint方法,请往下看。

  fromCodePoint(ES6)

  fromCodePoint()方法基于ECMAScript 2015(ES6)规范,作用和语法同fromCharCode方法,该方法主要扩展了对4字节字符的支持。

  <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;">`// "" 是一个4字节字符,我们先看下它的数字形式
"".codePointAt(); // 119558
//调用fromCharCode解析之,返回乱码
String.fromCharCode(119558); // "팆"
//调用fromCodePoint解析之,正常解析
String.fromCodePoint(119558); // ""`</pre>

  除了扩展对4字节的支持外,fromCodePoint还规范了错误处理,只要是无效的Unicode编码,就会抛出错误RangeError: Invalid code point...,这就意味着,只要不是符合Unicode字符范围的正整数(Unicode最多可容纳1114112个码位),均会抛出错误。

  <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;">`String.fromCodePoint('abc'); // RangeError: Invalid code point NaN
String.fromCodePoint(Infinity); // RangeError: Invalid code point Infinity
String.fromCodePoint(-1.23); // RangeError: Invalid code point -1.23`</pre>

  注:进一步了解Unicode编码,推荐这篇文章:浅谈文字编码和Unicode(下):

  如需在老的浏览器中使用该方法,请参考Polyfill

  #Polyfill-浏览器补丁。

  raw(ES6)

  raw() 方法基于ECMAScript 2015(ES6)规范,它是一个模板字符串的标签函数,作用类似于Python的r和C#的@字符串前缀,都是用来获取一个模板字符串的原始字面量。

  语法:

  String.raw(callSite, …substitutions),callSite即模板字符串的“调用点对象”,…substitutions表示任意个内插表达式对应的值,这里理解起来相当拗口,下面我将通俗的讲解它。

  如下是python的字符串前缀r:

<p><pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"># 防止特殊字符串被转义
print r'anbtc' # 打印出来依然是 "anbtc"

python中常用于正则表达式

regExp = r'(?

文章由官网发布,如若转载,请注明出处:https://www.veimoz.com/1482
0 评论
597

发表评论

!