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'
    这种方法简单粗暴,但对简单的字符串却完全适用
  • 相关阅读:
    hdu 2647 Reward
    hdu 2094 产生冠军
    hdu 3342 Legal or Not
    hdu 1285 确定比赛名次
    hdu 3006 The Number of set
    hdu 1429 胜利大逃亡(续)
    UVA 146 ID Codes
    UVA 131 The Psychic Poker Player
    洛谷 P2491消防 解题报告
    洛谷 P2587 [ZJOI2008]泡泡堂 解题报告
  • 原文地址:https://www.cnblogs.com/wzndkj/p/12854537.html
Copyright © 2011-2022 走看看