ES6筆記 -- 字符串拓展

字符串拓展

Unicode 相關

  • JS 允許使用/uxxxx的Unicode方式顯示字符, 但是只限于碼點在/u0000~/uFFFF之間, 超過該范圍的碼點必須用雙字節形式表示
  • ES6 中, 將碼點放入大括號內, 就可以解讀
  • JS 不能處理4個字節的字符, 字符串長度會被誤判為2
  • ES6 提供了codePointAt方法, 能夠正確處理 4 個字節儲存的字符
  • 但是該方法在返回 4 個字節的字符串時, 依舊會返回兩個參數, 第一個為正確解讀的碼點, 第二個為后兩個字節的碼點, 所以在多個包含 4 個字節的字符串時, 需要使用for...of循環
  • 同樣的, 將 4 個字節的碼點轉換成字符串, ES6 提供了String.fromCodePoint()方法

字符串操作

  • ES6 為字符串添加了遍歷器接口, 使其可以被for...of循環遍歷, 相對傳統的for, 其優勢在于可以識別大于/uFFFF的碼點

includes(), startsWith(), endsWith()

  • 這三個方法可以確定字符串是否包含在另一個字符串中

    • includes()方法表示是否找到了參數字符串.
    • startsWith()方法表示參數字符串是否為原字符串的首位
    • endsWith()方法表示參數字符串是否為原字符串的尾位
    • 三個方法的第一個參數為匹配字符串
    • 前兩個方法第二個參數為起始搜索位置(從 0 開始)
    • endsWith()方法第二個參數為原字符串從左到右截取后剩下的長度
    let s = 'Hello world!';s.startsWith('world', 6) // true
    s.endsWith('Hello', 5) // true
    s.includes('Hello', 6) // false

repeat()

  • repeat()方法返回一個新字符串, 其接收一個number類型參數, 表示重復次數

    • 該參數不能為小于等于 -1 的負數或者Infinity
    • 如果負數大于 -1, 則視為0
    • 如果是字符串, 則會先轉換為數字
    • 其他的均視為0
    'x'.repeat(3) // "xxx"

padStart(), padEnd()

  • 這兩個方法用于補全字符串

  • 當字符串長度不夠指定長度時, 會在頭部或尾部補全

  • 該方法接收兩個參數

    • 第一個是指定字符串長度,
    • 第二個是用來補全的字符串, 該參數不填默認為空格
  • 當字符串長度加上補全字符串超過指定長度時, 將截取超出位數的補全字符串

  • 該方法一般用在數值補全指定位數

    '1'.padStart(10, '0') // "0000000001"
    '12'.padStart(10, '0') // "0000000012"
    '123456'.padStart(10, '0') // "0000123456"

模板字符串相關

基本用法

  • 語法

    • 模板字符串定義在兩個反引號( ` )之間,
    • 它可以當做普通字符串使用, 也可以定義多行字符串, 或者在字符串中嵌入變量
    • 變量寫在${}之中, 除了能調用變量還能引用對象屬性, 函數和進行簡單的運算
    • 如果需要使用反引號, 則需要用反斜杠 ?轉義
    • 模板字符串默認會保留空格與換行, 如果不需要可以用trim()方法消除
    $('#result').append(`There are <b>${basket.count}</b> itemsin your basket, <em>${basket.onSale}</em>are on sale!
    `);

標簽模板

  • 模板字符串還可以當做模板標簽

  • 當模板字符串里為不包含變量的簡單字符串, 數字等時, 函數會將模板字符串當做參數來處理

    • 該用法不能代替原來函數的調用方式, 這里只是介紹使用方法, 原因在下面解釋
    alert`'abc'123`
    // 'abc'123
  • 當模板字符串里包含變量時, 會有以下解析

    • 將被變量( 即${}標識 )分開的普通字符串放進數組并當做第一個參數

    • 變量被從左到右依次解析并依次放入第二, 第三...第n個參數

      tag`Hello ${ a + b } world ${ a * b }`;
      // 相當于 tag(['Hello ', ' world ', ''], 15, 50);
    • 需要注意的是, 使用這種傳參方式

      • 第一個參數永遠是數組
      • 數組里有一個raw屬性, 該屬性保存的是轉義后的原字符串, 所以該方式不能取代傳統函數調用方式
      • 數組里的元素個數永遠等于參數個數
      • 函數參數至少為兩個(數組元素同), 如果只傳一個變量, 則數組的兩個元素為空
      • 如果用這種方式傳遞字符串, 必須包含在單引號 ( ' )內, 否則會當做變量處理
      • 通常這樣做函數只聲明一個參數, 傳遞的變量通過arguments方法來拿
    • 下面一個復雜的案例可以涵蓋以上內容

      let total = 30;
      let msg = passthru`The total is ${total} (${total*1.05} with tax)`;function passthru(literals) {let result = '';let i = 0;// 這里 literals 與 arguments 長度一致while (i < literals.length) {// 這里 i++ 是使下面 arguments 直接從第二個參數拿起result += literals[i++];if (i < arguments.length) {result += arguments[i];}}return result;
      }msg // "The total is 30 (31.5 with tax)"
    • 通常標簽模板重要應用是用來過濾 HTML 字符串, 防止用戶輸入惡意內容

      let message =SaferHTML`<p>${sender} has sent you a message.</p>`;function SaferHTML(templateData) {let s = templateData[0];for (let i = 1; i < arguments.length; i++) {let arg = String(arguments[i]);// Escape special characters in the substitution.s += arg.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");// Don't escape special characters in the template.s += templateData[i];}return s;
      }let sender = '<script>alert("abc")</script>'; // 惡意代碼
      let message = SaferHTML`<p>${sender} has sent you a message.</p>`;console.log(message)
      // <p>&lt;script&gt;alert("abc")&lt;/script&gt; has sent you a message.</p>

      其他的需要過濾轉換的都可以使用標簽模板

轉載于:https://www.cnblogs.com/xvvx/p/10278418.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387580.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android 轉發短信

通過這些代碼也可以對遠程手機實現短信控制。有興趣的可以自己改一下&#xff0c;說一下簡單的原理&#xff0c;要實現控制的話&#xff0c;必須得走一個固定的號碼&#xff0c;固定的格式&#xff0c;然后通過得到此號碼的內容&#xff0c;然后通過固定的內容&#xff0c;就可…

[Noi2016]區間

傳送門 Code /* 線段樹 尺取法 */ #include<bits/stdc.h> #define ll long long #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)>(b)?(b):(a)) #define reg register inline int read() {int x0,f1;char chgetchar();while(ch<0||ch>9){if(…

安裝CentOS6.8并配置網絡圖文解說親測全過程

安裝環境&#xff1a; 本文是在win10系統安裝上VMWare并配置Centos6.8虛擬機。 準備工作 1.安裝VMWare虛擬機 1.1下載VMWare12資源鏈接&#xff1a;https://pan.baidu.com/s/1AhfMSDXLO-aA0eMqnuMWHg 提取碼&#xff1a;iftd 1.2安裝VMWare&#xff0c;在安裝過程中需要輸入密鑰…

Paxos算法是萊斯利·蘭伯特(Leslie Lamport)1990年提出的一種基于消息傳遞的一致性算法。

Paxos算法是萊斯利蘭伯特(Leslie Lamport)1990年提出的一種基于消息傳遞的一致性算法。Paxos算法解決的問題是一個分布式系統如何就某個值&#xff08;決議&#xff09;達成一致。在工程實踐意義上來說&#xff0c;就是可以通過Paxos實現多副本一致性&#xff0c;分布式鎖&…

09、策略模式

2019獨角獸企業重金招聘Python工程師標準>>> 策略模式與工廠模式最大的區別在于&#xff0c;策略模式注重的是對算法的維護&#xff0c;也可以理解為對算法的封裝。而工廠模式&#xff0c;則只是負責創建類&#xff0c;在剛接觸策略模式時候&#xff0c;往往與工廠模…

Linux創建、刪除文件和文件夾命令

https://www.cnblogs.com/c-x-m/p/9794082.html轉載于:https://www.cnblogs.com/sun-ldy/p/10279025.html

Java編寫代理服務器(Burp攔截Demo)一

大家都知道大名鼎鼎的BurpSuite代理神器&#xff0c;對于抓取HTTP請求非常好用&#xff0c;偶然&#xff0c;一朋友問我Java應該如何去編寫代理服務器&#xff08;因為他想做某些東西&#xff09;&#xff0c;有沒有相關的API 去實現&#xff0c;我想說&#xff0c;差不多你能想…

mysql實戰33 | 我查這么多數據,會不會把數據庫內存打爆?

我經常會被問到這樣一個問題&#xff1a;我的主機內存只有 100G&#xff0c;現在要對一個 200G 的大表做全表掃描&#xff0c;會不會把數據庫主機的內存用光了&#xff1f;這個問題確實值得擔心&#xff0c;被系統 OOM&#xff08;out of memory&#xff09;可不是鬧著玩的。但…

[BZOJ2125]最短路

Description 給一個N個點M條邊的連通無向圖&#xff0c;滿足每條邊最多屬于一個環&#xff0c;有Q組詢問&#xff0c;每次詢問兩點之間的最短路徑。 Input 輸入的第一行包含三個整數&#xff0c;分別表示N和M和Q 下接M行&#xff0c;每行三個整數v&#xff0c;u&#xff0c;w表…

Rabbit MQ windows下安裝

Rabbit MQ 是建立在強大的Erlang OTP平臺上&#xff0c;因此安裝Rabbit MQ的前提是安裝Erlang。通過下面兩個連接可以下載安裝最新的版本&#xff1a; 下載并安裝 Eralng OTP For Windows otp_win64_18.3.exe&#xff08;erlang的環境&#xff09;運行安裝 Rabbit MQ Serve…

spark集群配置以及java操作spark小demo

spark 安裝配置使用java來操作sparkspark 安裝 tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz rm spark-2.4.0-bin-hadoop2.7.tgz mv spark-2.4.0-bin-hadoop2.7 sparksudo vim /etc/profileexport SPARK_HOME/usr/local/stormexport PATH$PATH:$SPARK_HOME/binsource /etc/profile…

C++筆記(3)——string.h相關的一些小知識

strlen() 用于得到字符數組中第一個\0前的字符的個數&#xff0c;格式如下&#xff1a; strlen(數組); 例子&#xff1a; #include <stdio.h> #include <string.h>int main(){char str[10];gets(str);int len strlen(str);printf("%d\n", len);return 0…

最近發現系統rabbitmq丟消息比較嚴重,于是想了些方案來查找原因,給將消息發送方式添加確認機制。 我們在本地模擬了wms發送打標消息的場景. 1. 有事務 2. 先發點對點隊列, 再發訂

最近發現系統rabbitmq丟消息比較嚴重&#xff0c;于是想了些方案來查找原因&#xff0c;給將消息發送方式添加確認機制。 我們在本地模擬了wms發送打標消息的場景. 1. 有事務 2. 先發點對點隊列, 再發訂閱隊列 3. 批量發送 4. 在生產環境與測試環境的RabbitMQ都進行了測試 …

uoj#388. 【UNR #3】配對樹(線段樹合并)

傳送門 先考慮一個貪心&#xff0c;對于一條邊來說&#xff0c;如果當前這個序列中在它的子樹中的元素個數為奇數個&#xff0c;那么這條邊就會被一組匹配經過&#xff0c;否則就不會 考慮反證法&#xff0c;如果在這條邊兩邊的元素個數都是偶數&#xff0c;那么至少有兩組匹配…

一道Js判斷對象是否相等面試題引發的故事

話說&#xff0c;說什么呢&#xff0c;先看下題吧還是、 function checkName(data) { if (data { name: LIMING }) { console.log("one"); 復制代碼 } else if (data { name: LIMING }) { console.log(two"); 復制代碼 } else { console.log("three&quo…

序列化

什么是序列化&#xff1f;為什么要實現序列化&#xff1f;有什么作用&#xff1f; 序列化就是把具體的對象轉化成二進制的字節碼文件進行存儲或網絡傳輸。反過來就是反序列化。 將要存儲或網絡傳輸的對象必須實現序列化才可以。 如果一個類已經實現了序列…

搭建Hive平臺

http://www.cnblogs.com/gpcuster/archive/2010/02/24/1672635.html Hive是一個基于Hadoop的數據倉庫平臺。通過hive&#xff0c;我們可以方便地進行ETL的工作。hive定義了一個類似于SQL的查詢語言&#xff1a;HQL&#xff0c;能夠將用戶編寫的QL轉化為相應的Mapreduce程序基于…

Java語言與sikuli配合

很早之前寫過一篇介紹sikuli的文章。本文簡單介紹如何在java中使用sikuli進自動化測試。 圖形腳本語言sikuli sikuli IDE可以完成常見的單擊、右擊、移動到、拖動等鼠標操作&#xff0c;java引用sikuli-script.jar同樣可以執行這些常見的鼠標操作&#xff0c;因此即可方便的編寫…

列表生成式,生成器表達式,模塊的使用

三元表達式 無論條件成立與否都要返回一個值, 用于簡化僅有一個判斷的函數(或代碼塊)遞歸 遞歸有循環調用的次數限制,調用函數時,函數相關數據要入棧,而棧區是有限的 二分查找法匿名函數 僅能在定義時使用一次,定義完了就沒了 參數沒有括號,不能有return,會自…

C#怎么用代碼模擬手機去訪問手機網站抓取數據

WebClient client new WebClient ();client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");更改user-agent為手機瀏覽器的。模擬谷歌Android&#xff1a;user-agent"Mozilla/5.0 (Linux; …