```
~~~
/*
* 在JS中用单引号、双引号、反引号包起来的都是字符串:每一个字符串都是由零到多个字符组成的,和数组类似,每一个字符也都有自己的索引
* 索引0 -> 'w'
* 索引1 -> 'e'
* str.length存储了一共有多少个字符,也就是字符串的长度
*/
// let str = "welcome to zhufeng peixun!";
// console.log(str[0]); //=>基于索引获取指定位置的字符
// 遍历字符串中的每一个字符
// for (let i = 0; i < str.length; i++) {
// console.log(str[i]);
// }
/*
* 关于字符串中常用的方法
* 1.获取字符串中指定位置字符的办法
* + charAt
* + charCodeAt
* + String.fromCharCode
* 2.字符串查找和截取
* + substr
* + substring
* + slice
* 3.字符串转换为数组的方法
* + split
* 4.字符串查找是否包含某个字符
* + indexOf / lastIndexOf
* + includes
* 5.字符串替换
* + replace
* 6.字符串大小写转换
* + toLowerCase
* + toUpperCase
* ....
* localCompare / match / trim ...
*
* 记忆方式:
* 1)方法的意义和作用
* 2)参数
* 3)返回值
* 字符串中无需记忆原始字符串是否改变,因为它是基本类型值,每一个操作都是直接操作值,对原始字符串不会产生任何影响(数组之所以要记住是否改变,是因为数组是对象类型,操作的是堆内存,方法的执行很可能把原始堆内存中的信息改变了,所以需要记忆原始数组是否改变)
*/
// console.log(String.prototype);
/*
* charAt([index]):根据索引获取指定位置的字符(charAt相对于直接基于索引获取的方式,在当前索引并不存在的情况下,字符串[索引]获取的结果是UNDEFINED,而CHARAT获取的结果是空字符串)
* charCodeAt:在charAt的基础上获取指定字符的UNICODE编码(ASCII码表中的值)
* String.fromCharCode([UNICODE编码]):和charCodeAt对应,它是基于编码获取编码前的字符
*/
// let str = "welcome to zhufeng peixun!";
// console.log(str[0]); //=>'w'
// console.log(str.charAt(0)); //=>'w'
// console.log(str[str.length - 1]); //=>'!'
// console.log(str.charAt(str.length - 1)); //=>'!'
// console.log(str[str.length]); //=>undefined
// console.log(str.charAt(str.length)); //=>''
// console.log(str.charCodeAt(0)); //=>119 (UNICODE编码,也就是值的十进制编码)
// console.log(String.fromCharCode(119)); //=>'w'
/*
* 字符串截取
* substr(n,m):从索引n开始截取m个字符
* substring(n,m):从索引n开始,找到索引为m处(不包含m),找到部分截取到
* slice(n,m):和substring是以一样的,两个都是索引,只不过slice支持以负数作为索引
*
* 最后的m不写都是截取到字符串的末尾
*/
// let str = "welcome to zhufeng peixun!";
// console.log(str.substr(3, 8)); //=>'come to '
// console.log(str.substring(3, 8)); //=>come '
// console.log(str.substring(3)); //=>substr&substring第二个参数不写都是截取到末尾 str.substring(0):字符串克隆
// console.log(str.substring(-6, -3)); //=>'' substring只能支持正常的索引
// console.log(str.slice(-6, -
// 3)); //=>'eix' slice支持负数索引 负数索引也可以这样处理str.slice(str.length-6, str.length-3) => str.slice(20,23)
/*
* indexOf / lastIndexOf:获取当前字符在字符串中第一次或者最后一次出现位置的索引,如果字符串中不包含这个字符,返回结果是-1
* includes 验证是否包含某个字符
*/
// let str = "welcome to zhufeng peixun!";
// console.log(str.indexOf('e')); //=>1
// console.log(str.lastIndexOf('e')); //=>20
/* if (str.indexOf('a') > -1) {
// 包含字符a
} */
/* if (str.includes('a')) {
// 包含字符a
} */
/*
* toLowerCase / toUpperCase:把字符串中的字符进行大小写转换
*/
// let str = 'Welcome To ZHUFENG!';
// console.log(str.toLowerCase()); //=>'welcome to zhufeng!'
// console.log(str.toUpperCase()); //=>'WELCOME TO ZHUFENG!'
/*
* split:和数组中的join方法对应,它是把字符串,按照指定的分隔符号,拆分成数组中的每一项,返回结果是一个数组
*/
// let arr = [10, 20, 30, 40];
// let str = arr.join('|');
// // console.log(str); //=>'10|20|30|40'
// console.log(str.split('|')); //=>["10", "20", "30", "40"]
// let str = "welcome to zhufeng peixun";
// console.log(str.split(' ')); //=>以空格拆分 ["welcome", "to", "zhufeng", "peixun"]
// console.log(str.split(
// '')); //=>不指定任何分隔符 ["w", "e", "l", "c", "o", "m", "e", " ", "t", "o", " ", "z", "h", "u", "f", "e", "n", "g", " ", "p", "e", "i", "x", "u", "n"]
// let str = '10|';
// console.log(str.split('|')); //=>["10", ""]
/*
* replace(原始字符,新字符):把字符串中原始字符替换成为新字符,在不使用正则的情况下,每次执行replace只能替换一个
*/
// let str = 'zhufeng2020zhufeng2021';
// str = str.replace('zhufeng', '珠峰');
// str = str.replace('zhufeng', '珠峰');
// console.log(str); //=>'珠峰2020珠峰2021'
// str = str.replace('zhufeng', 'zhufengpeixun');
// str = str.replace('zhufeng', 'zhufengpeixun');
// console.log(str); //=>'zhufengpeixunpeixun2020zhufeng2021' 很多时候即使执行多次也不一定能够实现最后的效果,所以replace一般都是伴随正则出现的
// str = str.replace(/zhufeng/g, 'zhufengpeixun');
// console.log(str); //=>'zhufengpeixun2020zhufengpeixun2021'
~~~
```
- 0001.开课说明
- 0002.ECMAScript的发展历程
- 0003.WEB2.0时代-服务器端渲染,前后端不分离
- 0004.WEB2.0时代-前后端分离模式
- 0005.大前端时代概述
- 0006.前端需要的技术栈和学习技巧
- 0007.浏览器
- 0008.JS的三部分组成
- 0009.JS中创建变量的6种形式
- 0010.JS中变量的命名规范
- 0011.JS中的数据类型分类
- 0012.JS中常用的几种输出方式
- 0013.number属性类型详细解读1
- 0014.number数据类型详细解读2
- 0015.string数据类型详细解读1
- 0016.string数据类型详细解读2
- 0017.boolean数据类型详细解读
- 0018.object数据类型详细解读1
- 0019.object数据类型详细解读2
- 0020.谈谈学习
- 0021.数据类型检测
- 0022.浏览器底层渲染机制(堆栈内存和数据类型区别)
- 0023.关于数据类型区别的面试题
- 0024.课后作业讲解:数据类型转换
- 0025.课后作业讲解:堆栈内存处理
- 0026.课后作业讲解:阿里的一道经典面试题
- 0027.JS中三种常用的判断语句
- 0028.小实战:开关灯特效
- 0029.FOR循环和FOR IN循环
- 0030.课后作业讲解:关于循环判断和数据转化
- 0031.课后作业讲解:关于DOM对象的深入理解
- 0032.关于元素集合的相关操作(奇偶行变色)
- 0033.课后作业讲解:逻辑思维判断题
- reset.min.css
- 0034.(复习)前四天内容的综合复习梳理
- 0035.初窥函数:函数的作用、语法、形参
- 0036-0038.选项卡案例
- 0039.隔行变色案例:进一步强化自定义属性编程思想
- 0040.其它作业题的讲解(自定义属性强化)
- 0041.函数创建和执行的堆栈运行机制
- 0042.函数中的形参和实参
- 0043.函数中的实参集合ARGUMENTS
- 0044.函数中的返回值RETURN
- 0045.箭头函数和匿名函数
- 0046.两个等于比较时候的数据类型转换规则
- 0047.数组的基础结构和常规操作
- 0048.数组常用方法:增删改的五个方法
- 0049.数组常用方法:查询、拼接、转换为字符串
- 0050.数组常用方法:检测是否包含、排序和迭代
- 0051.数组去重:双FOR循环(数组塌陷和SPLICE删除优化)
- 0052.数组去重:对象键值对方式(ES6中SET)
- 0053.Math数学函数对象中常用的方法
- 0054.String字符串中常用的方法
- 0055.实战案例:时间字符串格式化
- 0056.实战案例:queryURLParams1
- 0057.实战案例:queryURLParams2
- 0058.实战案例:获取四位不重复的验证码
- 0059.阶段作业题讲解1(基础知识)
- 0060.阶段作业题讲解2(实战案例)
- 0061-0062.DOM操作中相关知识的复习
- 0063.DOM中的节点操作1
- 0064.DOM中的节点操作2
- utils
- 65.关于DOM的增删改