Blogger Information
Blog 29
fans 0
comment 0
visits 11138
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JavaScript 字符串与数组方法、队列与循环队列、类(class)
尹辉
Original
251 people have browsed it

字符串方法

  • 字符串长度:str.length,返回字符串长度值

    1. let str = 'php中文网';
    2. console.log(str.length); /* 6 */
  • 字符串长度:str.length,返回字符串长度值

    1. let str = 'php中文网';
    2. console.log(str[3]); /* 中 */
  • 查找某个字符的位置:str.search(),返回被查找字符的位置索引

    1. let str = 'php中文网';
    2. console.log(str.search('文')); /* 4 */
  • 替换:str.replace(),两个参数,第一个是字符串中存在的字符,第二个参数是新的字符,返回替换后的整个字符串

    1. let str = 'php中文网';
    2. console.log(str.replace('中文网', '.cn')); /* php.cn */
  • 获取子字符串(一部分):str.slice(),两个参数,第一个是开始位置,第二个是结束位置加1,返回获取的子字符串

    1. let str = 'php中文网';
    2. console.log(str.slice(0,3)); /* php */
  • 获取字符串(一部分):str.substr(),两个参数,第一个是开始位置,第二个是字符数量,返回获取的子字符串

    1. let str = 'php中文网';
    2. console.log(str.substr(3,3)); /* 中文网 */
  • 字符串转换为数组:str.split(),返回数组

    1. let str = 'php中文网';
    2. console.log(str.split('')); /* ['p', 'h', 'p', '中', '文', '网'] */
  • 全部转为大写:toUpperCase(),返回大写的字符串

    1. let str = 'php中文网';
    2. console.log(str.toUpperCase()); /* PHP中文网 */
  • 全部转为小写:toLowerCase(), 返回小写的字符串

    1. let str = 'php中文网';
    2. console.log(str.toLowerCase()); /* php中文网 */
    3. // 应用:格式化用户输入的内容
    4. let url = 'Php.cN'; // 用户输入的内容不规范
    5. switch (url){
    6. case 'pnp.cn':
    7. console.log('php中文网');
    8. break;
    9. case 'PHP.CN':
    10. console.log('php中文网');
    11. break;
    12. // ...... 需要列举出各种情况
    13. default:
    14. console.error('输入错误!')
    15. }
    16. // 可以将用户输入的内容格式化,全部转为小写
    17. url = url.toLowerCase(); // 全部转为小写
    18. switch (url){
    19. // 此时只需判断一次
    20. case 'php.cn':
    21. console.log('php中文网');
    22. break;
    23. default:
    24. console.error('输入错误!')
    25. }

    数组方法

  • push() ,在数组尾部添加元素(参数可以是1个,也可以是多个),返回新数组的长度

    1. let arr = [];
    2. console.log(arr.push(200)); /* 1 */
    3. console.log(arr);/* [200] */
  • pop() ,在数组尾部删除最后一个元素(无需参数),返回被删除的元素

    1. let arr = ['a','b','c'];
    2. console.log(arr.pop()); /* c */
    3. console.log(arr); /* ['a', 'b'] */
  • unshift(),在数组头部添加元素(参数可以是1个,也可以是多个),返回新数组的长度

    1. let arr = ['a','b','c'];
    2. console.log(arr.unshift('C')); /* 4 */
    3. console.log(arr); /* ['C', 'a', 'b', 'c'] */
    4. // 注意参数位置顺序
    5. console.log(arr.unshift('A', 'B')); /* 6 */
    6. console.log(arr); /* ['A', 'B', 'C', 'a', 'b', 'c'] */
  • shift(),在数组头部删除第一个元素(无需参数),返回被删除的元素

    1. let arr = ['a','b','c'];
    2. console.log(arr.shift()); /* a */
    3. console.log(arr); /* ['b', 'c'] */
  • delete arr[],删除指定位置的元素,仅删除对应元素的值(改为空值),原来的元素保留

    1. let arr = ['a','b','c'];
    2. console.log(delete arr[1]); /* true */
    3. console.log(arr); /* ['a', 空, 'c'] */
    4. // 注,可以用 filter() 方法过滤掉空元素
    5. console.log(arr.filter(item => item)); /* ['a', 'c'] */
  • keys(),获取数组元素键(key)的迭代器,通过 for of 来逐个访问

    1. let arr = ['red','green','blue'];
    2. console.log(arr.keys()); /* Array Iterator {} */
    3. for (let key of arr.keys()){
    4. console.log(key);
    5. }
    6. /* 输出:
    7. * 0
    8. * 1
    9. * 2
    10. */
  • values(),获取数组元素值(value)的迭代器,通过 for of 来逐个访问

    1. let arr = ['red','green','blue'];
    2. console.log(arr.values()); /* Array Iterator {} */
    3. for (let value of arr.values()){
    4. console.log(value);
    5. }
    6. /* 输出:
    7. * red
    8. * green
    9. * blue
    10. */
  • entries(),获取数组元素键值对([key, value])的迭代器,通过 for of 来逐个访问

    1. let arr = ['red','green','blue'];
    2. console.log(arr.entries()); /* Array Iterator {} */
    3. for (let item of arr.entries()){
    4. console.log(item);
    5. }
    6. /* 输出:
    7. * [0, 'red']
    8. * [1, 'green']
    9. * [2, 'blue']
    10. */
  • slice(),获取子数组,两个参数,第一个是开始位置,第二个是结束位置加1,结束位置可以省略(取到最后一个)

    1. let arr = ['red','green','blue'];
    2. console.log(arr.slice(0, 2)); /* ['red', 'green'] */
    3. console.log(arr.slice(1)); /* ['green', 'blue'] */
    4. // 也可以用逆序下标(负数),最后一个元素是 -1,倒数第二个元素是 -2,...
    5. console.log(arr.slice(-3, -1)); /* ['red', 'green'] */
  • inclues(),判断数组元素是否含有指定的值,返回 true / false

    1. let arr = ['red','green','blue'];
    2. console.log(arr.includes('red')); /* true */
    3. console.log(arr.includes('re')); /* false */
  • splice(),删除、添加、更新数组元素

    1. // 删除,第一个参数起始位置,第二个参数删除数量,返回被删除元素的数组
    2. let arr = [1,2,3,4,5,6,7,8];
    3. console.log(arr.splice(1,3)); /* [2, 3, 4] */
    4. console.log(arr); /* [1, 5, 6, 7, 8] */
    5. // 添加,第一个参数起始位置,第二个参数删除数量(添加时写 0,删除 0 个),第三个参数起时要添加的新元素
    6. let arr = [1,2,3];
    7. console.log(arr.splice(1,0,11,12)); /* 返回被删除元素的数组,因为没有删除,所以返回空数组:[] */
    8. console.log(arr); /* [1, 11, 12, 2, 3] */
    9. // 添加的元素可以是数组
    10. let arr = [1,2,3];
    11. let n = ['a','b','c']
    12. console.log(arr.splice(1,0,n));
    13. console.log(arr); /* [1, Array(3), 2, 3] */
    14. // 展开添加的数组
    15. let arr = [1,2,3];
    16. console.log(arr.splice(1,0,...n));
    17. console.log(arr); /* [1, 'a', 'b', 'c', 2, 3] */
    18. // 更新,先删除,然后再删除的位置添加
    19. let arr = [1,2,3,4,5,6,7,8];
    20. console.log(arr.splice(1,2,11,12)); /* [2, 3] */
    21. console.log(arr);; /* [1, 11, 12, 4, 5, 6, 7, 8] */
  • sort(),升序排序

    1. let arr = [9,15,8,3,23];
    2. // 默认全部视为“字符串”按 ASCII 码排序,此时数字不会正确排序
    3. console.log(arr.sort()); /* [15, 23, 3, 8, 9] */
    4. // 用自定义函数解决数字排序
    5. console.log(
    6. arr.sort (
    7. function (a,b){
    8. return a - b; // 升序
    9. }
    10. )
    11. ) /* [3, 8, 9, 15, 23] */
    12. console.log(
    13. arr.sort( (a,b) => b - a ) // 降序
    14. ) /* [23, 15, 9, 8, 3] */
  • 回调方法,遍历:forEach(),不会返回执行结果,而是返回 undefined。

    1. // 语法:forEach(function(值, 该值的索引, 正在遍历的当前数组){})
    2. // 只有第一个参数(值)是必选的,后面两个是可选
    3. let sum = 0;
    4. let arr = [1,2,3,4,5];
    5. // arr.forEach(function (elem){return sum += elem}); /* 匿名函数 */
    6. // arr.forEach((elem) => {return sum += elem}); /* 箭头函数 */
    7. arr.forEach(elem => sum += elem); /* 箭头函数简写 */
    8. console.log(sum); /* 15 */
    9. console.log(arr.forEach(elem => sum += elem)); /* 返回 undefined */
    10. // 改变原数组
    11. arr.forEach((value,key) => arr[key] = value * 2);
    12. console.log(arr); /* 返回 [2, 4, 6, 8, 10] */
    13. // 注意:不能使用 arr = arr.forEach((value,key) => arr[key] = value * 2);,因为 forEach() 返回 undefined,赋值后 arr = undefined。
  • 回调方法,遍历:map(),返回新数组。

    1. // 语法:map(function(值, 该值的索引, 正在遍历的当前数组){})
    2. // 只有第一个参数(值)是必选的,后面两个是可选
    3. let numbers = [1, 4, 9];
    4. // const doubles = numbers.map(function (num) { return num * 2}); /* 匿名函数 */
    5. // const doubles = numbers.map((num) => { return num * 2}); /* 箭头函数 */
    6. const doubles = numbers.map(num => num * 2); /* 箭头函数简写 */
    7. console.log(doubles); /* [2, 8, 18] */
    8. // 改变原数组
    9. numbers = numbers.map((value,key) => numbers[key] = value * 3);
    10. console.log(numbers); /* 返回 [3, 12, 27] */
  • 回调方法,断言:every(),所有元素都满足指定条件,返回 true,否则返回 false。类似 “与”。

    1. // 语法:every(function(值, 该值的索引, 正在遍历的当前数组){})
    2. // 只有第一个参数(值)是必选的,后面两个是可选
    3. let numbers = [1,2,3,4,5];
    4. console.log(numbers.every( value => value > 0 )); /* true */
    5. console.log(numbers.every( value => value > 3 )); /* false */
  • 回调方法,断言:some(),所有元素中只要一部分满足指定条件,就返回 true,全不满足条件返回 false。类似 “或”。

    1. // 语法:some(function(值, 该值的索引, 正在遍历的当前数组){})
    2. // 只有第一个参数(值)是必选的,后面两个是可选
    3. let numbers = [1,2,3,4,5];
    4. console.log(numbers.some( value => value > 3 )); /* true */
    5. console.log(numbers.some( value => value > 5 )); /* false */
  • 回调方法,过滤:filter(),返回满足指定条件的元素组成的新数组

    1. let numbers = [1,2,3,4,5];
    2. let subNumbers = numbers.filter( value => value > 3 );
    3. console.log(subNumbers); /* [4, 5] */
    4. // 获取满足条件的第一个元素,等同于 find()
    5. let firstNumber = numbers.filter( value => value > 3 )[0];
    6. console.log(firstNumber); /* 4 */
  • 回调方法,过滤:find(),返回满足指定条件的第一个元素

    1. let numbers = [1,2,3,4,5];
    2. let firstNumber = numbers.find( value => value > 3 );
    3. console.log(firstNumber); /* 4 */
  • 回调方法,过滤:findlast(),返回满足指定条件的最后一个元素

    1. let numbers = [1,2,3,4,5];
    2. let lastNumber = numbers.findLast( value => value > 3 );
    3. console.log(lastNumber); /* 5 */
  • 回调方法,累加:reduce()

    1. let numbers = [1,2,3,4,5];
    2. let sum = numbers.reduce((acc, cur) => acc + cur);
    3. console.log(sum); /* 5 */

