0

CreateObject("Scripting.Dictionary") に相当する JavaScript 関数は何ですか? 次の 2 つのステートメントを 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 のオブジェクトはキー タイプとして String 型しか持てないため、角括弧表記のすべてのキーは String 型に変換されることに注意してください。たとえば、上記のコードでは、キー obj が myObj に追加されると、JavaScript は obj.toString() メソッドを呼び出し、この結果の文字列を新しいキーとして使用します。


次に、 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 に答える