文字列は、宣言方法に応じて、プリミティブまたはオブジェクトのいずれかになります。
var str = 'yes';
あなたに原始的なものを与えますが、
var str = new String('yes');
Stringオブジェクトが表示されます。
すべての配列は同じであり([]またはnew Array()で定義されているかどうかに関係なく)、タイプオブジェクトであり、「Array」オブジェクトのプロトタイプから継承されます。Javascriptには実際のクラスはなく、すべてがオブジェクトであり、Arrayと呼ばれるシステム定義のオブジェクトがあります。'prototype'(オブジェクト型)というプロパティがあり、プロトタイププロパティを持つオブジェクトでnewキーワードを使用すると、プロトタイプのコンテンツへの参照を含むインスタンスが作成され、変数に格納されます。したがって、Javascriptでこれまでに使用したすべての配列は、Arrayのプロトタイププロパティのオブジェクトとインスタンスです。
いずれにせよ、配列は実際にはオブジェクトですが、便利なプロパティと関数(長さ、スライス、プッシュなど)があるため、配列のように動作します。
別の注意点として、クラスはないと言いましたが、これを行うと、次のようになります。
console.log(Object.prototype.toString.call(your_object));
[objectObject]という形式の文字列が表示されます。しかし、便利なのは、配列で呼び出すと、[objectFunction]を提供する関数や他の多くのシステム定義型と同じ[objectArray]が得られることです。これは、通常のオブジェクトと配列を区別するのに役立ちます(typeof演算子は常に文字列'object'を返します)。
これを試して
var a = Array;
そしてfirebugに入り、aの内容、特に'prototype'プロパティを調べます。
編集:より正確になるように、言い回しを少し変更しました。実際、newキーワードを使用すると、プロトタイプオブジェクトを参照するインスタンスが作成されます。したがって、インスタンスの宣言後にプロトタイプに加えられた変更は、引き続きインスタンスに影響します。
編集:あなたの最新の改訂された質問への回答(配列/オブジェクトは実際には変装した文字列です):いいえ。私が説明したように、それらはオブジェクトです。文字列は、プリミティブ型、またはプロパティの1つとして同等のプリミティブを含むオブジェクト型(Stringオブジェクトのインスタンス)のいずれかです。