标签: v8

如何有效地检查变量是否是数组或对象(在NodeJS和V8中)?

在NodeJS和V8中有没有办法有效地检查变量是Object还是Array?

我正在为MongoDB和NodeJS编写一个Model,并遍历对象树,我需要知道对象是简单的(Number,String,...)还是复合(Hash,Array).

似乎V8有快速内置Array.isArray,但如何检查对象是否是一个对象?我的意思是复杂的对象,如哈希{}或类的实例,不是这样的new String()

通常它可以这样做:

Object.prototype.toString.call(object) == "[object Object]"
Run Code Online (Sandbox Code Playgroud)

或这个:

object === Object(object)
Run Code Online (Sandbox Code Playgroud)

但似乎这种操作并不便宜,也许有一些效率更高?如果它不是通用的并且不适用于所有引擎,那就没关系,我只需要在V8上工作.

javascript v8 typeof instanceof node.js

42
推荐指数
8
解决办法
11万
查看次数

如何在node.js沙箱中安全地运行用户提交的脚本?

安全地在node.js中运行(可能是恶意的)用户提交的脚本有哪些选项?即在一个阻止代码访问敏感数据和API的环境中?

vm.runInNewContext(userScript, {})是一个诱人的起点......但似乎那里有已知的问题.

沙箱模块看起来很有趣,但使用runInNewContext()也使我有点持怀疑态度的吧.

javascript v8 node.js

41
推荐指数
2
解决办法
1万
查看次数

如何在节点中为shell命令转义字符串?

nodejs中,执行外部命令的唯一方法是通过sys.exec(cmd).我想调用外部命令并通过stdin给它数据.在nodejs中,似乎还没有一种方法可以打开命令然后将数据推送到它(只是执行并接收其标准+错误输出),所以看来我现在必须这样做的唯一方法是通过单个字符串命令,例如:

var dangerStr = "bad stuff here";
sys.exec("echo '" + dangerStr + "' | somecommand");
Run Code Online (Sandbox Code Playgroud)

像这样的问题的大多数答案都集中在nodegs(使用谷歌的V8 Javascript引擎)或其他语言(如Python)的本机功能的正则表达式.

我想逃避dangerStr,以便像上面那样组成一个exec字符串是安全的.如果有帮助,dangerStr将包含JSON数据.

javascript shell v8 escaping node.js

40
推荐指数
5
解决办法
2万
查看次数

在iOS应用程序中嵌入JavaScript引擎

我想知道是否有人成功将一个javascript引擎/解释器移植到iOS.我正在编写一款iPhone游戏,我想使用Javascript作为高级脚本语言(AI,游戏等),但要做到这一点,我需要将JS引擎编译成静态库并将其链接我的iPhone OS的objectiveC程序.我正在看一些候选JS引擎,但我找不到任何成功案例.

这是我希望用于iOS的js引擎

  • 谷歌的V8 JavaScript引擎
  • mozilla的SpiderMonkey

另一种方法是使用UIWebView'sJavascript回调接口,但这需要将整个加载UIWebView到内存中,我听到的经验是性能通常很慢.

感谢是否有人有类似的经历或知道任何参考!

[更新]正如Kostis所说,Apple 在WWDC 2013中引入了JavascriptCore

javascript iphone v8 ios

40
推荐指数
2
解决办法
2万
查看次数

为什么Node.js没有原生DOM?

当我发现Node.js是使用V8 JavaScript引擎构建的时候,我想:

很棒,网页抓取会更容易,因为页面将像在浏览器中一样呈现,其中"本机"DOM支持XPath并且页面上的任何AJAX调用都已执行.

  1. 当它使用与Chrome相同的JavaScript引擎时,为什么它没有原生DOM?
  2. 为什么它没有在检索到的页面中运行JavaScript的模式?
  3. 我不了解JavaScript引擎与Web浏览器中的引擎有什么关系?

非常感谢!

javascript dom v8 node.js headless-browser

40
推荐指数
4
解决办法
3万
查看次数

Math.random()返回大于1的值?

在JavaScript中使用随机数字时,我发现了一个令人惊讶的错误,可能是谷歌Chrome中的V8 JavaScript引擎.考虑:

// Generate a random number [1,5].
var rand5 = function() {
  return parseInt(Math.random() * 5) + 1;
};

// Return a sample distribution over MAX times.
var testRand5 = function(dist, max) {
  if (!dist) { dist = {}; }
  if (!max) { max = 5000000; }
  for (var i=0; i<max; i++) {
    var r = rand5();
    dist[r] = (dist[r] || 0) + 1;
  }
  return dist;
};
Run Code Online (Sandbox Code Playgroud)

现在,当我运行时,testRand5()我得到以下结果(当然,每次运行略有不同,您可能需要将"max"设置为更高的值以显示错误):

var d = testRand5();
d = {
  1: …
Run Code Online (Sandbox Code Playgroud)

javascript random google-chrome v8 parseint

40
推荐指数
3
解决办法
1万
查看次数

如何在NodeJS中检查JSON是否为空?

我有一个函数来检查请求是否有任何查询,并根据它执行不同的操作.目前,我已经if(query)做了别的其他事情.但是,似乎当没有查询数据时,我最终得到了一个{}JSON对象.因此,我需要更换if(query)if(query.isEmpty())或者诸如此类的东西.任何人都可以解释我如何在NodeJS中做到这一点?V8 JSON对象是否具有此类功能?

javascript json v8 node.js

40
推荐指数
3
解决办法
9万
查看次数

NodeJS建议使用max-old-space-size

我很难理解NodeJS如何根据参数max-old-space-size行事.

以我的情况为例,我正在运行两个t2.small aws实例(2GB的RAM).

不知道为什么,但我确实设置了max-old-space-size = 4096(4GB).在这种情况下节点做什么?这种配置会导致可靠的内存分配失败吗?

如何根据服务器资源确定max-old-space-size的正确值?

PD:我的应用程序不断增加内存使用量,我正在尝试了解节点内部的所有内容.

v8 node.js

40
推荐指数
4
解决办法
3万
查看次数

v8 :: Isolate和v8 :: Context之间究竟有什么区别?

V8中这些对象之间有什么区别/连接?上下文"属于"Isolate,反之亦然?

我知道单个Isolate一次只能被一个线程访问(这就是我猜的v8 :: Locker的用途?).

我查看了文档,但我似乎无法掌握这些概念 - 任何帮助都表示赞赏!

v8 embedded-v8

39
推荐指数
2
解决办法
1万
查看次数

es6 Map和Set复杂度,v8实现

在v8实现检索/查找是否为O(1)这是一个公平的假设吗?

(我知道标准并不保证)

javascript v8 ecmascript-6

39
推荐指数
4
解决办法
9592
查看次数