数组方法应用:列队与循环列队

  1. // 顺序列队
  2. let numList = [1,2,3,4,5,6];
  3. function queue(newMember) {
  4. numList.shift();
  5. numList.push(newMember);
  6. }
  7. console.log(numList); /* [1, 2, 3, 4, 5, 6] */
  8. queue(7);
  9. console.log(numList); /* [2, 3, 4, 5, 6, 7] */
  10. queue(8);
  11. console.log(numList); /* [3, 4, 5, 6, 7, 8] */
  12. // 循环列队
  13. let letterList = ['a','b','c','d','e','f',];
  14. function circleQueue(){
  15. let lastLetter = letterList.slice(letterList.length - 1, letterList.length);
  16. letterList.unshift(lastLetter[0]);
  17. letterList.pop();
  18. }
  19. console.log(letterList); /* ['a', 'b', 'c', 'd', 'e', 'f'] */
  20. circleQueue();
  21. console.log(letterList); /* ['f', 'a', 'b', 'c', 'd', 'e'] */
  22. circleQueue();
  23. console.log(letterList); /* ['e', 'f', 'a', 'b', 'c', 'd'] */

类:class,其本质还是构造函数

  1. 声明

    1. class User{
    2. // 创建属性: 构造器 construction(){},使用 new 创建实体时自动调用
    3. // 属性之间不能由逗号(,)
    4. constructor(uname, email) {
    5. this.uname = uname;
    6. this.email = email;
    7. }
    8. // 创建方法(原型方法,自动定义在原型上,会被实体对象继承)
    9. // 在 ES6 中不允许使用完整语法,必须简化
    10. show(){return `${this.uname} : [${this.email}]`};
    11. // 创建静态成员:static,也是自动定义在原型上,但会被实体成员继承
    12. // 访问静态成员需要使用类名(构造函数名)来访问,不能用实体对象名来访问
    13. static nation = '中国';
    14. }
    15. // 创建实体对象
    16. const user = new User('admin', 'admin@qq.com');
    17. console.log(user); /* User {uname: 'admin', email: 'admin@qq.com'} */
    18. console.log(user.uname); /* admin */
    19. console.log(user.show()); /* admin : [admin@qq.com] */
    20. console.log(User.nation); /* 中国 */ // 注意:调用的是类的属性
  2. 类的继承:extends (本质是扩展了父类的功能)

    1. class UserChild extends User{
    2. // 属性
    3. constructor(uname, email, age) {
    4. // 父类原有的属性需要重新定义,使用 super()
    5. super(uname, email);
    6. /**
    7. * 相当于:
    8. * this.uname = uname;
    9. * this.email = email;
    10. */
    11. // 定义子类专有属性(扩展了父类的功能)
    12. this.age = age;
    13. }
    14. // 扩展父类的方法
    15. show(){return `${this.uname} : [${this.email}], ${this.age}`};
    16. // ${this.uname} : [${this.email}],这些是父类的方法,可以简写为 super.show()
    17. show(){return `${super.show()}, ${this.age}`};
    18. }
    19. let userChild = new UserChild('annie', 'annie@qq.com', 28)
    20. console.log(userChild.age); /* 28 */
    21. console.log(userChild.show()); /* annie : [annie@qq.com], 28 */
  3. 类也可以使用访问器属性

    1. class User{
    2. constructor(uname, email, age) {
    3. this.uname = uname;
    4. this.email = email;
    5. this._age = age;
    6. }
    7. get age(){
    8. return this._age;
    9. }
    10. set age(age){
    11. if (age < 18 || age > 60){
    12. console.log('年龄输入错误!');
    13. return false;
    14. }
    15. this._age = age;
    16. }
    17. }
    18. let user = new User('annie', 'annie@qq.com', 28);
    19. console.log(user.age); /* 28 */
    20. user.age = 18;
    21. console.log(user.age); /* 18 */
Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post