JavaScript中的字符串操作详解 |
本文标签:JavaScript,字符串操作 一、概述 二、字符串的创建 复制代码 代码如下: document.write("<img src=img/logo.jpg height=30 width=100 alt=Logo>"); 我们在上面脚本创建了几个字符串,但本质上,它们并不是真正的字符串对象,准确地说,它们是字符串类型的值 。要创建一个字符串对象,可使用如下语句:var strObj = new String("Hello, String!"); 三、字符串的拼接 复制代码 代码如下: var longString = "One piece " + "plus one more piece."; 要将多个字符串累积为一个字符串,还可以使用"+="操作符: 复制代码 代码如下: var result = ""; result += "My name is Anders" result += " and my age is 25"; 要在字符串中添加换行符,需要使用转义字符"\n": 复制代码 代码如下: var confirmString = "You did not enter a response to the last " + "question.\n\nSubmit form anyway?"; var confirmValue = confirm(confirmString); 但这种方法只能用在像警告、确认对话框之类的情况下,如果将这段文本作为HTML内容呈现,就无效了,此时用"<br>"代替它: 复制代码 代码如下: var htmlString = "First line of string.<br>Second line of string."; document.write(htmlString); String对象还提供了方法concat(),它完成与"+"相同的功能: 四、访问字符串的子串 复制代码 代码如下: var fullString = "Every dog has his day."; var section = fullString.substring(0, 4); // section is "Ever". section = fullString.substring(4, 0); // section is also "Ever". section = fullString.substring(1, 1); // section is an empty string. section = fullString.substring(-2, 4); // section is "Ever", same as fullString.substring(0, 4); slice()的原型为: string.slice(start, end) 复制代码 代码如下: var city = "ShanGHai"; city = city.toLowerCase(); // city is "shanghai" now. 六、判断两个字符串是否相等 问题: 比如,你想拿用户的输入值与已知的字符串比较 解决方案: 先将用户的输入值全部转换为大写(或小写),然后再行比较: 复制代码 代码如下: var name = document.form1.txtUserName.value.toLowerCase(); if(name == "urname") { // statements go here. } JavaScript有两种相等运算符 。一种是完全向后兼容的,标准的"==",如果两个操作数类型不一致,它会在某些时候自动对操作数进行类型转换,考虑下面的赋值语句: 复制代码 代码如下: var strA = "i love you!"; var strB = new String("i love you!"); 这两个变量含有相同的字符序列,但数据类型却不同,前者为string,后者为object,在使用"=="操作符时,JavaScript会尝试各种求值,以检测两者是否会在某种情况下相等 。所以下面的表达式结果为true: strA == strB 。 第二种操作符是"严格"的"===",它在求值时不会这么宽容,不会进行类型转换 。所以表达式strA === strB的值为false,虽然两个变量持有的值相同 。 有时代码的逻辑要求你判断两个值是否不相等,这里也有两个选择:"!="和严格的"!==",它们的关系就类似于"=="和"===" 。 讨论: "=="和"!="在求值时会尽可能地寻找值的匹配性,但你可能还是想在比较前进行显式的类型转换,以"帮助"它们完成工作 。比如,如果想判断一个用户的输入值(字符串)是否等于一个数字,你可以让"=="帮你完成类型转换: if(document.form1.txtAge.value == someNumericVar) { ... } 也可以提前转换: if(parseInt(document.form1.txtAge.value) == someNumericVar) { ... } 如果你比较习惯于强类型的编程语言(比如C#,Java等),那么这里你可以延续你的习惯(类型转换),这样也会增强程序的可读性 。 有一种情况需要注意,就是计算机的区域设置 。如果用"<"和">"来比较字符串,那么JavaScript把它们作为Unicode来比较, 但显然,人们在浏览网页时不会把文本当作Unicode来阅读:) 比如在西班牙语中,按照传统的排序,"ch"将作为一个字符排在"c"和"d"之间 。localeCompare()提供了一种方式,可以帮助你使用默认 区域设置下的字符排序规则 。 复制代码 代码如下: var strings; // 要排序的字符串数组,假设已经得到初始化 strings.sort(function(a,b) { return a.localeCompare(b) }); // 调用sort()方法进行排序 七、字符串的查找 复制代码 代码如下: if(largeString.indexOf(shortString) != -1) { // 如果包含,进行相应处理; } 也许一个字符串会包含另一字符串不止一次,这时第二个参数startIndex也许会派上用场,下面这个函数演示如何求得一个字符串包含另外一个字符串的次数: 复制代码 代码如下: function countInstances(mainStr, subStr) { var count = 0; var offset = 0; do { offset = mainStr.indexOf(subStr, offset); if(offset != -1) { count++; offset += subStr.length; } }while(offset != -1) return count; } String对象有一个与indexOf()对应的方法,lastIndexOf(): strObj.lastIndexOf(substring[, startindex]) strObj为要进行判断的字符串,subString为要在strObj查找的子字符串,startIndex是可选的,表示查找的开始位置(基于0的 索引),如果startIndex省略,则从strObj末尾处查找,如果startIndex小于0,则从0开始,如果startIndex大于最大索 引,则从最大索引处开始 。该方法自右向左查找,返回subString在strObj中最后出现的位置,如果没有找到,返回-1 。 八、在Unicode值和字符串中的字符间转换 var strObj = "ABCDEFG"; 如果index指定的索引处没有字符,则返回值为NaN 。 要将Unicode编码转换为一个字符,使用String.fromCharCode()方法,注意它是String对象的一个"静态方法",也就是说在使用前不需要创建字符串实例: 复制代码 代码如下: var str = String.fromCharCode(72, 101, 108, 108, 111); // str == "Hello" 讨论: Unicode 包含了这个世界上很多书写语言的字符集,但别因为Unicode包含一个字符就期望这个字符能够在警告对话框、文本框或页面呈现时正常显示 。如果字符集不 可用,在页面将显示为问号或其它符号 。一台典型的北美的计算机将不能在屏幕上显示中文字符,除非中文的字符集及其字体已经安装 。 参考: |