首頁 > web前端 > css教學 > 主體

JavaScript中的字串操作

高洛峰
發布: 2016-11-25 11:18:19
原創
1014 人瀏覽過

JavaScript中的字串操作

一、概述

   字串在JavaScript中幾乎無所不在,在你處理使用者的輸入資料的時候,在讀取或設定DOM物件的屬性時,在操作cookie時,當然還有更多...。 JavaScript的核心部分提供了一組屬性和方法用於通用的字串操作,如分割字串,改變字串的大小寫,操作子字串等。

    目前的大部分瀏覽器也能從強大的正規表示式獲益,因為它極大地簡化了大量的字串操作任務,不過它也需要你克服一條有些陡峭的學習曲線。在這裡,主要是介紹字串本身的一些操作,正規表示式會在以後的隨筆中涉及。

 

二、字串的建立

    建立一個字串有幾種方法。最簡單的是用引號將一組字元包含起來,可以將其賦值給一個字串變數。

    var myStr = "Hello, String!";
登入後複製

    可以用雙引號或單引號將字串包含,但要注意,作為界定字串的一對引號必須是相同的,不能混用。

    像var myString = "Fluffy is a pretty cat.'; 這樣的聲明就是非法的。

    允許使用兩種引號,使得某些操作變得簡單,例如將一種嵌入另外一種:

document.write("<img src=&#39;img/logo.jpg&#39; height=&#39;30&#39; width=&#39;100&#39; alt=&#39;Logo&#39;>");
登入後複製

 

 

    我們在上面腳本創建了幾個字符串,但本質上,它們並不是真正的字符串對象,準確地說,它們是字符串類型的值。使用下列語句:var strObj = new String("Hello, String!");

    使用typeof運算子檢視會發現,上面的myStr型別為string,而strObj型別為object。的長度,使用其length屬性:string.length。

    得到字串的指定位置的字元使用方法:string.charAt(index);

 

、個或多個字串拼接為一個大的字串

解:

    很簡單,就用一個"+"將兩個字串"相加":

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內容呈現,就無效了,此時用"
"代替它:

 

 
var htmlString = "First line of string.<br>Second line of string.";
document.write(htmlString);
登入後複製

 

    String物件還提供了方法concat(),它完成與"+"相同的功能:

string.concat(value1, value2, ...)
登入後複製

    不過concat()方法顯然不如"+"來得直觀簡潔。

    取得一字串的一部分的副本。 .substring(from, to)

    第一個參數from指定了子字串在原字串中的起始位置(基於0的索引);第二個參數to是可選的,它指定了子字串在原字串的結束位置(基於0的索引),一般情況下,它應比from大,如果它被省略,那麼子字串將一直到原字串的結尾處。參數to大了會怎樣? JavaScript會自動調解子字串的起止位置,也就是說,substring()總是從兩個參數中較小的那個開始,到較大的那個結束。不過要注意,它包含起始位置的那個字符,但不包含結束位置的那個字符。

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)

   參數start表示子字串的起始位置,如果為負數,那麼可以理解為倒數第幾個開始,例如-3表示從倒數第三個開始;參數end表示結束位置,與start一樣,它也可以是負數,其意義也表示到倒數第幾個結束。 slice()的參數可以是負數,所以要比substring()更靈活,但沒那麼寬容了,如果start比end要大,它將傳回一個空字串(範例略)。

    還有一個方法是substr(),其原型為: string.substr(start, length)

    從原型可以看出它的參數的意義,start表示起始位置,length則表示子字串的長度。 JavaScript標準不主張使用該方法。

五、字串的大小寫轉換

問題:

在你的页面上有文本框接收用户的输入信息,比如城市,然后你会根据他的城市的不同做不同的处理,这时自然会用到字符串比较,那么在比较前,最好进行大小写转换,这样只要考虑转换后的情形即可;或者要在页面上收集数据,然后将这些数据存储在数据库,而数据库恰好只接收大写字符;在这些情况下,我们都要考虑对字符串进行大小写转换。

解决方案:

使用toLowerCase()和toUpperCase()方法:

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()方法进行排序
登入後複製

七、字符串的查找

问题:

判断一个字符串是否包含另一个字符串。

解决方案:

使用string的indexOf()方法:

 strObj.indexOf(subString[, startIndex])
登入後複製

strObj为要进行判断的字符串,subString为要在strObj查找的子字符串,startIndex是可选的,表示查找的开始位置(基于0的索引),如果startIndex省略,则从strObj开始处查找,如果startIndex小于0,则从0开始,如果startIndex大于最大索引,则从最大索引处开始。

indexOf()返回strObj中subString的开始位置,如果没有找到,则返回-1。在脚本中,可以这么使用:

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值和字符串中的字符间转换

问题:

获得一个字符的Unicode编码值,反之亦然。

解决方案:

要获得字符的Unicode编码,可以使用string.charCodeAt(index)方法,其定义为:

  strObj.charCodeAt(index)
登入後複製

index为指定字符在strObj对象中的位置(基于0的索引),返回值为0与65535之间的16位整数。例如:

var strObj = "ABCDEFG";
    var code = strObj.charCodeAt(2); // Unicode value of character &#39;C&#39; is 67
登入後複製

如果index指定的索引处没有字符,则返回值为NaN。

要将Unicode编码转换为一个字符,使用String.fromCharCode()方法,注意它是String对象的一个"静态方法",也就是说在使用前不需要创建字符串实例:

String.fromCharCode(c1, c2, ...)
登入後複製

它接受0个或多个整数,返回一个字符串,该字符串包含了各参数指定的字符,例如:

var str = String.fromCharCode(72, 101, 108, 108, 111);  // str == "Hello"
登入後複製

 

讨论:

     Unicode包含了这个世界上很多书写语言的字符集,但别因为Unicode包含一个字符就期望这个字符能够在警告对话框、文本框或页面呈现时正常显示。如果字符集不可用,在页面将显示为问号或其它符号。一台典型的北美的计算机将不能在屏幕上显示中文字符,除非中文的字符集及其字体已经安装。

 以上就是JavaScript中的字符串操作的内容,更多相关内容请关注PHP中文网(www.php.cn)!


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!