继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

ES6对字符串的拓展(2018-04-18)

倚天杖
关注TA
已关注
手记 323
粉丝 47
获赞 187

新特性:模板字符串

    “模板字符串”是字符串的一个新特性,传统的字符串实现拼接的时候,要将变量插入字符串中,语法是这样的:

let name = "Jacky";
let occupation = "doctor";
//传统字符串拼接
let str = "He is "+ name +",he is a "+ occupation;

    这种写法没什么不好,只是数据一旦多起来就很繁琐,你会看到N多个加号“+”,N多个引号' “” ',ES6给了我们另一种更简捷的写法,来看一下下面这段小代码:

let name = "Jacky";
let occupation = "doctor";
//模板字符串拼接
let str = `He is ${name},he is a ${occupation}`;

注意事项:

1、可以定义多行字符串:

    传统的多行字符串写法:

let str = "write once ," +

"run anywhere";

    模板字符串的写法:

let str = `write once ,
run anywhere`;

    直接换行即可,但是要注意的是:所有的空格和所进都会被保留在输出中。如果控制台输出字符串str的话,代码上换了行,控制台输出的时候也会换行。

2、${ }中可以放任意的javascript表达式

    ${ }中可以是运算表达式:

var a = 1;
var b = 2;
var str = `the result is ${a+b}`;
//进行加法运算 结果:the result is 3

    ${ }中可以是对象的属性:

var obj = {"a":1,"b":2};
var str = `the result is ${obj.a+obj.b}`;
//对象obj的属性
//结果:the result is 3.

    ${ }中可以是函数的调用:

function fn() {
    return 3;
}
var str = `the result is ${fn() }`;
//函数fn的调用,结果:the result is 3

新特性:标签模板

var name = "张三";
var height  = 1.8;

tagFn`他叫${name},身高${height}米。`;
//标签+模板字符串

//定义一个函数,作为标签
function tagFn(arr,v1,v2){
       console.log(arr);
        //结果:[ "他叫","身高","米。" ]
        console.log(v1);
         //结果:张三
        console.log(v2);
       //结果:1.8
}

tagFn是自定义的一个函数,它有三个参数分别是arr,v1,v2。函数tagFn的调用方式跟以往的不太一样,以往我们使用括号( )表示函数调用执行,这一次我们在函数名后面直接加上一个模板字符串,如下面的代码:

tagFn`他叫${name},身高${height}米。`;

     这样就是标签模板,你可以理解为标签函数+模板字符串,这是一种新的语法规范。

     接下来我们继续看函数的3个参数,从代码的打印结果我们看到它们运行后对应的结果,arr的值是一个数组:[ "他叫" ,  "身高"  ,  "米。" ],而v1的值是变量name的值:“张三”,v2的值是变量height的值:1.8。第一个参数arr是数组类型,它是内容是模板字符串中除了${ }以外的其他字符,按顺序组成了数组的内容,所以arr的值是[ "他叫",  "身高"  ,  "米。" ];第2,3个参数则是模板字符串中对应次序的变量name和height的值。

新特性:repeat函数

    repeat( )函数:将目标字符串重复N次,返回一个新的字符串,不影响目标字符串。

var name1 = "a";  //目标字符串
var name2 name1.repeat(3);
//变量name1被重复三次;

console.log(name1);
//结果:a

console.log(name2);
//结果:aaa

    重复3次后返回一个新字符串赋值给name2,name1不受影响,所以name1的值不变。

新特性:includes函数

    includes( )函数:判断字符串中是否含有指定的子字符串,返回true表示含有和false表示未含有。第二个参数选填,表示开始搜索的位置。

var name = "晚饭吃苹果";    //目标字符串
name.includes('苹果');
//true, 含有

name.includes('香蕉');
//false, 不含有

