zoukankan      html  css  js  c++  java
  • 你不知道的 JavaScript 系列中( 6 ) -字符串

    字符串经常被当成字符数组,但 JS 中的字符串和字符数组并不是一回事
    var a = 'foo';
    var b = ['f', 'o', 'o']
    
    a.length; // 3
    b.length; // 3
    
    a.indexOf('o'); // 1
    b.indexOf('o'); // 1
    
    var c = a.concat('bar'); // 'foobar'
    var d = b.concat('bar'); // ['f', 'o', 'o', 'b', 'a', 'r']
    
    a === c; // false
    b === d; // false
    
    a; // 'foo'
    b; // ['f', 'o', 'o']

     但这并不意味着是字符数组,比如

    a[1] = 'O';
    b[1] = 'O';
    
    a; // 'foo'
    b; // ['f', 'O', 'o']
    JS 中字符串是不可变的,而数组是可变的,并且 a[1] 并非是合法语法,正确的方法应该是 a.charAt(1)。字符串不可变是指字符串的成员函数不会改变其原始值,而是创建并返回一个新的字符串,而数组的成员函数都是在其原始值上进行操作
    c = a.toUpperCase();
    a === c; // false
    a; // 'foo'
    c; // 'FOO'
    
    b.push('!');
    b; // ['f', 'O', 'o', '!']
    许多数组函数用来处理字符串很方便,虽然字符串没有这些函数,但可以通过借用数组的非变更方法来处理字符串
    a.join; // undefined
    var c = Array.prototype.join.call(a, '-');
    c; // 'f-o-o'
    
    a.map; // undefiend
    c = Array.prototype.map.call(a, function(v){
      return v.toUpperCase()
    }).join('')
    c; // 'FOO'
    另一个不同点在语字符串不能借用数组的可变更成员函数,比如 reverse();
    a.reverse; // undefined
    b.reverse(); // ['!', 'o', 'O', 'f']
    b; // ['f', 'O', 'o', '!']
    
    Array.prototype.reverse.call(a); // 报错,TypeError

    一个变通的方法是先将字符串转换为数组,处理完后再转化为字符串

    var c = a.split('').reverse().join('');
    c; // 'oof'
    这种方法简单粗暴,但对简单的字符串却完全适用
  • 相关阅读:
    协议
    网页制作
    知识点--------二维数组
    方法---------拖延,清屏,前景色,背景色
    小知识点------遍历数组、switch case、do while
    知识点-----------函数
    循环经典--------冒泡排序,查找。
    知识点-------一维数组
    循环语句-----经典案例
    知识点--循环语句
  • 原文地址:https://www.cnblogs.com/wzndkj/p/12854537.html
Copyright © 2011-2022 走看看