update: 字符串的常见方法
This commit is contained in:
		
							parent
							
								
									730dbee905
								
							
						
					
					
						commit
						673ac4ff04
					
				@ -158,277 +158,6 @@ var obj3 = Object.assign({}, obj);
 | 
			
		||||
- 由开发人员自己创建的对象
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 对象的基本操作
 | 
			
		||||
 | 
			
		||||
### 创建对象
 | 
			
		||||
 | 
			
		||||
使用new关键字调用的函数,是构造函数constructor。**构造函数是专门用来创建对象的函数**。
 | 
			
		||||
 | 
			
		||||
例如:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	var obj = new Object();
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
记住,使用`typeof`检查一个对象时,会返回`object`。
 | 
			
		||||
 | 
			
		||||
### 向对象中添加属性
 | 
			
		||||
 | 
			
		||||
在对象中保存的值称为属性。
 | 
			
		||||
 | 
			
		||||
向对象添加属性的语法:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	对象.属性名 = 属性值;
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
举例:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
    var obj = new Object();
 | 
			
		||||
 | 
			
		||||
    //向obj中添加一个name属性
 | 
			
		||||
    obj.name = "孙悟空";
 | 
			
		||||
 | 
			
		||||
    //向obj中添加一个gender属性
 | 
			
		||||
    obj.gender = "男";
 | 
			
		||||
 | 
			
		||||
    //向obj中添加一个age属性
 | 
			
		||||
    obj.age = 18;
 | 
			
		||||
 | 
			
		||||
    console.log(JSON.stringify(obj)); // 将 obj 以字符串的形式打印出来
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
打印结果:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
	{
 | 
			
		||||
		"name":"孙悟空",
 | 
			
		||||
		"gender":"男",
 | 
			
		||||
		"age":18
 | 
			
		||||
	}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### 获取对象中的属性
 | 
			
		||||
 | 
			
		||||
**方式1**:
 | 
			
		||||
 | 
			
		||||
语法:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	对象.属性名
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
如果获取对象中没有的属性,不会报错而是返回`undefined`。
 | 
			
		||||
 | 
			
		||||
举例:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
    var obj = new Object();
 | 
			
		||||
 | 
			
		||||
    //向obj中添加一个name属性
 | 
			
		||||
    obj.name = "孙悟空";
 | 
			
		||||
 | 
			
		||||
    //向obj中添加一个gender属性
 | 
			
		||||
    obj.gender = "男";
 | 
			
		||||
 | 
			
		||||
    //向obj中添加一个age属性
 | 
			
		||||
    obj.age = 18;
 | 
			
		||||
 | 
			
		||||
    // 获取对象中的属性,并打印出来
 | 
			
		||||
    console.log(obj.gender); // 打印结果:男
 | 
			
		||||
    console.log(obj.color);  // 打印结果:undefined
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
**方式2**:可以使用`[]`这种形式去操作属性
 | 
			
		||||
 | 
			
		||||
对象的属性名不强制要求遵守标识符的规范,不过我们尽量要按照标识符的规范去做。
 | 
			
		||||
 | 
			
		||||
但如果确实要使用特殊的属性名,就不能采用`.`的方式来操作对象的属性。比如说,`123`这种属性名,如果我们直接写成`obj.123 = 789`来操作属性,是会报错的。那怎么办呢?办法如下:
 | 
			
		||||
 | 
			
		||||
语法格式如下:(读取时,也是采用这种方式)
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
// 注意,括号里的属性名,必须要加引号
 | 
			
		||||
对象['属性名'] = 属性值
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
上面这种语法格式,举例如下:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
 obj['123'] = 789;
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
**重要**:使用`[]`这种形式去操作属性,更加的灵活,因为,我们可以在`[]`中直接传递一个**变量**。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 修改对象的属性值
 | 
			
		||||
 | 
			
		||||
语法:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	对象.属性名 = 新值
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	obj.name = "tom";
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 删除对象的属性
 | 
			
		||||
 | 
			
		||||
语法:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	delete obj.name;
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### in 运算符
 | 
			
		||||
 | 
			
		||||
通过该运算符可以检查一个对象中是否含有指定的属性。如果有则返回true,没有则返回false。
 | 
			
		||||
 | 
			
		||||
语法:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	"属性名" in 对象
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
举例:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	//检查obj中是否含有name属性
 | 
			
		||||
	console.log("name" in obj);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
我们平时使用的对象不一定是自己创建的,可能是别人提供的,这个时候,in 运算符可以派上用场。
 | 
			
		||||
 | 
			
		||||
## 对象字面量
 | 
			
		||||
 | 
			
		||||
如果要创建一个对象,我们可以使用下面这种方式:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	var obj = new Object();
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
但是上面的这种方式,比较麻烦,我们还有更简洁的方式来创建一个对象。如下。
 | 
			
		||||
 | 
			
		||||
使用对象字面量来创建一个对象:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	var obj = {};
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
使用对象字面量,可以在创建对象时,直接指定对象中的属性。语法:{属性名:属性值,属性名:属性值....}
 | 
			
		||||
 | 
			
		||||
例如:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	var obj2 = {
 | 
			
		||||
 | 
			
		||||
		name: "猪八戒",
 | 
			
		||||
		age: 13,
 | 
			
		||||
		gender: "男",
 | 
			
		||||
		test: {
 | 
			
		||||
			name: "沙僧"
 | 
			
		||||
		}
 | 
			
		||||
		//我们还可以在对象中增加一个方法。以后可以通过obj2.sayName()的方式调用这个方法
 | 
			
		||||
		sayName: function(){
 | 
			
		||||
			console.log('smyhvae');
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
对象字面量的属性名可以加引号也可以不加,建议不加。如果要使用一些特殊的名字,则必须加引号。
 | 
			
		||||
 | 
			
		||||
属性名和属性值是一组一组的键值对结构,键和值之间使用`:`连接,多个值对之间使用`,`隔开。如果一个属性之后没有其他的属性了,就不要写`,`,因为它是对象的最后一个属性。
 | 
			
		||||
 | 
			
		||||
## 遍历对象中的属性:for ... in
 | 
			
		||||
 | 
			
		||||
语法:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
for (var 变量 in 对象名) {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
解释:对象中有几个属性,循环体就会执行几次。每次执行时,会将对象中的**每个属性的 属性名 赋值给变量**。
 | 
			
		||||
 | 
			
		||||
语法举例:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
for (var key in obj) {
 | 
			
		||||
	console.log(key); // 这里的 key 是:对象属性的键
 | 
			
		||||
	console.log(obj[key]); // 这里的 obj[key] 是:对象属性的值
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
举例:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
 | 
			
		||||
<head>
 | 
			
		||||
	<meta charset="UTF-8">
 | 
			
		||||
	<title></title>
 | 
			
		||||
	<script type="text/javascript">
 | 
			
		||||
		var obj = {
 | 
			
		||||
			name: "smyhvae",
 | 
			
		||||
			age: 26,
 | 
			
		||||
			gender: "男",
 | 
			
		||||
			address: "shenzhen",
 | 
			
		||||
            sayHi: function() {
 | 
			
		||||
                console.log(this.name);
 | 
			
		||||
            }
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		// 遍历对象中的属性
 | 
			
		||||
		for (var key in obj) {
 | 
			
		||||
			console.log("属性名:" + key);
 | 
			
		||||
			console.log("属性值:" + obj[key]); // 注意,因为这里的属性名 keu 是变量,所以,如果想获取属性值,不能写成 obj.key,而是要写成 obj[key]
 | 
			
		||||
		}
 | 
			
		||||
	</script>
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
</body>
 | 
			
		||||
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
打印结果:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
属性名:name
 | 
			
		||||
属性值:smyhvae
 | 
			
		||||
 | 
			
		||||
属性名:age
 | 
			
		||||
属性值:26
 | 
			
		||||
 | 
			
		||||
属性名:gender
 | 
			
		||||
属性值:男
 | 
			
		||||
 | 
			
		||||
属性名:address
 | 
			
		||||
属性值:shenzhen
 | 
			
		||||
 | 
			
		||||
属性名:sayHi
 | 
			
		||||
属性值:function() {
 | 
			
		||||
                    console.log(this.name);
 | 
			
		||||
                }
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## 我的公众号
 | 
			
		||||
 | 
			
		||||
想学习<font color=#0000ff>**代码之外的技能**</font>?不妨关注我的微信公众号:**千古壹号**(id:`qianguyihao`)。
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,75 @@
 | 
			
		||||
 | 
			
		||||
## 前言
 | 
			
		||||
 | 
			
		||||
> 在日常开发中,String对象的使用频率是非常高的。所以有必要详细介绍。
 | 
			
		||||
> 在日常开发中,String 对象(字符串对象)的使用频率是非常高的。所以有必要详细介绍。
 | 
			
		||||
 | 
			
		||||
## 内置对象 String 的常见方法
 | 
			
		||||
需要注意的是:**字符串的所有方法,都不会改变原字符串**(字符串的不可变性),操作完成后会返回一个新的值。
 | 
			
		||||
 | 
			
		||||
### charAt()
 | 
			
		||||
字符串的常见方法如下。
 | 
			
		||||
 | 
			
		||||
## indexOf()/lastIndexOf()
 | 
			
		||||
 | 
			
		||||
> 这个方法,是使用频率最高的一个方法。
 | 
			
		||||
 | 
			
		||||
`indexOf()/lastIndexOf()`:获取指定字符的索引。
 | 
			
		||||
 | 
			
		||||
**语法1**:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
    索引值 = str.indexOf(想要查询的字符);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
解释:`indexOf()` 是从前向后索引字符串的位置。同理,`lastIndexOf()`是从后向前寻找。
 | 
			
		||||
 | 
			
		||||
**作用**:可以检索一个字符串中是否含有指定内容。如果字符串中含有该内容,则会返回其**第一次出现**的索引;如果没有找到指定的内容,则返回 -1。
 | 
			
		||||
 | 
			
		||||
因此可以得出一个技巧:
 | 
			
		||||
 | 
			
		||||
- **如果获取的索引值为0,说明字符串是以查询的参数为开头的**。
 | 
			
		||||
 | 
			
		||||
- 如果获取的索引值为-1,说明这个字符串中没有指定的内容。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
代码举例1:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
    var str = 'abcdea';
 | 
			
		||||
 | 
			
		||||
    //给字符查索引(索引值为0,说明字符串以查询的参数为开头)
 | 
			
		||||
    console.log(str.indexOf("c"));
 | 
			
		||||
    console.log(str.lastIndexOf("c"));
 | 
			
		||||
 | 
			
		||||
    console.log(str.indexOf("a"));
 | 
			
		||||
    console.log(str.lastIndexOf("a"));
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
打印结果:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
**语法2**:
 | 
			
		||||
 | 
			
		||||
这个方法还可以指定第二个参数,用来指定查找的**起始位置**。语法如下:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
    索引值 = str.indexOf(想要查询的字符, [起始位置]);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
代码举例2:(两个参数时,需要特别注意)
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
    var str = 'qianguyihao';
 | 
			
		||||
    result = str.indexOf('a', 3); // 从第三个位置开始查找 'a'这个字符 【重要】
 | 
			
		||||
 | 
			
		||||
    console.log(result); // 打印结果:9
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
上方代码中,`indexOf()`方法中携带了两个参数,具体解释请看注释。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## charAt()
 | 
			
		||||
 | 
			
		||||
`charAt`:返回字符串指定位置的字符。不会修改原字符串。
 | 
			
		||||
 | 
			
		||||
@ -35,7 +99,7 @@
 | 
			
		||||
 | 
			
		||||
上面这个例子一般不用。一般打印数组和json的时候用索引,打印String不建议用索引。
 | 
			
		||||
 | 
			
		||||
### charCodeAt()
 | 
			
		||||
## charCodeAt()
 | 
			
		||||
 | 
			
		||||
`charCodeAt`:返回字符串指定位置的字符的 Unicode 编码。不会修改原字符串。
 | 
			
		||||
 | 
			
		||||
@ -93,7 +157,7 @@
 | 
			
		||||
 | 
			
		||||
另外,sort()方法其实底层也是用到了charCodeAt(),因为用到了Unicode编码。
 | 
			
		||||
 | 
			
		||||
### String.fromCharCode()
 | 
			
		||||
## String.fromCharCode()
 | 
			
		||||
 | 
			
		||||
`String.fromCharCode()`:根据字符的 Unicode 编码获取字符。
 | 
			
		||||
 | 
			
		||||
@ -107,54 +171,7 @@
 | 
			
		||||
	console.log(result2); // 打印结果:中
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### indexOf()/lastIndexOf()
 | 
			
		||||
 | 
			
		||||
`indexOf()/lastIndexOf()`:获取指定字符的索引。
 | 
			
		||||
 | 
			
		||||
语法:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
    索引值 = str.indexOf(想要查询的字符);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
解释:`indexOf()` 是从前向后索引字符串的位置。同理,`lastIndexOf()`是从后向前寻找。
 | 
			
		||||
 | 
			
		||||
**作用**:可以检索一个字符串中是否含有指定内容。如果字符串中含有该内容,则会返回其**第一次出现**的索引;如果没有找到指定的内容,则返回 -1。
 | 
			
		||||
 | 
			
		||||
因此可以得出一个技巧:**如果获取的索引值为0,说明字符串是以查询的参数为开头的**。
 | 
			
		||||
 | 
			
		||||
这个方法还可以指定第二个参数,用来 指定开始查找的位置。
 | 
			
		||||
 | 
			
		||||
**代码举例1**:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
    var str = "abcdea";
 | 
			
		||||
 | 
			
		||||
    //给字符查索引(索引值为0,说明字符串以查询的参数为开头)
 | 
			
		||||
    console.log(str.indexOf("c"));
 | 
			
		||||
    console.log(str.lastIndexOf("c"));
 | 
			
		||||
 | 
			
		||||
    console.log(str.indexOf("a"));
 | 
			
		||||
    console.log(str.lastIndexOf("a"));
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
打印结果:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
**代码举例2**:(两个参数时,需要特别注意)
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
    var str = 'qianguyihao';
 | 
			
		||||
    result = str.indexOf('a', 3); // 从第三个位置开始查找 'a'这个字符 【重要】
 | 
			
		||||
 | 
			
		||||
    console.log(result); // 打印结果:9
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
上方代码中,`indexOf()`方法中携带了两个参数,具体解释请看注释。
 | 
			
		||||
 | 
			
		||||
### concat()
 | 
			
		||||
## concat()
 | 
			
		||||
 | 
			
		||||
`concat()`:字符串的连接。
 | 
			
		||||
 | 
			
		||||
@ -178,7 +195,7 @@
 | 
			
		||||
    console.log(result); // 打印结果:qianguyihao
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### slice()
 | 
			
		||||
## slice()
 | 
			
		||||
 | 
			
		||||
`slice()`:从字符串中截取指定的内容。不会修改原字符串,而是将及截取到的内容返回。
 | 
			
		||||
 | 
			
		||||
@ -200,7 +217,7 @@
 | 
			
		||||
 | 
			
		||||
- (5, 2) 表示前面的大,后面的小,返回值为空。
 | 
			
		||||
 | 
			
		||||
### substring()
 | 
			
		||||
## substring()
 | 
			
		||||
 | 
			
		||||
`substring()`:从字符串中截取指定的内容。和`slice()`类似。
 | 
			
		||||
 | 
			
		||||
@ -216,7 +233,7 @@
 | 
			
		||||
 | 
			
		||||
- `substring()`还会自动调整参数的位置,如果第二个参数小于第一个,则自动交换。比如说, `substring(1, 0)`截取的是第一个字符。
 | 
			
		||||
 | 
			
		||||
### substr()
 | 
			
		||||
## substr()
 | 
			
		||||
 | 
			
		||||
`substr()`:从字符串中截取指定的内容。不会修改原字符串,而是将及截取到的内容返回。
 | 
			
		||||
 | 
			
		||||
@ -238,7 +255,7 @@
 | 
			
		||||
 | 
			
		||||
备注:ECMAscript 没有对 `substr()` 方法进行标准化,因此不建议使用它。
 | 
			
		||||
 | 
			
		||||
### split() 【重要】
 | 
			
		||||
## split() 【重要】
 | 
			
		||||
 | 
			
		||||
`split()`:将一个字符串拆分成一个数组。
 | 
			
		||||
 | 
			
		||||
@ -283,7 +300,7 @@
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
### trim()
 | 
			
		||||
## trim()
 | 
			
		||||
 | 
			
		||||
`trim()`:去除字符串前后的空白。
 | 
			
		||||
 | 
			
		||||
@ -300,7 +317,7 @@
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
### replace()
 | 
			
		||||
## replace()
 | 
			
		||||
 | 
			
		||||
`replace()`:将字符串中的指定内容,替换为新的内容并返回。不会修改原字符串。
 | 
			
		||||
 | 
			
		||||
@ -320,7 +337,7 @@
 | 
			
		||||
    console.log(str2.replace(/today/gi,"tomorrow")); //这里用到了正则,才能替换所有的today
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### 大小写转换
 | 
			
		||||
## 大小写转换
 | 
			
		||||
 | 
			
		||||
举例:
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,16 @@
 | 
			
		||||
 | 
			
		||||
## 字符串的不可变性
 | 
			
		||||
 | 
			
		||||
字符串里面的值不可被改变。虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。
 | 
			
		||||
 | 
			
		||||
代码举例:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
var str = 'hello';
 | 
			
		||||
 | 
			
		||||
str = 'qianguyihao';
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
比如上面的代码,当重新给变量 str 赋值时,常量`hello`不会被修改,依然保存在内存中;str 会改为指向`qianguyihao`。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user