name.includes('吃',1);
//true, 从第2个字符开始搜索, 含有

    传统的做法我们可以借助indexOf( )函数来实现,如果含有指定的字符串,indexOf( )函数就会子字符串首次出现的位置,不含有,则返回-1。我们通过返回值是否为-1来判断字符串中是否含有指定的子字符串,但是,我们现在可以用includes( )函数代替indexOf( )函数,因为它的返回值更直观(true或false),况且我们并不关心子字符串出现的位置。

新特性:startsWith函数

    startsWith( )函数:判断指定的子字符串是否出现在目标字符串的开头位置,第二个参数选填,表示开始搜索的位置。

var name = "晚饭吃苹果";  //目标字符串
name.startsWith('晚饭');
//true,出现在开头位置

name.startsWith('吃');
//false,不是在开头位置

name.startsWith('吃',2);
//true,从第3个字符开始

    我们如果判断字符串是否以某个子字符串开头,就可以直接使用startsWith( )函数即可,同样,第二个参数为1表示从第2个字符开始搜索。若要从第一个字符开始搜索,参数应该为0或者为空(默认从第一个字符开始搜索)。

新特性:endsWith函数

    endsWith( )函数:判断子字符串是否出现在目标字符串的尾部位置,第二个参数选填,表示针对前N个字符。

var name = "我就是王大拿";    //目标字符串
name.endsWith('我');
//false,不在尾部位置

name.endsWith('拿');
//true,在尾部位置

name.endsWith('拿',5);
//false,只针对前5个字符

name.endsWith('拿',6);
//true,针对前6个字符

新特性:codePointAt函数

    javascript中,一个字符固定为2个字节,对于那些需要4个字节存储的字符,javascript会认为它是两个字符,此时它的字符长度length为2。如字符:"?",就是一个需要4个字节存储,length为2的字符。这会有什么问题呢?对于4字节的字符, javascript无法正确读取字符,我们来试试看。

var str1 = "前端";
var str2 = "?";

str1.length;//length为2
str2.length; //length为2

str1.charAt(0);  //前
str1.charAt(1);  //端

str2.charAt(0);  //'�'
str2.charAt(1);  //'�'

    可以看到,str1和str2的长度length都是2,因为字符:"?"是一个4字节的字符,使用charAt函数(charAt() 方法可返回指定位置的字符)能正确读取字符串str1的字符,但无法正确读取4个字节的字符,此时返回结果出现了乱码。

        但是,如果我们使用ES6给我们提供的codePointAt( )函数,就可以处理这种4个字节的字符了,我们来看看怎么使用:

var str = "?";
str.codePointAt();  //结果:134071

    对于这个长度length为2字符:"?",codePointAt( )方法可以正确地识别出它是个4个字节的字符,并且能正确地返回它的码点的十进制数:134071,这个数字抓换成16进制就是20bb7,对应的Unicode编码则是\u20bb7。

新特性:String.fromCodePoint函数

    String.fromCodePoint( )函数:函数的参数是一个字符对应的码点,返回的结果就是对应的字符,哪怕这个字符是一个4字节的字符,也能正确实现。

String.fromCodePoint(134071); //结果:"?"

新特性:String.raw函数

    看函数名raw是未加工的的意思,正如这个函数的作用一样:返回字符串最原始的样貌,即使字符串中含有转义符,它都视而不见,直接输出。举个例子:

    1、未经String.raw( )处理的字符串:

console.log(`hello\nworld`);

//输出:hello

world

    2、\n会被识别为换行符,实现换行效果,而经过String.raw( )的同一个字符串的结果是:

console.log(String.raw`hello\nwolrd`);

//输出:hello\nwolrd

Unicode编码

    Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。

    charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是0-65535之间的整数。

'好哦'.charCodeAt(0).toString(16)
//"597d"

'好哦'.charCodeAt(1).toString(16)
//"54e6"

             

转载请注明原文地址哦~



作者:a小磊_
链接:https://www.jianshu.com/p/19f5f18a943f


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP