0

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

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

2 回答 2

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

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

于 2012-12-18T14:33:50.927 回答
0

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


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

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。


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

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

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


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

于 2018-02-08T14:02:25.113 回答