常見的幾個js疑痛點,match,charAt,charCodeAt,map,search

來源:互聯網
上載者:User

標籤:style   blog   http   io   color   os   ar   使用   java   

        JavaScript match() 方法

        定義和用法

        match() 方法可在字串內檢索指定的值,或找到一個或多個Regex的匹配。

        該方法類似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字串的位置。

  1. 文法
  2. //匹配字串,返回指定的值
  3. stringObject.match(searchvalue)
  4. //匹配正則,返回指定的值
  5. stringObject.match(regexp)


        使用 match() 來檢索一個字串例子:
  1. <html>
  2. <body>
  3. <script type="text/javascript">
  4. var str="Hello world!"
  5. document.write(str.match("world") + "<br />")
  6. document.write(str.match("World") + "<br />")
  7. document.write(str.match("worlld") + "<br />")
  8. document.write(str.match("world!"))
  9. </script>
  10. </body>
  11. </html>


        最終出現的結果為,world,null,null,world!


        使用 match() 來檢索一個Regex的匹配例子:
  1. <html>
  2. <body>
  3. <script type="text/javascript">
  4. var str="1 plus 2 equal 3";
  5. //這裡的Regex必須加上g,全域匹配,不然就會匹配一個值即返回
  6. document.write(str.match(/\d+/g))
  7. </script>
  8. </body>
  9. </html>

通常來說,我們用match用在正則上面比較多,也可以用其來代理indexOf和lastIndexOf來判斷字串裡面是否存在此值。


JavaScript search() 方法

        定義和用法

        search() 方法用於檢索字串中指定的子字串,或檢索與Regex相匹配的子字串,檢索到則返回匹配的子串的起始位置,無法檢索到值,返回-1。

  1. 文法
  2. stringObject.search(regexp)
  3. //該參數可以是需要在 stringObject 中檢索的子串,也可以是需要檢索的 RegExp 對象。
  4. //要執行忽略大小寫檢索,請追加標誌 i。
複製代碼

        search() 例子:

  1. <script type="text/javascript">
  2. var str="Visit W3School!"
  3. document.write(str.search(/W3School/))
  4. </script>


        返回索引值為6,search通常與正則配合使用,可以達到indexOf的效果。


JavaScript charAt() 方法

        定義和用法

        charAt() 方法可返回指定位置的字元。
        
        請注意,JavaScript 並沒有一種有別於字串類型的字元資料類型,所以返回的字元是長度為 1 的字串。
  1. 文法
  2. //返回指定位置的字串
  3. stringObject.charAt(index)


        chartAt執行個體:
  1. <script type="text/javascript">
  2. var str="Hello world!"
  3. document.write(str.charAt(1))
  4. </script>


        最終返回結果為:e,通常我們可以通過chartAt來從某個字串取得具體的字元。


        JavaScript charCodeAt() 方法

        定義和用法

        charCodeAt() 方法可返回指定位置的字元的 Unicode 編碼。這個傳回值是 0 - 65535 之間的整數。

        方法 charCodeAt() 與 charAt() 方法執行的操作相似,只不過前者返回的是位於指定位置的字元的編碼,而後者返回的是字元子串。

  1. 文法
  2. stringObject.charCodeAt(index)


        charCodeAt()執行個體

        注釋:字串中第一個字元的下標是 0。如果 index 是負數,或大於等於字串的長度,則 charCodeAt() 返回 NaN。

  1. <script type="text/javascript">
  2. var str="Hello world!"
  3. document.write(str.charCodeAt(1))
  4. //返回H的Unicode 編碼101
  5. </script>



        js中Array.prototype.map()方法

        定義和用法

        map() 方法返回一個由原數組中的每個元素調用一個指定方法後的傳回值組成的新數組。

  1. 文法
  2. array.map(callback[, thisArg])
  3. //callback原數組中的元素經過該方法後返回一個新的元素。
  4. //currentValue,callback 的第一個參數,數組中當前被傳遞的元素。
  5. //index,callback 的第二個參數,數組中當前被傳遞的元素的索引。
  6. //array,callback 的第三個參數,調用 map 方法的數組。
  7. //thisArg執行 callback 函數時 this 指向的對象。


        map 方法會給原數組中的每個元素都按順序調用一次 callback 函數。callback 每次執行後的傳回值組合起來形成一個新數組。 callback 函數只會在有值的索引上被調用;那些從來沒被賦過值或者使用 

