JavaScript字符串的操作

  平常我们在写JS代码时,遇到最频繁的操作之一也许是字符相关的操作了,同时在面试中也常常会设计字符串的转化的问题,今天刚好将看到资料和前人的经验总结一下,整理如下,希望大家补充和纠正。

1. 非字符串转化为字符串

1.1 原始值转字符串

转换为字符串 转换为字符串
undefined “undefined” 0 “0”
null “null” NaN “NaN”
true “true” Infinity “Infinity”
false “false” -Infinity “-Infinity”

1.2 对象转字符串

  如果是{}[]function{}等对象 转字符串情况又如何呢?

  对象转换为字符串,有两个调用的方法:toString()valueOf()。调用规则是这样的:

  • 如果对象具有toString()方法,则调用这个方法。如果它返回一个原始值(undefined、null、number、boolean、string),JavaScript将这个值转化为字符串,并返回这个字符串结果。
  • 如果对象没有toString()方法,或者这个方法并不返回一个原始值,那么JavaScript会调用valueOf()方法。如果存在这个方法,则JavaScript调用它。如果返回值是原始值,JavaScript将这个值转换为字符串,并返回这个字符串结果。
  • 否则,JavaScript无法从toString()valueOf()获得一个原始值,抛出异常。

  事实上大部分情况对象都会调用toString()方法,我们来研究一下。

  1. 默认的toString()方法,即Object.prototype.toString(),并不会返回一个有效的值,例子如下

    1 ({x:1, y:2}).toString() // => "[object Object]"

  2. 数组(Array)对象在原型里自定义了toString(),即Array.prototype.toString(),所以数组在调用toString()时,有一些不同。
    1 var a = [];
    2 var b = [1, 2, 3];
    3 a.toString();// => ""
    4 b.toString();// => "1,2,3"

    数据在调用toString()时,覆盖了Object的toString()方法。 toString() 方法返回一个字符串,该字符串由数组中的每个元素的toString() 返回值经调用 join() 方法连接(由逗号隔开)组成。

  3. 函数(Function)对象在原型里自定义了toString(),即Function.prototype.toString()
     1 (function(x) {f(x);}).toString(); // => "function(x) {\n f(x); \n}"

    Function 对象覆盖了从 Object 继承来的Object.prototype.toString() 方法。函数的toString() 方法会返回一个表示函数源代码的字符串。具体来说,包括 function关键字,形参列表,大括号,以及函数体中的内容。

  4. 日期(Function)对象在原型里自定义了toString(),即Date.prototype.toString()
    1 var date = new Date();
    2 date.toString(); // => "Mon Dec 28 2015 21:58:10 GMT+0800 (中国标准时间)"

    Date 对象覆盖了从 Object 继承来的Object.prototype.toString() 方法。Date的toString() 方法总是返回一个美式英语日期格式的字符串。当一个日期对象被用来作为文本值或用来进行字符串连接时,toString() 方法会被自动调用。

  5. 正则(RegExp)对象在原型里自定义了toString(),即RegExp.prototype.toString()
    1 var reg = new RegExp("a+b+c");
    2 console.log(reg.toString()); // => "/a+b+c/"

    RegExp 对象覆盖了 Object 继承来的Object.prototype.toString() 方法。对于 RegExp 对象,toString 方法返回一个该正则表达式的字符串形式。

2.字符串的常用操作

  定义在String原型对象中的方法,大概有二三十个,完全记得这么多方法对于普通人来说太难了,不过常用的七八个方法是应该记住的,其他的只需要有印象,用的时候在MDN查就可以了。

2.1 字符串属性

  字符串默认只定义了两个属性:lengthprototypelength表示字符串长度;prototype表示原型。

1 var myStr = "this is a string";
2 console.log(myStr.length); // => 16

2.2 字符串查找

  字符串查找对应两个方法:indexOf()lastIndexOf()

  • indexOf()

    str.indexOf(searchValue[, fromIndex])

    searchValue:表示被查找的值; fromIndex:表示调用该方法的字符串中开始查找的位置,可以是任意整数,默认值为 0。indexOf() 方法返回指定值在字符串对象中首次出现的位置。如果不存在,则返回 -1。

    1 var myStr = "this is a string";
    2 console.log(myStr.indexOf("a"));// => 8
  • lastIndexOf()

    str.lastIndexOf(searchValue[, fromIndex])

    searchValue:表示被查找的值; fromIndex:表示调用该方法的字符串中开始查找的位置,往前查找,可以是任意整数,默认值为 0。lastIndexOf() 方法返回指定值在调用该方法的字符串中最后出现的位置,如果没找到则返回 -1。从该字符串的后面向前查找,从 fromIndex 处开始。

  • 小结index()是从前向后查找,lastIndexOf()是从后向前查找,两个方法只是查找方式不一样,但是两个方法中被查找的index值一直是不变。

