打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ES6-14【Unicode表示法、字符串方法、模板字符串】


一.Unicode表示法

(1).字符串拓展

四位以上解析

log("\u{20BB7}")

编码解析

log("\u{41}\u{42}\u{43}")//ABClog('\uD842\uDFB7' === '\u{20BB7}')//TRUE

(2).编码方法

es5中涉及到编码的

var s = "𠮷"console.log(s.length);//通过四个字节的方式解析打印2console.log(s.charAt(0));//� 通过charAt打印第一个字符console.log(s.charAt(1));//�

单独拿出来没有办法正确的表示一个字符

打印对应字符的码点

var s = "𠮷"log(s.charCodeAt(0))//55362 返回的是10进制的码点不是16进制,但是可以用方法转换log(s.charCodeAt(1))//57271log(Number.prototype.toString.call(55362,16));//d842log(Number.prototype.toString.call(57271,16));//dfb7

es6对应优化方法

codePointArt

var s = "𠮷"log(s.codePointAt(0));//134071 输出10进制log(Number.prototype.toString.call(134071 ,16));//20bb7

length

var s = "𠮷a"log(s.length);//3这样就会存在第一位的问题log(s.codePointAt(0));//134071 log(s.codePointAt(1));//57271log(s.codePointAt(2));//97log(Number.prototype.toString.call(97,16));//61 log('\u{61}')//a

有Symbol迭代器接口,所以是可以for of的

证明了es6不是通过长度来迭代的,超过字符限制也可正确打印

var s = "𠮷a"for(let value of s){    log(value)}//𠮷a"一个字节占8个byte

判断是否超过最大编码

function is32Bit(c){    return c.codePointAt(0) > 0xffff}log(is32Bit('吉'))//truelog(0xffff); //655535 比对的时候直接转为10进制比较

fromCharCode es5的方式

超出码点的范围

log(String.fromCharCode(0x20bb7));


处理方式是舍弃2 最高位

log(String.fromCharCode(0x20bb7) === String.fromCharCode(0x0bb7));//true

formCodePoint es6的方式

将编码转换为字符

弥补字符超出极限的问题

String.fromCodePoint(0x20BB7)//吉

for of就能正确处理超过长度的字符

String.fromCodePoint(0x20BB7)//吉for(let i = 0; i < str.length; i  ){    console.log(str[i])}//两个乱码for(let i of str){    console.log(i)}//吉

二.字符串方法

includes/startWith/endsWith

包含什么

以什么开始

以什么结束,

统统返回布尔值

let s = "Hello world!";log(s.startsWith('Hello'));log(s.endsWith('!'));log(s.includes("o"));//true true true

repeat

字符复制

log('x'.repeat(3));//xxxlog('x'.repeat(2.9));//xxlog('x'.repeat(NaN));// 空log('x'.repeat(0));// 空log('x'.repeat("3"));// 会有隐式转换 //xxx

padStart/padEnd

填充

log('x'.padStart(5,"ab"));//ababxlog('x'.padStart(4,"ab"));//abaxlog('x'.padEnd(4,"ab"));//xabalog('x'.padEnd(5,"ab"));//xabab

三.模板字符串

(1).基本用法

let name = 'web'let info = 'developer'let m = `I am a${name} ${info}`;log(m);//I am a web   developer

(2).进阶用法

表达式是可以运算的

let x = 1;let y = 2;log(`${x} ${y}=${x y}`)//1 2 = 3

调用对象

let obj = {x:1,y:2};log(`${obj.x obj.y}`) //3

调用函数且会隐式转换为字符串

function fn(){    return [1,2,3,4];}log(`foo${fn()}bar`)//foo1,2,3bar

模板字符串嵌套

let msg = `Hello,${'place'}`;console.log(msg)//Hello,place

模板渲染方法

const temp = arr1 =>     <table>        ${            arr1.map(addr =>                <tr><td>${addr.first}</td></tr>                <tr><td>${addr.last}</td></tr>            )        }        </table>const data = [    {first:"zhang",last:"san"},    {first:"li",last:"si"},] 

会出现有,的问题所以将将数组分割

 ${            arr1.map(addr =>                <tr><td>${addr.first}</td></tr>                <tr><td>${addr.last}</td></tr>            ).join('')        }

会有注入的问题

const data = [    {first:"zhang",last:"<script>alert('abc')</script>"},    {first:"li",last:"si"},]  

标签模板

解决注入问题

标签模板传参解析

第一个参数是包含了字符串字面量(即那些没有变量替换的值)的数组

后面的参数是已经替换后的变量值

  tag `Hello ${a b} world${a*b}`;    function tag($,$1,$2){        log($,$1,$2)    }    //['Hello ',' world','']13 50

书写方式

function SaferHTML(tempData){    let s = tempData;    for(let i = 1; i < arguments.length;i  ){        let arg = String(arguments[i]);        s  = arg.replace(/</g,"#lt")//#==&有道云不合适                .replace(/>/g,"#gt");        s  = tempData[i]    }    return s;}let sender = '<script>alert('abc')</script>'let message = SaferHTML `<p>${sender} has set you message`log(message);//

来源:https://www.icode9.com/content-4-770101.html

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
JavaScript字符串操作方法大全,包含ES6方法
ES6关于Unicode的相关扩展
ES6之变量常量字符串数值
JavaScript 学习-12.模板字符串(Template Strings)
ES6 - 基础学习(5): 模板字符串和字符串新增方法
JavaScript 中的 String 类型 模板字面量定义字符串
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服