CreateObject(“Scripting.Dictionary”)的JavaScript等价函数是什么? 我必须将以下两个语句从VBScript转换为JavaScript,任何人都可以帮助我找到解决方案。
Set oInvoicesToCreate = CreateObject("Scripting.Dictionary")
If Not oInvoicesToCreate.Exists(cInvoiceID) Then
oInvoicesToCreate(CStr(cInvoiceID)) = ""
End If
答案 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)。