2.3 字符串的截取与分割

  这里涉及到四个方法:slice()split()substring()substr()。之所以把这四个方法一起讲,是因为平常我们有时候将它们混淆,先看看它们各自用法。

  • slice()slice()方法提取字符串中的一部分,并返回这个新的字符串。

    str.slice(beginSlice[, endSlice])

    beginSlice:从该索引(以 0 为基数)处开始提取原字符串中的字符,如果该参数为负数,则它表示从原字符串中的倒数第几个字符开始抽取。endSlice:在该索引(以 0 为基数)处结束提取字符串;如果省略该参数,slice会一直提取到字符串末尾;如果该参数为负数,则它表示在原字符串中的倒数第几个字符结束抽取.。

    1 var myStr = "this is a string";
    2 console.log(myStr.slice(5)); //=> "is a string"
    3 console.log(myStr.slice(5, 7)); //=> "is"
  • split()split() 方法通过把字符串分割成子字符串来把一个 String 对象分割成一个字符串数组。

    str.split([separator][, limit])

    separator:指定用来分割字符串的字符(串)。limit:一个整数,限定返回的分割片段数量。

    1 var myStr = "this is a string";
    2 console.log(myStr.split(" ")); //=> ["this", "is", "a", "string"]
    3 console.log(myStr.split(" ", 3)); //=> ["this", "is", "a"]
  • substring()substring() 返回字符串两个索引之间(或到字符串末尾)的子串。

    str.substring(indexA[, indexB])

    indexA:一个 0 到字符串长度之间的整数。indexB:(optional) 一个 0 到字符串长度之间的整数。

    1 var myStr = "this is a string";
    2 console.log(myStr.substring(2)); //=> "is is a string"
    3 console.log(myStr.substring(2, 3)); //=>  "i"
  • substr()substr() 方法返回字符串中从指定位置开始的指定数量的字符。

    str.substr(start[, length])

    start:开始提取字符的位置。length:提取的字符数。

    1 var myStr = "this is a string";
    2 console.log(myStr.substr(2)); //=> "is is a string"
    3 console.log(myStr.substr(2, 2)); //=>  "is"
  • 小结:四个方法各自用法如上,有一两个注意地方:split()返回的是数组,可以这样记忆,split后面有t,可以看着[,即数组;涉及到index的截取的方法,都是取头不取尾。

2.4 字符串索引

  字符串的索引涉及两个方法:indexOf()charOf()

  • indexOf():返回指定值在字符串对象中首次出现的位置。从 fromIndex 位置开始查找,如果不存在,则返回 -1。

    str.indexOf(searchValue[, fromIndex])

    searchValue:一个字符串表示被查找的值。fromIndex :表示调用该方法的字符串中开始查找的位置。可以是任意整数。默认值为 0。如果 fromIndex < 0 则查找整个字符串(如同传进了 0)。

    1 var myStr = "this is a string";
    2 console.log(myStr.indexOf("a")); // => 8
  • charOf():返回字符串中指定位置的字符。

    str.charAt(index)

    index:0 到 字符串长度-1 的一个整数。

    1 var myStr = "this is a string";
    2 console.log(myStr.charAt(8)); // => "a"

2.5 字符串合并

  涉及到一个方法:concat().

  • concat():将一个或多个字符串与原字符串连接合并,形成一个新的字符串并返回。

    string.concat(string2, string3[, …, stringN])

    string2…stringN:原字符串连接的多个字符串

    1 var myStr1 = "this is ";
    2 var myStr2 = "a string";
    3 console.log(myStr1.concat(myStr2)); // => "this is a string"

2.6 字符串匹配

  涉及到两个方法:match()search()

  • match():当字符串匹配到正则表达式(regular expression)时,match() 方法会提取匹配项,返回一个数组。如果正则表达式没有 g 标志,返回和 RegExp.exec(str) 相同的结果。而且返回的数组拥有一个额外的 input 属性,该属性包含原始字符串。另外,还拥有一个 index 属性,该属性表示匹配结果在原字符串中的索引(以0开始)。如果正则表达式包含 g 标志,则该方法返回一个包含所有匹配结果的数组。如果没有匹配到,则返回 null。

    str.match(regexp);

    regexp:一个正则表达式对象。如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为正则表达式对象。

    1 var myStr = "this is a string";
    2 var pattern1 = /i[a-z]/;
    3 var pattern2 = /i[a-z]/g;
    4 console.log(myStr.match(pattern1));// =>["is", index: 2, input: "this is a string"]
    5 console.log(myStr.match(pattern2));// =>["is", "is", "in"]
  • search():执行一个查找,看该字符串对象与一个正则表达式是否匹配。如果匹配成功,则 search() 返回正则表达式在字符串中首次匹配项的索引。否则,返回 -1。

    str.search(regexp)

    regexp:一个正则表达式对象。如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为正则表达式对象。

    1 var myStr = "this is a string";
    2 var pattern = /i[a-z]/;
    3 console.log(myStr.search(pattern));// => 2
    4 console.log(myStr.search("z"));// => -1

2.7 字符串大小写转换

涉及的两个方法:toLowerCase()toUpperCase()

  • toLowerCase():将调用该方法的字符串值转为小写形式,并返回。

    1 var myStr = "This is a String";
    2 console.log(myStr.toLowerCase()); // => "this is a string"
  • toUpperCase(): 将调用该方法的字符串值转换为大写形式,并返回。
    1 var myStr = "This is a String";
    2 console.log(myStr.toUpperCase()); // => "THIS IS A STRING"

3 总结

以上就是我关于字符串操作的大概总结,可能有需要完善和纠正的地方,希望有想法和建议,希望大家多多留言。

时间: 2024-10-26 16:17:55

JavaScript字符串的操作的相关文章

JavaScript字符串常用操作函数之学习笔记

字符串简介 使用英文单引号或双引号括起来,如:’Hello’,”World”,但是不能首尾的单引号和双引号必须一致,交错使用,如果要打印单引号或者双引号,可以使用转义字符\’(单引号),\”(双引号)  代码如下 复制代码 var str_1 = 'Hello World!';  //Hello World!var str_2 = "Hello World!";  //Hello World!var str_3 = '他说:"这样可以的."';  //他说:&quo

javascript中对字符串的操作总结

没听过一句话吗?程序员的世界,不处理字符串就是处理数组.这是群里的一位前辈和我说的,显然这和我之前理解的DOM是javascript的核心的不同的,看了几个面试题的内容,感觉前辈说的话非常的有道理,因此总结下,javascript中对字符串的操作. String类型 首先字符串类型是基本类型,但是在这里我们所说的是字符串的对象包装类型.因为只有引用类型才会有属性和方法.实际上每读取一个基本类型的同时都会创建一个对应的基本包装类型,从而让我们能够调用一些方法来操作数据.1.charAt() 和 c

javascript中字符串常用操作总结、JS字符串操作大全

字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用操作做个整理,一者加深印象,二者方便今后温习查阅. String对象属性 (1) length属性 length算是字符串中非常常用的一个属性了,它的功能是获取字符串的长度.当然需要注意的是js中的中文每个汉字也只代表一个字符,这里可能跟其他语言有些不一样. var str = 'abc'; console.log(str.length);

第一百二十六节,JavaScript,XPath操作xml节点

第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准DOM去查找XML中的节点方式,大大降低了查找难度,方便开发者使用.但是,DOM3级以前的标准并没有就XPath做出规范:直到DOM3在首次推荐到标准规范行列.大部分浏览器实现了这个标准,IE则以自己的方式实现了XPath. 一.IE中的XPath 在IE8及之前的浏览器,XPath是采用内置基于A

JavaScript日期时间操作

js日期操作: var myDate = new Date(); myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)myDate.getMonth(); //获取当前月份(0-11,0代表1月)myDate.getDate(); //获取当前日(1-31)myDate.getDay(); //获取当前星期X(0-6,0代表星期天)myDate.getTime(); //获取当前时间(从1970.1

