c# - c# 4 中的 DLR 和 Javascript 解释?

标签 c# .net dynamic .net-4.0 dynamic-language-runtime

我想使用 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

但我得到的结果是:

enter image description here

  • 也许我看不到全貌,但如果世界另一端的程序员将他的脚本文件发送给我,我(和他)希望结果是一致的!

  • 如果我弄错了,在什么情况下我会使用在 .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/

相关文章:

c# - 切换可观察集合中项目的顺序 - UWP

c# - COMException 故障

c# - 在 python 中锁定字典

c# - 回历早了 1 天。

Azure 中的 .NET Forms 身份验证 - 多个 VM 需要进行哪些更改?

C# Entity Framework : correct use of DBContext class inside your repository class

.net - WCF 可以托管在 Windows Nano Server 2016 上吗?

uitableview - 滚动 uitableview 时更改特定的 uitableviewcell 行高

jsf - 如何使primefaces面包屑动态?

c++ - 动态分配一个二维数组