3

PHPでは、これを行うと

$var = array(); 
$var[5000] = 1;
echo count($var);

1を出力します。

JS では、「欠落している」要素を作成します。

<script type="text/javascript">
    var fred = [];
    fred[10] = 1;
    alert(fred.length);
</script>

アラート「11」。

これを防ぐことはできますか?なんでもいいの?私は Javascript に適応しようとしている PHP コーダーです。

編集:

Google Maps v2 と markerManager を使用するアプリに取り組んでいます。コードは何年も前から機能していましたが、Chrome (17.0.963.56 m) でマーカーが重複 (またはそれ以上) しているように見える問題が突然発生し、移動したマーカーのレンダリングが完全に失敗し、多くの場合、ブラウザーがフリーズアップしました。Firebug を使用して DOM を調べたところ、markerManager の grid_ 変数の下の配列に無数の「未定義」要素が見つかりました。これらを削除できれば、マーカーの問題が修正されるかどうかに関係なく、より洗練されたコードになる可能性があると考えました。ありがとう。

4

2 に答える 2

1

PHP コーダーとして、配列キーがかなり恣意的であることに慣れています。ただし、JavaScript では、存在しない配列要素を数値で割り当てると、作成した要素まで空の要素が配列に割り当てられます。それがあなたが見つけた行動です。一方、{}ではなくで示されるオブジェクトは、 [](注意して) 任意のプロパティ名を受け入れ、慣れ親しんだ PHP の配列構造の機能に少し近い方法で機能します。これは、JavaScript オブジェクト (またはオブジェクト リテラル) が PHP 配列の直接の類似物であると言っているわけではありません....

「10」というキーを持つデータ構造が必要な場合、それはオブジェクト リテラルの仕事です (ただし、オブジェクト プロパティに数値で名前を付けるのは適切ではありません。

var fred = {};
fred["10"] = 1;

オブジェクトリテラルを扱うより通常の構文はobject.property記法ですが、これは数値プロパティには有効ではないことに注意してください。

// name as a property
fred.name = "fred";

// Syntax error...
fred.10 = 10;

// Use [] notation for numeric properties:
fred["10"] = 10;

lengthただし、オブジェクト リテラルにはプロパティがありません。したがって、次のことはできません。

fred.length;
// undefined
于 2012-02-22T17:06:30.400 に答える