JavaScript字符串

一、概述

字符串在JavaScript中几乎无处不在,在你处理用户的输入数据的时候,在读取或设置DOM对象的属性时,在操作cookie时,当然还有更 多…。JavaScript的核心部分提供了一组属性和方法用于通用的字符串操作,如分割字符串,改变字符串的大小写,操作子字符串等。
当前的大部分浏览器也能从强大的正则表达式获益,因为它极大地简化了大量的字符串操作任务,不过它也需要你克服一条有些陡峭的学习曲线。在这里,主要是介绍字符串本身的一些操作,正则表达式会在以后的随笔中涉及。

二、字符串的创建

创建一个字符串有几种方法。最简单的是用引号将一组字符包起来,可以将其赋值给一个变量。

1
var str = "Hello,String!";

可以用双引号或者单引号将字符串包含,但要注意的是,作为定界字符串的一对引号必须是相同的,不能混用。

var str = "Fluffy is a pretty cat.'; 这样的声明是非法的。

允许使用两种引号,使得某些操作变得简单,比如将一种嵌入另外一种:

document.write("<img src='imh/logo.jpg' height='30' width='100' alt='logo'>");

我们在上面脚本创建的几个字符串,但本质上,它们并不是真正的字符串对象,准确的说,他们是字符串类型的值。要创建一个字符串对象,可使用如下语句:

var strObj = new String("Hello,String!");

使用typeof运算符查看会发现,上面的str类型是String,而strObj类型为object。如果想知道字符串的长度,使用其length属性:str.length。

三、字符串方法

1、查找方法

查找字符

charAt()

  1. 功能:

    返回字符串中的第n个字符
  2. 返回值:

    字符串中的第n个字符的实际值
  3. 参数:

    数字类型,超出范围会返回空字符串。
1
2
var str = "hello world!";
console.log(str.charAt(4)); // 结果为o

charCodeAt()

  1. 功能:

    返回字符串中的第n个字符的代码
  2. 返回值:

    · 内容:
    字符串中的第n个字符的Unicode编码。

    · 范围:
    0~65535之间的16为整数。
  3. 参数:

    数字类型,超出范围会返回空字符串。
1
2
var str = "hello world!";
console.log(str.charCodeAt(4)); // 结果为111

formCharCode()

  1. 功能:

    根据字符编码创建字符串
  2. 返回值:

    有指定编码字符组成的新字符串
  3. 参数:

    0个或多个整数,代表字符的Unicode编码
  4. 特性:

    静态方法,实为构造函数String()的属性
1
console.log(String.fromCharCode(101)); // 结果为e

charAt与charCodeAt比较:

  1. 共性:

    · 功能:根据下标查找指定字符

    · 参数:1.n,要查询的字符下标;2.有效范围:0~length-1之间。
  2. charAt与charCodeAt互为反操作

查找位置

indexOf()

从前向后检索字符串,看其是否含有指定子串。

lastIndexOf()

从后向前检索字符串,看其是否含有指定子串。

二者的共性

  1. 功能:

    都是根据制定字符串查找下标位置

  2. 参数:
    · 必选:将要查询的子字符串;
    · 可选:开始查找的位置下标;
        a.值为负数时,视作0;
        b.默认从起始位置开始查找;
        c.超出0~length-1时候,返回-1;

  3. 返回值:
    · 找到指定子串,返回子串首次出现的下标;
    · 未找到指定子串,返回-1;

匹配查找

match()

功能:找到一个或多个正则表达式的匹配

正则表达式会在以后的随笔中涉及

参数:
  1. 要进行模式匹配的正则表达式
  2. 当为非正则表达式时将其传递给RegExp()构造函数,并转换为正则表达式对象。
返回值:

返回一个数组,数组存放匹配的结果

  1. 有全局标记g:执行全局检索。
    · 找到后返回数组
        a. 内容:所有匹配的子串;
        b. 缺陷:没有派生属性;不提供与字表达式匹配的文本信息;不声明每个字符串的位置。
        c. 弥补:使用RegExp.exec()方法。
    · 没有找到:返回Null。
  2. 无全局标记g:执行一次匹配。
    · 找到后返回数组
        a. 内容:第0个元素,匹配文本;其他元素:与正则子表达式匹配的文本。
        b. 属性:input:使用该方法的字符串对象;index:匹配文本的起始字符在字符串中的位置;lastIndex:匹配文本的末尾字符在字符串中的位置。
    · 没有找到:返回Null。
  1. 功能:检索字符串中与正则表达式匹配的子串;
  2. 参数:与match()相同;
  3. 返回值:
    · 找到:字符串中的第一个与正则表达式相匹配的子串的起始位置;
  4. 特性:忽略全局标记g和lastIndex()属性;

replace()

  1. 功能:替换一个与正则表达式匹配的子串;
  2. 参数:参数1,需要进行替换的正则表达式对象或者字符串;参数2,替换文本或替换函数。
  3. 特性:
    · 如果参数1仅为字符串则只进行一次匹配替换,若替代所有的子串则必须制定全局标记g;
    · 如果参数2仅为字符串则可以使用特殊字符序列:
         $$,$;
         $&,匹配整个模式的子字符串;
         $’,匹配的子字符串之前的子字符串;
         $`,匹配的子字符串之后的子字符串;
         $n,匹配第n个捕获组的子字符串(n=0~9);
         $nn,匹配第nn个捕获组的子字符串(nn=01~99);

split()

  1. 功能:根据制定分隔符将字符串分割成多个字串,并返回成数组;
  2. 参数:
    · 必须:指定的分隔符;
    · 可选:指定数组的长度。

2.操作方法

拼接操作concat()

  1. 语法:string.concat(value);
  2. 功能:连接字符串;
  3. 参数:要连接到string上的一个或多个值;
  4. 返回值:把所有参数都连接到字符串string上得到的新字符串;
  5. 特性:功能与”+”相同,原始字符串的实际值并未被正真修改。

截取方法:

根据下标截取字符串

  1. slice(),当参数为负值时,与字符串长度相加;
  2. substring(),当参数为负值时,转换成0.

二者的共性:参数二是截取的子字符串的最后一个字符后面的下标

根据长度截取子串

substr():

  1. 参数二:返回的字符个数
  2. 负值参数:
    · 参数1:与字符串长度相加;
    · 参数2:转换成0.

slice(),substring()以及substr()三者的共性:
(1) 功能:截取被操作字符串中的子串;
(2) 参数1:指定子串的开始位置;
(3) 省略参数2:以字符串长度为结束位置。

空格处理

  1. trim ,清除前置及后缀空格(只能清除两边的空格!)
  2. trimLeft,清除前置空格;
  3. trimRight,清除后缀空格。

比较方法

localCompare()

  1. 功能:用本地特定顺序比较两个字符串;
  2. 参数:与原字符串进行比较的字符串;
  3. 返回值,(说明比较结果的数字):
    · 负数:原字符串<参数字符串;
    · 0:原字符串=参数字符串;
    · 正数:原字符串>参数字符串。

3.编码方法

  1. 字符串常规编码与解码:
    · escape();
    · unescape();
  2. URI字符串编码与解码:
    · eccodeURI();
    · decodeURI();
  3. URI组件编码与解码:
    · eccodeURIComponent();
    · decodeURIComponent();

4.转换方法

大小写转换:

  1. 转为大写:
    · toUpperCase();
    · toLocalUpperCase(); 本地
  2. 转为小写:
    · toLowerCase();
    · toLocalLowerCase(); 本地
  3. 代码转换:用JS动态格式化html,不具语义性,舍弃。