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

(0)

相关推荐

  • ES6 常用特性总结

    一.ES6 基本认识 1.什么是 ES6? ES6 指的是 ECMAScript 6.0,是JavaScript 语言的一个标准.其目标是使JavaScript 可以用来编写复杂的大型的应用程序,成为 ...

  • JS的赋值与深浅拷贝实例

    赋值 基本类型: 传值,在栈内存中的数据发生数据变化的时候,系统会自动为新的变量分配一个新的之值在栈内存中,两个变量相互独立,互不影响的 引用类型: 传址,只改变指针的指向,指向同一个对象,两个变量相 ...

  • ES6中常用的10个新特性讲解

    ECMAScript 6(ES6) 目前基本成为业界标准,它的普及速度比 ES5 要快很多,主要原因是现代浏览器对 ES6 的支持相当迅速,尤其是 Chrome 和 Firefox 浏览器,已经支持 ...

  • JavaScript 对象的创建和操作

    <script>         // 对象是属性的无序集合,每个属性都是一个名/值对. 属性名称是一个字符串.         // 对象种类         // 内置对象(nativ ...

  • 关于JS字面量及其容易忽略的12个小问题

    简要问题1:不能使用typeof判断一个null对象的数据类型问题2:用双等号判断两个一样的变量,可能返回false问题3:对于非十进制,如果超出了数值范围,则会报错问题4:JS浮点数并不精确,0.1 ...

  • javascript 数组 对象的一些方法记录

    记录一下常用的数组和对象的一些方法 数组 push() 数组后添加元素 // 作用:把一个元素或多个元素,从数组后面添加到数组里面: // 参数:添加的数据 // 返回:添加后的数组的长度: let ...

  • TypeScript---数据类型

    TypeScript---数据类型 //字符串 let str: string = "你好ts" let str1: string = "你好typescript&quo ...

  • js去除字符串的最后一位

    使用slice方法 /** * slice(start,end) * start 要截取的字符串的起始下标 如果为负数从后面开始算起 -1指的是字符串的最后一位 * end 要截取的字符串的结尾下标 ...

  • 2021 年需要了解的 34 个 JavaScript 优化技巧

    前端试炼 前天 以下文章来源于掘金开发者社区 ,作者黄龙吐翠 掘金开发者社区掘金,一个帮助开发者成长的技术社区 原文地址:34 JavaScript Optimization Techniques t ...

  • 排坑&#183;IPhone&IOS中不兼容正则中的断言匹配

    阅文时长 | 1.14分钟 字数统计 | 1834.4字符 主要内容 | 1.问题切入 2.什么是断言匹配 3.断言匹配的替换方案 4.声明与参考资料 『排坑·IPhone&IOS中不兼容正则 ...