Dua cuplikan kode berbeda berikut ini tampaknya setara dengan saya:
var myArray = Array();
myArray['A'] = "Athens";
myArray['B'] = "Berlin";
dan
var myObject = {'A': 'Athens', 'B':'Berlin'};
karena keduanya berperilaku sama, dan juga typeof(myArray) == typeof(myObjects)
(keduanya menghasilkan 'objek').
Apakah ada perbedaan di antara varian ini?
sumber
title
,description
danitems
properti. Itu semua tergantung pada seberapa baik Anda mengetahui bahasa tersebut dan bagaimana Anda menggunakannya.Dalam array JS adalah objek, hanya sedikit dimodifikasi (dengan beberapa fungsi lagi).
Fungsinya seperti:
sumber
Saya pikir, saya terlalu metaforis dan samar dengan jawaban sebelumnya. Klarifikasi mengikuti.
Sebuah instance dari Array, Boolean, Date, Function, Number, RegExp, String adalah sebuah Object tetapi ditingkatkan dengan metode dan properti yang spesifik untuk setiap tipe. Misalnya, sebuah array memiliki
length
properti yang telah ditentukan sementara objek umum tidak.menampilkan
Secara intrinsik, juru bahasa FF Gecko juga membedakan antara Array dan Objek generik dengan perbedaan yang berbeda dalam mengevaluasi konstruksi bahasa.
menampilkan
dan
0 1 2 a
dan0 1 2 a
.Mengenai pernyataan bahwa semua objek adalah fungsi:
Tidaklah benar secara sintaksis maupun semantik untuk menggunakan instance objek arbitrer sebagai fungsi seperti
123()
atau"abc"()
atau[]()
atau{}()
atau diobj()
manaobj
ada tipe selainFunction
, jadi objek arbitrer INSTANCE bukanlah aFunction
. Namun, jika diberi objekobj
dan tipenyaArray, Boolean, Date, ...
, bagaimanaobj
bisa menjadi sebagaiArray, Boolean, Date, ...
? Apa ituArray, Boolean, Date, ...
?menampilkan
Dalam setiap kasus, tanpa keraguan, tipe objek bermanifestasi sebagai
function
definisi, oleh karena itu pernyataan bahwa semua objek adalah fungsi! (Lidah di pipi adalah bahwa saya sengaja mengaburkan dan mengaburkan perbedaan contoh objek dengan tipe itu! Namun, ini menunjukkan "Anda tidak dapat memiliki satu tanpa yang lain", Objek dan Fungsi! Kapitalisasi menekankan tipe sebagai menentang contoh.)Baik paradigma fungsional dan objek tampaknya menjadi dasar untuk pemrograman dan penerapan primitif bawaan tingkat rendah interpreter JS, seperti
Math
danJSON
dantrue
.menampilkan
Pada saat pengembangan Javascript, gaya pemrograman objek-sentris (OOP - gaya Pemrograman Berorientasi Objek - "s" adalah permainan kata-kata saya!) Sedang digemari dan interpreter juga dinamai dengan Java untuk memberikan kredibilitas yang lebih besar . Teknik pemrograman fungsional diturunkan ke ujian yang lebih abstrak dan esoterik yang mempelajari teori Automata, Fungsi Rekursif, Bahasa Formal, dll. Dan dengan demikian tidak cocok. Namun, kekuatan dari pertimbangan formal ini jelas terlihat dalam Javascript terutama seperti yang diterapkan di mesin Gecko FF (mis.
.toSource()
).Definisi Objek untuk Fungsi sangat memuaskan karena didefinisikan sebagai relasi perulangan! didefinisikan menggunakan definisi itu sendiri!
function Function() { [native code] }
dan karena suatu fungsi adalah Objek, sentimen yang sama berlaku
function Object() { [native code] }
.Sebagian besar definisi lain tidak sesuai dengan nilai terminal statis. Namun,
eval()
adalah primitif yang sangat kuat sehingga String juga dapat menyematkan fungsionalitas arbitrer.Perhatikan lagi, bahasa daerah yang digunakan di atas mengaburkan tipe objek dan perbedaan contoh.
sumber
Segala sesuatu di JavaScript adalah objek selain tipe primitif.
Kode
membuat instance dari objek Array sementara
membuat sebuah instance dari objek Object.
Coba kode berikut
Jadi Anda akan melihat perbedaannya adalah pada tipe konstruktor objek.
Instance dari objek Array akan berisi semua properti dan metode dari prototipe Array.
sumber
sumber
Anda dapat menambahkan properti bernama ke hampir semua hal di javascript tetapi itu tidak berarti Anda harus melakukannya.
Array
di javascript harus digunakan sebagai daftar, jika Anda ingin menggunakan array asosiatifObject
sebagai gantinya.Berhati-hatilah jika Anda benar-benar ingin menggunakan
Array
dengan properti bernama alih-alihObject
properti itu tidak akan dapat diakses dalam satufor...of
loop dan Anda mungkin juga mendapatkan hasil yang tidak diharapkan ketika JSON mengenkode untuk menyebarkannya. Lihat contoh di bawah ini di mana semua indeks non-numerik diabaikan:sumber
The
{}
-notation gula hanya sintaksis untuk membuat kode lebih bagus ;-)JavaScript memiliki banyak konstruksi serupa seperti konstruksi fungsi, di mana function () hanyalah sinonim untuk
sumber
{}
adalah notasi objek literal,[]
adalah array literal, saya tidak yakin apa maksud dari jawaban Anda.