ES6的带标签模板文字的ES5替代方案是什么?

至宝弧

我在ES6标准中具有以下代码:

 function test(html, ...args) {
   return html.slice(1).reduce((str, elem, i) => str + args[i] + 
  elem, html[0]);
 }

并使用它:

 var hello = 'Hello';
 var world = 'Arcanadian Arc';
 document.body.innerHTML = test`<h1>${hello} ${world}!</h1>`;

输出:

 <h1>Hello Arcanadian Arc!</h1>

由于它是ES6标准代码,因此IE不支持它。因此,我决定使用Babel将其转换为ES5,这就是我所做的。但是我对输出不满意。这是输出:

function _templateObject() {
   var data = _taggedTemplateLiteral(["<h1>", " I am very happy </h1>"]);

    _templateObject = function _templateObject() {
     return data;
  };

   return data;
 }

  function _taggedTemplateLiteral(strings, raw) { if (!raw) { 
   raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }

 function test(html) {
   for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
     args[_key - 1] = arguments[_key];
   }

   return html.slice(1).reduce(function (str, elem, i) {
     return str + args[i] + elem;
   }, html[0]);
}

并使用它:

 var hello = 'Hello';
 var world = 'Arcanadian Arc';
 document.body.innerHTML = test(_templateObject(), hello);

它可以工作,但是语法有点混乱。我想用{{}}或其他替换ES6的$ {}来称呼这样的话,它看起来像这样:

var hello = "Hello";
var world = "Arcanadian Arc";
document.body.innerHTML = test`<h1>{{ hello }} {{ world }}!';

输出:

<h1>Hello Arcanadian Arc!</h1>

它看起来很像ES6和主要内容,它不像早期版本那样凌乱。但是我不知道该怎么做!你能帮助我吗 ?但是问题是,这可以做到吗?可以用作ES6的替代产品吗?还是为此而设的?

提前致谢

代码疯子

您可以在regex和replace的帮助下执行类似的操作,但是在开发项目时应该使用最新功能,而这些怪癖将留给诸如此类工具babel或任何其他编译器的工具使用

var hello = "Hello";
var world = "Arcanadian Arc";

function test(str,args){
  return str.replace(/{{(.*?)}}/g, (m,g1)=> args[g1.trim()] || m)
}

console.log(test('<h1>{{ hello }} {{ world }}!</h1>',{hello,world}))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ES5与ES6的承诺

来自分类Dev

知道 ES5 中是否所有输入框都是空的(ES6 的 ES5 等价物是什么?)

来自分类Dev

带ES6模块的TypeScript的最佳方法是什么?

来自分类Dev

ES6中的getter方法在ES6之前的替代方法是什么

来自分类Dev

为什么ES6 IIFE和ES5 IIFE的执行上下文不同?

来自分类Dev

为什么ES6 IIFE和ES5 IIFE的执行上下文不同?

来自分类Dev

带ES6标签的模板函数如何解释其参数顺序?

来自分类Dev

ES6至ES5编译器

来自分类Dev

在ES5模块中支持ES6导入

来自分类Dev

推迟执行ES6模板文字

来自分类Dev

为什么ES6类语法控制台的日志与ES5类语法不同?

来自分类Dev

这段代码的 es5 等价物是什么

来自分类Dev

带换行符和标签插值的回流存储数据呈现ES5

来自分类Dev

为什么Angular构建会创建带有'es5'和'es2015'但没有'es6'(或根本没有后缀)的文件?

来自分类Dev

ES5和ES6中的Angular 2依赖注入

来自分类Dev

无需转译器即可将ES6 JavaScript转换为ES5

来自分类Dev

如何在ES6中导入“旧的” ES5代码

来自分类Dev

在运行时将ES5代码转换为ES6

来自分类Dev

React-native将getInitialState(ES5)转换为构造函数(ES6)“ ListView”

来自分类Dev

了解Babel编译的ES6至ES5代码

来自分类Dev

Webpack无法将ES6转换为ES5

来自分类Dev

从ES5与ES6编写的库中导入TypeScript

来自分类Dev

使用Babel.js将ES6箭头功能编译为Es5

来自分类Dev

无法将此ES6转换为ES5(包括扩展语法)

来自分类Dev

通过模块加载和类继承将ES6转换为ES5

来自分类Dev

React Native ES5 vs ES6解释要求

来自分类Dev

使用es5和es6将输入注入组件构造函数

来自分类Dev

如何在ES5中使用转译的ES6?

来自分类Dev

浏览器如何区分ES5和ES6脚本?

Related 相关文章

热门标签

归档