【2017-04-01】JS字符串的操作、时间日期的操作、函数、事件、动画基础

一.字符串的操作 1.转大写: s.toLowerCase(); 2.转大写: s.toUpperCase(); 3.字符串的截取: s.substr(3,4);      -从索引3开始截取,截取4位.索引从0开始. 4.将字符串按指定的字符拆开: s.split(",");             引号内放指定的字符.返回的是一个数组. 5.字符串长度: s.length; 6.字符串中一个字符的索引: s.indexOf("world");      worl

Python之路day13 web 前端(JavaScript,DOM操作)

参考链接:http://www.cnblogs.com/wupeiqi/articles/5433893.html day13 1. CSS示例 2. JavaScript 3. DOM操作 上节内容回顾: 1. HTML标签 html/head/body/ input div,span a p br span table > tr行 th表头列 td表头列 h form> action method enctype=;;; select option input系列: text passwo

js--javascript中字符串常用操作总结、JS字符串操作大全

字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用操作做个整理,一者加深印象,二者方便今后温习查阅. String对象属性 (1) length属性 length算是字符串中非常常用的一个属性了,它的功能是获取字符串的长度.当然需要注意的是js中的中文每个汉字也只代表一个字符,这里可能跟其他语言有些不一样. var str = 'abc'; console.log(str.length);

JavaScript 字符串实用常操纪要

JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Date 时,诸此等等,繁不能数:而她那满多的 API 呵,总有些让人不愿去记忆的冲动,既然用时常搜,倒不如烂笔头一翻,顺道也体现下博客存在的价值,由此就有了这篇纪要. 字符串截取 1. substring() xString.substring(start,end) substring()是最常用到的