什么是VBScript CreateObject()的等效JavaScript函数

时间:2012-12-18 14:28:49

标签: javascript vbscript

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

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

2 个答案:

答案 0 :(得分:3)

var oInvoicesToCreate = {};
if(oInvoicesToCreate[cInvoiceID] === undefined){
    oInvoicesToCreate[cInvoiceID] = "";
}

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

答案 1 :(得分:0)

正如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

  

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

其次,可以设置字典,使用CompareMode property将不同的外壳密钥视为同一密钥:

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

通过[]进行的Javascript密钥访问不支持此功能,如果您希望将具有不同外壳的密钥视为相同,则必须在每次读取或写入之前将潜在密钥转换为小写或大写

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