您的位置:365bet体育备用网址器 > 应用 > 中新增的一个标签,i)方法参数1为需要查询字符

中新增的一个标签,i)方法参数1为需要查询字符

2019-08-14 15:29

本文实例讲述了JavaScript基于replace 正则实现ES6的字符串模版功能。分享给大家供大家参考,具体如下:

本文实例讲述了ES6中字符串string常用的新增方法。分享给大家供大家参考,具体如下:

采用拼接字符串的形式,将 JSON 数据嵌入 HTML 中。开始时代码量较少,暂时还可以接受。但当页面结构复杂起来后,其弱点开始变得无法忍受起来:

ES6为js新增了很多方法,包括遍历、查询、替换等等,可以很简洁的替换ES5中的类似方法,本文不考虑codePointAt等不常用方法。

书写不连贯。每写一个变量就要断一下,插入一个 和 “。十分容易出错。

for…of:

无法重用。HTML 片段都是离散化的数据,难以对其中重复的部分进行提取。

let str="wbiokr";
for(let s of str){
  console.log(s)
}
//结果:w, b, i, o, k, r

无法很好地利用 标签。这是 HTML5 中新增的一个标签,标准极力推荐将 HTML 模板放入 标签中,使代码更简洁。

由于es5并没有为js制定字符串相关遍历方法,for…of无疑会是接下来前端开发中的一个很重要角色。

replace 正则实现

includes:

项目刚开始用的数据拼接

let str="wbiokr";
str.includes('wb');//结果:true
str.includes('wbiokr');//结果:true
str.includes('w',1);//false
str.includes('b',1);//true
function formatString() {
    if (arguments.length === 0)
      return null;
    var str = arguments[0];
    for (var i = 1; i < arguments.length; i  ) {
      var re = new RegExp('\{'   (i - 1)   '\}', 'gm');
      str = str.replace(re, arguments[i]);
    }
    return str;
},

string.includes(s,i)方法参数1为需要查询字符(串),参数2为查询的起始位置,返回布尔值,而indexOf返回查询的位置。

第一个参数为需要渲染的数据模板,其他参数为数据:

startsWith:

formatString('{0},My name is {1}', 'everyMan', '吴孔云')
let str="wbiokr";
str.startsWith('wb');//结果:true
str.startsWith('w');//结果:true
str.startsWith('w',1);//结果:false
str.startsWith('b',1);//true
str.startsWith('kr');//结果:false

这种后期维护较麻烦,一旦更改顺序,都需要更改~~就跟函数需要接收一大串参数一样,我们尽量写成对象的形式,

string.startsWith(s,i)方法参数1为需要查询字符(串),参数2为查询的起始位置,返回布尔值,表示是否字符(串)位于string的头部位置。

var myObject = maker(f,l,m,c,s);//不建议写法
var myObject = maker({//建议写法
   first : f,
   last: l,
   state:s,
   city:c
});

endsWith:

在网上搜索看到一个例子,可以类似实现ES6的字符串模版形式,博客是一个高中生写的,戳链接 。

let str="wbiokr";
str.endsWith('kr');//结果:true
str.endsWith('r');//结果:true
str.endsWith('wb');//结果:false
str.endsWith('i',6);//false
str.endsWith('i',3);//false
str.endsWith('kr',6);//true
function render(template, context) {
  //被转义的的分隔符 { 和 } 不应该被渲染,分隔符与变量之间允许有空白字符
  var tokenReg = /(\)?{([^{}\] )(\)?}/g;
  return template.replace(tokenReg, function (word, slash1, token, slash2) {
    //如果有转义的{或}替换转义字符
    if (slash1 || slash2) {
      return word.replace('\', '');
    }
    // 切割 token ,实现级联的变量也可以展开
    var variables = token.replace(/s/g, '').split('.');
    var currentObject = context;
    var i, length, variable;
    for (i = 0, length = variables.length; i < length;   i) {
      variable = variables[i];
      currentObject = currentObject[variable];
      // 如果当前索引的对象不存在,则直接返回空字符串。
      if (currentObject === undefined || currentObject === null) return '';
    }
    return currentObject;
  })
}
String.prototype.render = function (context) {
  return render(this, context);
};
"{greeting}! My name is { author.name }.".render({
  greeting: "Hi",
  author: {
    name: "hsfzxjy"
  }
});
// Hi! My name is hsfzxjy.

string.endsWith()方法参数1为需要查询字符(串),参数2为查询的起始位置,返回布尔值,表示是否字符(串)位于string的尾部位置。

扩展:ES6字符串模版API

repeat:

ES6引入了一种新型的字符串字面量语法,我们称之为模板字符串(template strings)。除了使用反撇号字符 ` 代替普通字符串的引号 ' 或 ” 外,它们看起来与普通字符串并无二致。

let str="wbiokr";
str.repeat(2);//wbiokrwbiokr"str被重复了2次返回,str不改变
'hi'.repeat(3);//"hihihi"
'hi'.repeat(2.6);//'hihi'浮点类型参数,会取整重复
'hi'.repeat(0);//''0的时候返回空字符串
'hi'.repeat(-3)//负数,报错
'hi'.repeat(undefined)//''undefined转化为0
'hi'.repeat(null)//''null转化为0
'hi'.repeat(NaN)//''NaN转化为0
var a = 'kenny'
`my name is ${a}` //"my name is kenny"

string.repeat(num)方法,参数num为重复字符串的次数,各种情况下的返回值见代码。

可以用bable编译成ES5。

${} :

PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:

let str="wbiokr";
$('#box').html('
  there is a word ${str},i know it
');
//there is a word wbiokr,i know it

JavaScript正则表达式在线测试工具:

开发过程中,经常用到jq为元素动态添加子元素或动态添加内容,过去我们都是通过字符串拼接进行添加变量。ES6添加的 可以很好的取代jq的老方法,单引号加上'${}'不仅可以嵌入变量,还能保持代码格式,并且{}里面可以进行js代码运行。

正则表达式在线生成工具:

更多相关内容可查看本站专题:《ECMAScript6(ES6)入门教程》、《JavaScript数组操作技巧总结》、《JavaScript字符与字符串操作技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript错误与调试技巧总结》及《javascript面向对象入门教程》

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《ECMAScript6(ES6)入门教程》、《JavaScript正则表达式技巧大全》、《JavaScript字符与字符串操作技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript错误与调试技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家基于ECMAScript的程序设计有所帮助。

希望本文所述对大家JavaScript程序设计有所帮助。

您可能感兴趣的文章:

  • es6 字符串String的扩展(实例讲解)
  • 详解JavaScript ES6中的模板字符串
  • ES6新特征数字、数组、字符串
  • JavaScript中ES6字符串扩展方法
  • ES6新特性之字符串的扩展实例分析
  • ES6(ECMAScript 6)新特性之模板字符串用法分析
  • ES6新特性之变量和字符串用法示例
  • ES6概念 Symbol toString()方法

您可能感兴趣的文章:

  • ES6学习笔记之正则表达式和字符串正则方法分析
  • ES6字符串模板,剩余参数,默认参数功能与用法示例
  • ES6新特性之字符串的扩展实例分析
  • ES6新特性之变量和字符串用法示例
  • ES6(ECMAScript 6)新特性之模板字符串用法分析
  • ES6新特征数字、数组、字符串
  • JavaScript中ES6字符串扩展方法
  • 详解JavaScript ES6中的模板字符串
  • 跟我学习javascript的最新标准ES6
  • JavaScript中ES6 Babel正确安装过程
  • JavaScript ES6中CLASS的使用详解
  • ES6中非常实用的新特性介绍
  • JS ES6多行字符串与连接字符串的表示方法

本文由365bet体育备用网址器发布于应用,转载请注明出处:中新增的一个标签,i)方法参数1为需要查询字符

关键词: