## 一、概述
`String`对象是 JavaScript 原生提供的三个包装对象之一,用来生成字符串对象。
~~~
var s1 = 'abc';
var s2 = new String('abc');
typeof s1 // "string"
typeof s2 // "object"
s2.valueOf() // "abc"
~~~
上面代码中,变量`s1`是字符串,`s2`是对象。由于`s2`是字符串对象,`s2.valueOf`方法返回的就是它所对应的原始字符串。
## 二、静态方法
### 2.1 String.fromCharCode()
该方法的参数是一个或多个数值,代表 Unicode 码点,返回值是这些码点组成的字符串。
~~~
String.fromCharCode() // ""
String.fromCharCode(97) // "a"
String.fromCharCode(104, 101, 108, 108, 111)
// "hello"
~~~
## 三、实例属性
### 3.1 String.prototype.lenth
字符串实例的`length`属性返回字符串的长度。
~~~
'abc'.length // 3
~~~
## 四、实例方法
### 4.1 String.prototype.charAt()
`charAt`方法返回指定位置的字符,参数是从`0`开始编号的位置。
~~~
var s = new String('abc');
s.charAt(1) // "b"
s.charAt(s.length - 1) // "c"
~~~
如果参数为负数,或大于等于字符串的长度,`charAt`返回空字符串。
~~~
'abc'.charAt(-1) // ""
'abc'.charAt(3) // ""
~~~
### 4.2 String.prototype.charCodeAt()
`charCodeAt`方法返回字符串指定位置的 Unicode 码点(十进制表示),相当于`String.fromCharCode()`的逆操作。
~~~
'abc'.charCodeAt(1) // 98
~~~
上面代码中,`abc`的`1`号位置的字符是`b`,它的 Unicode 码点是`98`。
如果参数为负数,或大于等于字符串的长度,`charCodeAt`返回`NaN`。
~~~
'abc'.charCodeAt(-1) // NaN
'abc'.charCodeAt(4) // NaN
~~~
### 4.3 String.prototype.concat()
`concat`方法用于连接两个字符串,返回一个新字符串,不改变原字符串。
~~~
var s1 = 'abc';
var s2 = 'def';
s1.concat(s2) // "abcdef"
s1 // "abc"
~~~
该方法可以接受多个参数。
~~~
'a'.concat('b', 'c') // "abc"
~~~
### 4.4 String.prototype.slice()
`slice`方法用于从原字符串取出子字符串并返回,不改变原字符串。它的第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置)。
~~~
'JavaScript'.slice(0, 4) // "Java"
~~~
如果省略第二个参数,则表示子字符串一直到原字符串结束。
~~~
'JavaScript'.slice(4) // "Script"
~~~
如果参数是负值,表示从结尾开始倒数计算的位置,即该负值加上字符串长度。
~~~
'JavaScript'.slice(-6) // "Script"
'JavaScript'.slice(0, -6) // "Java"
'JavaScript'.slice(-2, -1) // "p"
~~~
如果第一个参数大于第二个参数,`slice`方法返回一个空字符串。
~~~
'JavaScript'.slice(2, 1) // ""
~~~
### 4.5 String.prototype.substring()
`substring`方法用于从原字符串取出子字符串并返回,不改变原字符串,跟`slice`方法很相像。它的第一个参数表示子字符串的开始位置,第二个位置表示结束位置(返回结果不含该位置)。
~~~
'JavaScript'.substring(0, 4) // "Java"
~~~
如果省略第二个参数,则表示子字符串一直到原字符串的结束。
~~~
'JavaScript'.substring(4) // "Script"
~~~
如果第一个参数大于第二个参数,`substring`方法会自动更换两个参数的位置。
~~~
'JavaScript'.substring(10, 4) // "Script"
// 等同于
'JavaScript'.substring(4, 10) // "Script"
~~~
如果参数是负数,`substring`方法会自动将负数转为0。
~~~
'JavaScript'.substring(-3) // "JavaScript"
'JavaScript'.substring(4, -3) // "Java"
~~~
### 4.6 String.prototype.substr()
`substr`方法用于从原字符串取出子字符串并返回,不改变原字符串,跟`slice`和`substring`方法的作用相同。`substr`方法的第一个参数是子字符串的开始位置(从0开始计算),第二个参数是子字符串的长度。
~~~
'JavaScript'.substr(4, 6) // "Script"
~~~
如果省略第二个参数,则表示子字符串一直到原字符串的结束。
~~~
'JavaScript'.substr(4) // "Script"
~~~
如果第一个参数是负数,表示倒数计算的字符位置。如果第二个参数是负数,将被自动转为0,因此会返回空字符串。
~~~
'JavaScript'.substr(-6) // "Script"
'JavaScript'.substr(4, -1) // ""
~~~
### 4.7 String.prototype.indexOf(), String.prototype.lastIndexOf()
`indexOf`方法用于确定一个字符串在另一个字符串中第一次出现的位置,返回结果是匹配开始的位置。如果返回`-1`,就表示不匹配。
~~~
'hello world'.indexOf('o') // 4
'JavaScript'.indexOf('script') // -1
~~~
`indexOf`方法还可以接受第二个参数,表示从该位置开始向后匹配。
~~~
'hello world'.indexOf('o', 6) // 7
~~~
`lastIndexOf`方法的用法跟`indexOf`方法一致,主要的区别是`lastIndexOf`从尾部开始匹配,`indexOf`则是从头部开始匹配。
~~~
'hello world'.lastIndexOf('o') // 7
~~~
另外,`lastIndexOf`的第二个参数表示从该位置起向前匹配。
~~~
'hello world'.lastIndexOf('o', 6) // 4
~~~
### 4.8 String.prototype.trim()
`trim`方法用于去除字符串两端的空格,返回一个新字符串,不改变原字符串。
~~~
' hello world '.trim() // "hello world"
~~~
该方法去除的不仅是空格,还包括制表符(`\t`、`\v`)、换行符(`\n`)和回车符(`\r`)。
### 4.9 String.prototype.toLowerCase(), String.prototype.toUpperCase()
`toLowerCase`方法用于将一个字符串全部转为小写,`toUpperCase`则是全部转为大写。它们都返回一个新字符串,不改变原字符串。
~~~
'Hello World'.toLowerCase() // "hello world"
'Hello World'.toUpperCase() // "HELLO WORLD"
~~~
- 阶段一 Java 零基础入门
- 步骤1:基础语法
- 第01课 初识
- 第02课 常量与变量
- 第03课 运算符
- 第04课 选择结构
- 第05课 循环结构
- 第06课 一维数组
- 第08课 方法
- 第09课 数组移位与统计
- 第10课 基础语法测试
- 第09课 基础语法测试(含答案)
- 步骤2:面向对象
- 第01课 类和对象
- 第02课 封装
- 第03课 学生信息管理
- 第04课 继承
- 第05课 单例模式
- 第06课 多态
- 第07课 抽象类
- 第08课 接口
- 第09课 内部类
- 第10课 面向对象测试
- 第10课 面向对象测试(含答案)
- 步骤3:常用工具类
- 第01课 异常
- 第02课 包装类
- 第03课 字符串
- 第04课 集合
- 第05课 集合排序
- 第06课 泛型
- 第07课 多线程
- 第08课 输入输出流
- 第09课 案例:播放器
- 第10课 常用工具测试(一)
- 第10课 常用工具测试(一)(答案)
- 第10课 常用工具测试(二)
- 第10课 常用工具测试(二)(答案)
- 阶段二 从网页搭建入门 JavaWeb
- 步骤1:HTML 与 CSS
- 第01课 HTML 入门
- 第01课 HTML 入门(作业)
- 第02课 CSS 入门
- 第02课 CSS 入门(作业)
- 第03课 CSS 布局
- 第03课 CSS 布局(作业)
- 步骤2:JavaScript 与前端案例
- 第01课 JavaScript 入门
- 第01课 JavaScript 入门(作业)
- 第02课 仿计算器
- 第03课 前端油画商城案例
- 第04课 轮播图
- 第05课 网页搭建测试
- 第05课 网页搭建测试(含答案)
- 步骤3:JavaScript 教程
- 入门
- 概述
- 基本语法
- 数据类型
- 概述
- 数值
- 字符串
- undefined, null 和布尔值
- 对象
- 函数
- 数组
- 运算符
- 算术运算符
- 比较运算符
- 布尔运算符
- 位运算符
- 运算顺序
- 语法专题
- 数据类型的转换
- 错误处理机制
- 标准库
- String
- Date
- Math
- DOM
- 概述
- Document 节点
- 事件
- EventTarget 接口
- 事件模型
- 常见事件
- 阶段三 数据库开发与实战
- 步骤1:初始数据库操作
- 第01课 数据类型
- 第02课 表的管理
- 第03课 数据管理
- 第04课 常用函数
- 第05课 JDBC 入门
- 第06课 Java 反射
- 第07课 油画商城
- 第08课 数据库基础测试
- 步骤2:MyBatis 从入门到进阶
- 第01课 IntelliJ IDEA 开发工具入门
- 第02课 Maven 入门
- 第03课 工厂模式
- 第04课 MyBatis 入门
- 第05课 MyBatis 进阶
- 第06课 商品信息管理
- 第07课 MyBatis 基础测试
- 步骤3:Redis 数据库与 Linux 下项目部署
- 第01课 Linux 基础
- 第02课 Linux 下 JDK 环境搭建及项目部署
- 第03课 Redis 入门
- 阶段四 SSM 到 Spring Boot 入门与综合实战
- 步骤1:Spring 从入门到进阶
- 第01课 Spring 入门
- 第02课 Spring Bean 管理
- 第03课 Spring AOP
- 第04课 基于 AspectJ 的 AOP 开发
- 第05课 JDBC Template
- 第06课 Spring 事务管理
- 第07课 人员管理系统开发
- 第08课 Spring 从入门到进阶测试
- 步骤2:Spring MVC 入门与 SSM 整合开发
- 第01课 Spring MVC 入门与数据绑定
- 第02课 Restful 风格的应用
- 第03课 SpringMVC 拦截器
- 第04课 办公系统核心模块
- 步骤3:Spring Boot 实战
- 第01课 Spring Boot 入门
- 第02课 校园商铺项目准备
- 第03课 校园商铺店铺管理
- 第04课 校园商铺商品管理及前台展示
- 第05课 校园商铺框架大换血
- 步骤4:Java 面试
- 第01课 面试准备
- 第02课 基础面试技巧
- 第03课 Web基础与数据处理
- 第04课 主流框架