小编Ant*_*ige的帖子

ES6模板文字比eval更安全吗?

模板文字对我来说有点像eval,并且经常被引用使用eval是一个坏主意.

我不关心模板文字的性能,但我担心注入攻击(以及我可能没有想到的其他安全问题).

编辑

一个让我感到奇怪的事情的例子

let ii = 1;
function counter() {
    return ii++;
}
console.log(`${counter()}, ${ii++}, ${counter()}`);
Run Code Online (Sandbox Code Playgroud)

哪个输出

1,2,3

模板文字在全球范围内产生副作用.既可以通过功能,也可以直接使用.

编辑2

表示模板文字安全性的示例

let ii = 1;
let inc = function() { ii++; }
console.log('Starting: ' + ii);
let input = prompt('Input something evil (suggestion: inc() or ii++)');
console.log(`You input: ${input}`);
console.log('After template literal: ' + ii);
eval(input);
console.log('After eval: ' + ii);
Run Code Online (Sandbox Code Playgroud)

如果ii++在提示时输入,则会记录

开始:1

您输入:ii + = 1

模板文字后:1

评估后:2

编辑3

我已经开始研究ECMAScript规范了

javascript eval ecmascript-6 template-literals

18
推荐指数
1
解决办法
5067
查看次数

在递归生成函数中,收益后的*(星号/星号)语法是什么意思?

假设我已经创建了一个ES6生成器

function *createFibonacciIterator(a = 0, b = 1) {
  yield b;
  yield *createFib(b, b + a); // <== QUESTION IS ABOUT THIS LINE
}
Run Code Online (Sandbox Code Playgroud)

然后我使用该生成器获得前20个结果

let fibber = createFibonacciIterator();
for (let ii = 0; ii < 20; ii++) {
    console.log(fibber.next());
}
Run Code Online (Sandbox Code Playgroud)

如果我离开*了的yield *createFib(b, b + a);线的东西打破,这是有道理的,因为我不希望产生一个迭代器,但实际价值.

*发电机的技术含义是什么?

javascript iterator yield generator ecmascript-6

8
推荐指数
1
解决办法
2018
查看次数

我可以优化Meteor Android Cordova应用程序的首次加载时间吗?

发现

  • 我的应用程序在第一次运行时需要大约20秒才能加载行人天桥
  • 我的应用程序在首次运行时需要大约12秒才能加载*已删除人行横道
  • 我的应用程序在有或没有人行横道的后续运行中加载大约需要5秒钟(即使在完全关闭后)

*首次运行和清除本地数据似乎具有相同的结果

Cordova缓存假设

我认为Cordova在第一次运行时构建了一个缓存

  • 如果Crosswalk存在,首次运行后看起来大约30MB
  • 如果Crosswalk不存在,首次运行后看起来大约3MB

问题

  1. 我的'Cordova缓存假设'是否正确?
  2. 我有什么办法可以改善"首次运行"的加载时间吗?

构建/测试环境

  • 流星1.3.4.1
  • launch-screen包已删除(如流星论坛中所述)
  • crosswalk 包括/排除(虽然我更喜欢包括Crosswalk的兼容性)
  • Nexus 5运行Android 4.4.2

android cordova meteor crosswalk-runtime crosswalk

5
推荐指数
1
解决办法
373
查看次数