我想使用 DLR 从 c# 执行 javascript 代码。
所以我使用c#
和 Jint 写了一个简单的代码 :
var script = @"
function show( )
{
return parseInt('123asd'); //in js it's 123
};
return show();";
var result = new JintEngine().Run(script);
Console.WriteLine(result);
parseInt('123asd')
在 javascript 中是:123
但我得到的结果是:
也许我看不到全貌,但如果世界另一端的程序员将他的脚本文件发送给我,我(和他)希望结果是一致的!
如果我弄错了,在什么情况下我会使用在 .Net 上运行其他代码? (我将不得不非常非常怀疑每一行代码...)
最佳答案
这似乎是 Jint 的 partseInt
函数的当前行为。
相关代码:
// most common case
double result;
if(double.TryParse(number,NumberStyles.Any, CultureInfo.InvariantCulture, out result)) {
// parseInt(12.42) == 42
return NumberClass.New(sign * Math.Floor(result));
}
else {
return this["NaN"];
}
.NET 的 double.TryParse
不会将 '123asd'
解析为 123
,但返回它无法解析整个字符串。
你应该在 Jint 中填写错误报告。
E:这是“标准”的问题。您永远不可能在所有实现中获得 100% 兼容的标准。总会有差异的。看看 IE vs Chrome vs Firefox vs Opera。所有这些都使用不同的 javascript 引擎,因此您可以预料到差异。如果真的要交叉兼容,就应该按照标准来实现,把所有不符合标准的行为都当做实现中的bug。如果您尝试解决此错误或报告它并期望它得到修复,则由您决定。
关于c# - c# 4 中的 DLR 和 Javascript 解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13683343/