javascript - 在 JavaScript 中将 int64 值转换为 Number 对象

标签 javascript com type-conversion int64

我有一个 COM 对象,它有一个返回 unsigned int64 (VT_UI8) 值的方法。我们有一个 HTML 页面,其中包含一些 JavaScript,可以加载 COM 对象并调用该方法,以检索值,如下所示:

var foo = MyCOMObject.GetInt64Value();

可以使用以下方法轻松地在消息对话框中向用户显示该值:

alert(foo);

或通过以下方式显示在页面上:

document.getElementById('displayToUser').innerHTML = foo;

但是,我们无法将此值用作数字(例如,如果我们尝试将其乘以 2),页面不会抛出“Number Expected”错误。如果我们检查“typeof(foo)”,它将返回“unknown”。

我通过执行以下操作找到了解决此问题的方法:

document.getElementById('displayToUser').innerHTML = foo;
var bar = parseInt(document.getElementById('displayToUser').innerHTML);
alert(bar*2);

我需要知道的是如何使该过程更加高效。具体来说,有没有一种方法可以将 foo 显式转换为字符串,而不是必须将某些文档元素的innerHTML 设置为 foo 然后从中检索它。我不介意这样称呼:

alert(parseInt((string)foo) * 2);

如果有一种方法可以直接将 int64 转换为 Number,而不需要经过 String 转换,那就更好了,但我对此不抱太大希望。

最佳答案

这个:

alert(Number(String(foo)) * 2);

如果您的 COM 对象正确实现了 toString (或带有“string”提示的 valueOf),则应该这样做(但是参见下文) (显然,如果您的 innerHTML 技巧有效,那么它确实有效 - 因为当您将 foo 分配给 innerHTML 时,转换 COM 对象的过程相同字符串的出现与 String(foo)) 相同。

摘自第五版 ECMAScript 规范第 15.5.1 节:

When String is called as a function rather than as a constructor, it performs a type conversion.

和第 15.7.1 节

When Number is called as a function rather than as a constructor, it performs a type conversion

可能值得尝试一下 Number(foo) * 2 来确定,但我认为它不会起作用(看起来你的 COM 对象只处理到 String 的转换,而不是数字,这并不令人惊讶或不合理)。

<小时/>

编辑如果String(foo)失败,请尝试:

alert(Number("" + foo) * 2);

非常感到惊讶的是,您的 innerHTML 技巧有效,但 String(foo) 抛出了错误。希望 ""+ foo 能够触发与您的 innerHTML 技巧相同的隐式转换。

<小时/>

编辑 好吧,这个 COM 对象确实很奇怪。我接下来的两次 Volley :

alert(("" + foo) * 2);

它使用所有隐式转换(将对象添加到字符串会将对象转换为字符串;将 * 运算符应用于字符串会将其转换为数字)。

或者,我们可以显式但间接地进行字符串->数字转换:

alert(parseInt("" + foo) * 2);

关于javascript - 在 JavaScript 中将 int64 值转换为 Number 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775341/

相关文章:

c++ - 如何通过 COM (C++) API 传递字符串数组

javascript - iphone safari 的隐藏 iframe 问题

javascript - 某些 javascript(输入)仅在 IE 中不起作用

c++ - 我应该如何在 Win32 C++ 应用程序中集成和打包此第三方库?

.net - SQL Server 到 .Net 类型转换

c - 如何将 char[2] 转换为 C 中的 unsigned short?

jsf - javax.faces.component.UIInput.CONVERSION 与 javax.faces.converter.*

javascript - 未捕获的类型错误 : Cannot set property

javascript - AngularJS - 如何按 ng-repeat 中类似数组对象的值进行排序

internet-explorer - 如何从 Internet Explorer 嵌入式对象访问完整的 Adob​​e Acrobat AcroExch COM API?