【问题标题】:what is the equivalent JavaScript function for VBScript CreateObject()VBScript CreateObject() 的等效 JavaScript 函数是什么
【发布时间】:2018-02-08 22:02:25
【问题描述】:

CreateObject("Scripting.Dictionary") 的 JavaScript 等效函数是什么? 我必须将以下两个语句从 VBScript 转换为 JavaScript,任何人都可以帮助我找到解决方案。

Set oInvoicesToCreate = CreateObject("Scripting.Dictionary")
If Not oInvoicesToCreate.Exists(cInvoiceID) Then
     oInvoicesToCreate(CStr(cInvoiceID)) = ""
End If

【问题讨论】:

  • CreateObject() 在较新的 IE (>8) 中不起作用。您必须将其替换为 var oInvoicesToCreate = new ActiveXObject("Scripting.Dictionary")

标签: javascript vbscript


【解决方案1】:
var oInvoicesToCreate = {};
if(oInvoicesToCreate[cInvoiceID] === undefined){
    oInvoicesToCreate[cInvoiceID] = "";
}

您可能不想检查 hasOwnProperty 方法,因为您需要检查原型链中的任何内容是否也具有该属性,而不是覆盖它。检查 [] 将让您知道任何原型项目上的任何属性是否也具有该属性。

【讨论】:

  • 由于我们似乎在写相同的答案,我将删除我的答案,并留下指向另一个 SO 讨论的链接,该讨论更深入地介绍了不同的方法及其检查的优缺点存在于数组中:stackoverflow.com/questions/1098040/…
  • Scripting.Dictionary是什么意思,是语法吗?转换后如何使用..?这不是必需的吗?谢谢大家的回答
  • vb 中的脚本字典几乎是一个键值字典:"key" => value。在 javascript 中,对象 {} 可以实现相同的目的。 javascript 是一种动态语言,因此这个匿名对象 {} 可以为您服务。您是否尝试使用 vb 中的脚本字典中的其他功能?
  • 对象字面量没有原型链,所以讨论是否使用hasOwnProperty是无关紧要的。
【解决方案2】:

正如 bluetoft 在 this answer 中所说,在 Javascript 中您可以使用普通对象。但是,您应该注意它们之间的一些差异:


首先,字典的键可以是任何类型:

var dict = new ActiveXObject('Scripting.Dictionary');
dict(5) = 'Athens';
console.log(dict('5')); //prints undefined

而用于 Javascript 对象键的任何值都将首先转换为字符串:

var obj = {};
obj[5] = 'Athens';
console.log(obj['5']); // prints 'Athens'

来自MDN

请注意,方括号符号中的所有键都转换为字符串类型,因为 JavaScript 中的对象只能将字符串类型作为键类型。比如上面的代码中,当key obj被添加到myObj中时,JavaScript会调用obj.toString()方法,并将这个结果字符串作为新的key。


其次,可以设置 Dictionary 将不同大小写的键视为相同的键,使用 CompareMode property:

var dict = new ActiveXObject('Scripting.Dictionary');
dict.CompareMode = 1;
dict('a') = 'Athens';
console.log(dict('A')); // prints 'Athens'

通过[] 的Javascript 密钥访问不支持这一点,如果您想将不同大小写的密钥视为相同,则必须在每次读取或写入之前将潜在密钥转换为小写或大写。


对于您的具体情况,这些差异都不重要,因为键是数字字符串 (1),没有大小写 (2)。

【讨论】:

    猜你喜欢
    • 2010-09-25
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多