在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上工作.
在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引擎/解释器移植到iOS.我正在编写一款iPhone游戏,我想使用Javascript作为高级脚本语言(AI,游戏等),但要做到这一点,我需要将JS引擎编译成静态库并将其链接我的iPhone OS的objectiveC程序.我正在看一些候选JS引擎,但我找不到任何成功案例.
这是我希望用于iOS的js引擎
另一种方法是使用UIWebView'sJavascript回调接口,但这需要将整个加载UIWebView到内存中,我听到的经验是性能通常很慢.
感谢是否有人有类似的经历或知道任何参考!
[更新]正如Kostis所说,Apple 在WWDC 2013中引入了JavascriptCore
当我发现Node.js是使用V8 JavaScript引擎构建的时候,我想:
很棒,网页抓取会更容易,因为页面将像在浏览器中一样呈现,其中"本机"DOM支持XPath并且页面上的任何AJAX调用都已执行.
非常感谢!
在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) 我有一个函数来检查请求是否有任何查询,并根据它执行不同的操作.目前,我已经if(query)做了别的其他事情.但是,似乎当没有查询数据时,我最终得到了一个{}JSON对象.因此,我需要更换if(query)用if(query.isEmpty())或者诸如此类的东西.任何人都可以解释我如何在NodeJS中做到这一点?V8 JSON对象是否具有此类功能?
我很难理解NodeJS如何根据参数max-old-space-size行事.
以我的情况为例,我正在运行两个t2.small aws实例(2GB的RAM).
不知道为什么,但我确实设置了max-old-space-size = 4096(4GB).在这种情况下节点做什么?这种配置会导致可靠的内存分配失败吗?
如何根据服务器资源确定max-old-space-size的正确值?
PD:我的应用程序不断增加内存使用量,我正在尝试了解节点内部的所有内容.
V8中这些对象之间有什么区别/连接?上下文"属于"Isolate,反之亦然?
我知道单个Isolate一次只能被一个线程访问(这就是我猜的v8 :: Locker的用途?).
我查看了文档,但我似乎无法掌握这些概念 - 任何帮助都表示赞赏!
在v8实现检索/查找是否为O(1)这是一个公平的假设吗?
(我知道标准并不保证)
v8 ×10
javascript ×8
node.js ×6
dom ×1
ecmascript-6 ×1
embedded-v8 ×1
escaping ×1
instanceof ×1
ios ×1
iphone ×1
json ×1
parseint ×1
random ×1
shell ×1
typeof ×1