2017-07-03 6 views
3

私は現在Javascriptで少しゲームを開発しています。私はCodacyを使用して自分のコードを見直してくれています。なぜ変数を持つ配列インデックスを呼び出すのが悪いですか?

最もよく見られるエラーの1つは、汎用オブジェクト注入シンク(セキュリティ/検出オブジェクト注入)です。

変数を使用して配列の値にアクセスしようとしているときに起こります。この例のように:

function getValString(value) 
{ 
    var values = ["Mis&eacuterable", "Acceptable", "Excellente", "Divine"]; 
    return values[value]; 
} 

この関数は、項目の値の文字列を画面に表示するために使用します。それは、0,1,2または3の値を受け取り、その値の文字列を返します。

は今ここに私の問題だ:

Codacyが、それはセキュリティ上の問題を引き起こし、私はJavaScriptに、むしろ新たなんだから、私はなぜ不思議と何されたため、VARの使用[VAR]が禁止されなければならないことを私に語っていますそのような状況の良い習慣。

+0

コードは正常に見えます。しかし、スイッチやルックアップテーブルはここでより適切でしょう... –

+0

いいえ、値のマップ:koefficient。そして1つのライナー... – Lazyexpert

+2

両方のOPの質問に答えていません - なぜ、配列のインデックス検索が不正なセキュリティの実践として報告されていますが、これは有効ですか? – shotor

答えて

1

インデックスによるアクセスに問題があります:インデックスに要素がない可能性があります。

あなたのコードについては、私は、プリセットマップになるだろう:

const preset = { 
    0: 0.5, 
    1: 1.5, 
    2: 2, 
    3: 3 
}; 

をそして機能でそれを使用します。

function sellPotato(x, player) { 
    // This additional check gives you more confidence in accessing element of and array by index 
    if (player.inventory.length < x) return; 

    if (preset[player.inventory[x].value]) { 
    player.money += player.inventory[x].price * preset[player.inventory[x].value]; 
    } 
    player.inventory.splice(x, 1); 
    display(player); 
} 
+0

プリセットを作るあなたのアイデアは、また、コードサイズの削減に大きな助けになる!どうもありがとう :) – Nevios

関連する問題