Javascript String

一、概述

1.1 语法

var str = 'text';             // 字面值/直接量
var str = new String('text'); // 对象
var str = String('text');     // 类型转换函数

1.2 下标图示

i am a string
0123456789111
          012
-------------()
1111987654321
3210

二、静态方法

// 将指定的 Unicode 值序列转换字符串
String.fromCharCode(num1[, ...[, numN]])

三、实例对象

3.1 属性

// 字符串长度
String.prototype.length

3.2 方法

3.2.1 提取

// 提取返回字符串片断
// [beginSlice, endSlice), 缺省 endSlice 则 [beginSlice, END]
// 支持负数下标
String.prototype.slice(beginSlice[, endSlice])

// 提取返回字符串片断
// [indexStart, indexEnd), substring(start, end) == str.substring(end, start), 缺省 indexEnd 则 [indexStart, END]
// 不支持负数下标, 负数会被当做 0
String.prototype.substring(indexStart[, indexEnd])

// 从 start 开始提取长度为 length(如果有这么多的话) 的字符串
// length 负数会被当做 0, 缺省 length 则 [start, END]
// 支持负数下标
String.prototype.substr(start [, length])

// 以 separator(可以是 regexp) 为分割字符返回包含 limit(如果有这么多的话) 个元素的字符串数组
String.prototype.split([separator[, limit]])

// 返回在指定位置 index 的字符, 缺省 index 则返回 charAt(0)
// 不支持负数下标
String.prototype.charAt(index)

// 返回在指定位置 index 的字符 UTF-16 编码, 缺省 index 则返回 charCodeAt(0)
// 不支持负数下标
String.prototype.charCodeAt(index)

3.2.2 匹配替换

// 从 fromIndex 下标(包含)开始匹配 searchValue, 返回首次匹配的下标, 无匹配则返回 -1
// fromIndex 默认为 0, fromIndex <= 0 => fromIndex = 0,  fromIndex >= str.length => 不进行匹配并返回 -1
String.prototype.indexOf(searchValue[, fromIndex])

// 反向匹配 searchValue, 返回首次匹配的下标, 无匹配则返回 -1
// fromIndex 默认为 +Infinity, romIndex <= 0 => romIndex = 0, fromIndex >= str.length => fromIndex = +Infinity
String.prototype.lastIndexOf(searchValue[, fromIndex])

  fromIndex
      |
      v
 0123456789
'abcabcabc'.lastIndexOf('ca', 5)
      ca     <-- 匹配1, 成功则返回下标并不再进行匹配
     ca      <-- 匹配2
    ca       <-- 匹配3
   ca        <-- 匹配4
  ca         <-- 匹配5
 ca          <-- 匹配6

// 匹配正则表达式 regexp, 成功则返回首次匹配的下标, 否则返回 -1
String.prototype.search(regexp)

// 匹配正则表达式 regexp, 没有匹配返回 null
// regexp 带 g 修饰符, 匹配则返回包含所有匹配字符串的数组
// regexp 不带 g 修饰符, 匹配则返回包含匹配字符串([0]), 匹配字符串下标(['index']), 匹配源字符串(['input'])的数组
String.prototype.match(regexp)

// 字符串替换, 比较强大, 具体使用翻文档
String.prototype.replace(regexp|substr, newSubStr|func)

3.2.3 拼接弃空

// 拼接一个或多个字符串
String.prototype.concat(str1[, ...[, strN]])

// 去除字符串两边的空白
String.prototype.trim()

3.2.4 大小写转换

String.prototype.toUpperCase() // 转换为大写
String.prototype.toLowerCase() // 转换为小写

四、其他

4.1 字面值多行写法

// 写法一
var str = 'he\
    llo \
    world!';

// 写法二, 推荐用法
var str = 'he' +
    'llo' +
    'world!';

4.2 包装对象/临时对象

var str = 'hello world!';
var subStr = str.substring(str.indexOf(' ')+1, str.length);

这里 str 并不是字符串对象, 却可以引用字符串对象的属性. 原因在于当引用字符串 str 的属性时, javascript 引擎就会通过调用 new String(str) 的方式创建一个临时对象, 这样通过此临时对象便可以引用字符串属性了. 当引用结束后, 这个临时对象会被销毁.

粤ICP备17158558号-1