delete 刪除的索引則不會被調用。callback 函數會被自動傳入三個參數:數組元素,元素索引,原數組本身。

        使用map()的第一個例子:

        下面的代碼將一個數組中的所有單詞轉換成對應的複數形式.

  1. function fuzzyPlural(single) {
  2.   var result = single.replace(/o/g, ‘e‘);  
  3.   if( single === ‘kangaroo‘){
  4.     result += ‘se‘;
  5.   }
  6.   return result; 
  7. }
  8. var words = ["foot", "goose", "moose", "kangaroo"];
  9. console.log(words.map(fuzzyPlural));
  10. //最後結果 ["feet", "geese", "meese", "kangareese"]
         求數組中每個元素的平方根例子

  1. var numbers = [1, 4, 9];
  2. var roots = numbers.map(Math.sqrt);
  3. /* roots的值為[1, 2, 3], numbers的值仍為[1, 4, 9] */


        在字串上使用 map 方法
  1. var map = Array.prototype.map
  2. var a = map.call("Hello World", function(x) { return x.charCodeAt(0); })
  3. // a的值為[72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]

        
  1. <!DOCTYPE HTML>
  2. <html lang="en-US">
  3. <head>
  4.         <meta charset="UTF-8">
  5.         <title></title>
  6. </head>
  7. <body>
  8.         <script type="text/javascript">                
  9.                 //var map = Array.prototype.map
  10.                 var a = Array.prototype.map.call("Hello World", function(x) { return x.charCodeAt(0); })
  11.                 // a的值為[72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
  12.                 alert(a);
  13.         </script>
  14. </body>
  15. </html>


        map相容舊環境

        map 是在最近的 ECMA-262 標準中新添加的方法;所以一些舊版本的瀏覽器可能沒有實現該方法。在那些沒有原生支援 map 方法的瀏覽器中,你可以使用下面的 Javascript 代碼來實現它。所使用的
演算法正是 ECMA-262,第 5 版規定的。假定Object, TypeError, 和 Array 有他們的原始值。而且 callback.call 的原始值也是 Function.prototype.call。
  1. // 實現 ECMA-262, Edition 5, 15.4.4.19
  2. // 參考: http://es5.github.com/#x15.4.4.19
  3. if (!Array.prototype.map) {
  4.   Array.prototype.map = function(callback, thisArg) {
  5.     var T, A, k;
  6.     if (this == null) {
  7.       throw new TypeError(" this is null or not defined");
  8.     }
  9.     // 1. 將O賦值為調用map方法的數組.
  10.     var O = Object(this);
  11.     // 2.將len賦值為數組O的長度.
  12.     var len = O.length >>> 0;
  13.     // 4.如果callback不是函數,則拋出TypeError異常.
  14.     if ({}.toString.call(callback) != "[object Function]") {
  15.       throw new TypeError(callback + " is not a function");
  16.     }
  17.     // 5. 如果參數thisArg有值,則將T賦值為thisArg;否則T為undefined.
  18.     if (thisArg) {
  19.       T = thisArg;
  20.     }
  21.     // 6. 建立新數組A,長度為原數組O長度len
  22.     A = new Array(len);
  23.     // 7. 將k賦值為0
  24.     k = 0;
  25.     // 8. 當 k < len 時,執行迴圈.
  26.     while(k < len) {
  27.       var kValue, mappedValue;
  28.       //遍曆O,k為原數組索引
  29.       if (k in O) {
  30.         //kValue為索引k對應的值.
  31.         kValue = O[ k ];
  32.         // 執行callback,this指向T,參數有三個.分別是kValue:值,k:索引,O:原數組.
  33.         mappedValue = callback.call(T, kValue, k, O);
  34.         // 傳回值添加到新書組A中.
  35.         A[ k ] = mappedValue;
  36.       }
  37.       // k自增1
  38.       k++;
  39.     }
  40.     // 9. 返回新數組A
  41.     return A;
  42.   };      
  43. }

常見的幾個js疑痛點,match,charAt,charCodeAt,map,search

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.