JS从入门到放弃--- 数据类型String

本文深入解析字符串的构造方式、API使用及高级操作技巧,包括直接量与构造函数定义、字符串方法如charAt、indexOf、split与replace的详细应用,以及正则表达式在replace中的高级运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

字符串是由双引号或单引号引起的字符序列。推荐使用单引号。双引号一般用于含有变量的字符串。

String 全局对象是一个用于字符串或一个字符序列的构造函数。

字符串语法

直接量定义

var str = 'string text' 
var str = "string text"
var str = "中文/汉语" 
var str = "español"
var str = "English "
var str = "हिन्दी"
var str = "العربية"
var str = "português"
var str = "বাংলা"
var str = "русский" 
var str = "日本語"
var str = "ਪੰਜਾਬੀ"
var str = "한국어"

console.log(typeof str);    // 控制台输出string

构造函数定义时,此时typeof str返回的是一个string对象。

构造函数定义字符串

var str = new String("哈哈");

console.log(typeof str);    // 控制台输出object

构造函数定义时,此时typeof str返回的是一个object对象。

字符串API

  1. charAt(index) 输出字符串索引为index的字符。
    var str = "hello world";
    console.log(str.charAt(1));     // 控制台输出 e
    
  2. charCodeAt(index) 对应位置上的字符编码(ASCII)。
    var str = "hello world";
    console.log(str.charCodeAt(1));     // 控制台输出 101
    
  3. String.fromCharCode(code)通过ASCII编码返回相应字符。
    console.log(String.fromCharCode(101));     // 控制台输出 e
    
  4. indexOf(string) 查找string变量(子字符串)第一次出现的位置,如果未找到则返回-1;
    var str = "hello world";
    console.log(str.indexOf("world")); // 第一次出现的索引为6
    
  5. lastIndexOf(String)查找String变量字符串最后一次出现的位置。返回值始终是从左到右的索引。为找到仍然返回-1;
    var str = "world hello world";
    console.log(str.lastIndexOf("orld")); //控制台输出13;
    
  6. substr(start,length)substring(start,end)str.slice(beginIndex[, endIndex])这三个函数都是字符串截取的操作。substr(start,length)substring(start,end)的区别是,所传参数不同。返回值为截取的字符串。
    • substr(start,length)是从start索引开始截取,截取的长度length的字符串。如果length不传,则截取start后所有的字符串。
    var str = "good good study!";
    console.log(str.substr(0,3));   // 输出 goo
    
    • substring(start,end)使用start索引开始截取,截取到字符串的end索引。如果end索引不传,则截取start后所有的字符串。如果start>end,函数仍然可以正常运行,因为JS内部将end重新复制给start,start重新赋值给end。大小进行了相互交互。同时也与数组一样前包后不包!
    var str = "good good study!";
    console.log(str.substr(0,4)); //控制台输出 good. 
    
    • str.slice(beginIndex[, endIndex])与数组slice(beginIndex,endIndex)一致。从一个字符串中提取字符串并返回新字符串。在一个字符串中的改变不会影响另一个字符串。也就是说,slice 不会修改原字符串(只会返回一个包含了原字符串中部分字符的新字符串)。传入负值索引,此时字符串将从右至左开始截取字符串。如果所处啊值为负数,小的负数必须放在第一位,否则将输出空字符串
    var str = "good good study!";
    console.log(str.slice(-3,-1)); //控制台输出 dy.
    
  7. split(separator)将字符串以separator变量的分隔符切割成一个数组。与数组的APIjoin(separator)可以进行相互转换。
    var str = "good good study!";
    console.log(str.split(" ")); // 控制台输出 [ 'good', 'good', 'study!' ]
    
  8. replace(pattern,replaceStr)字符串替换,pattern替换规则(可以为字符串亦可为正则表达式),replaceStr需要替换成新的字符串。默认替换一次!返回值为新的字符串!
    var str = "good good study!";
    // 普通字符串
    console.log(str.replace("good","****")); // 输出 **** good study!
    // 正则表达式
    console.log(str.replace(/good/g,"****")); // 输出 **** **** study!
    

扩展

replace

上面简单提到关于正则部分如何使用。完成的replace函数参数形式可以是

string.replace(patter|regex,newStr|function(){});
  • pattern需要替换的字符串
  • regex需要替换的字符串表达式
  • newStr替换的字符串
  • function(){}执行替换时的操作函数。

这里主要讲解function(){}时的用法。以及各个参数的含义:

// 需要替换的字符串
var num = "ha 1234 5678 12121";
// 使用正则表达式
var newNum = num.replace(/(\d{4}) (\d{4})/g,(matchStr,p1,p2,offset,string)=>{
    // matchStr代表匹配到的字符串完整的字符串
    console.log(matchStr);
    // p1 代表正则表达式中的第一个中括号匹配到的内容。
    console.log(p1);
    // p2 代表正则表达式中的第二个中括号匹配到的内容。
    console.log(p2);
    // offset代表匹配到的索引位置
    console.log(offset);
    // string代表源字符串
    console.log(string);
    // 进行的相关操作。
    var newStr = ......
    // 返回操作后的字符串
    return newStr;
});
console.log();
// 使用字符串
var newNum = num.replace("1234",(matchStr,offset,string)=>{
    // 匹配到的完整字符串
    console.log(matchStr);
    // offset代表匹配到的索引位置
    console.log(offset);
    // string代表源字符串
    console.log(string);
    // 进行的相关操作。
    var newStr = ......
    // 返回操作后的字符串
    return newStr;
});

控制台输出:

[Running] node "/Users/ermao/Development/learn_code/javascript/String.js"
1234 5678
1234
5678
3
ha 1234 5678 12121

1234
3
ha 1234 5678 12121

[Done] exited with code=0 in 0.053 seconds

【举例】

var num = "ha 1234 5678 12121";
var newNum = num.replace(/(\d{4}) (\d{4})/g,(matchStr,p1,p2,offset,string)=>{
    console.log(matchStr);
    console.log(p1);
    console.log(p2);
    console.log(offset);
    console.log(string);

    return p2+"-"+p1;
});
console.log("输出替换后的字符串:"+newNum);

控制台输出

[Running] node "/Users/ermao/Development/learn_code/javascript/String.js"
1234 5678
1234
5678
3
ha 1234 5678 12121
输出替换后的字符串:ha 5678-1234 12121

[Done] exited with code=0 in 0.044 seconds

思考

  1. "abcdefg"转为"gfedcba"逆序字符串。
    var str = "abcdefg";
    // 逆序
    var str = str.split("").reverse().join("");
    console.log(str);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值