Ada dua cara berbeda untuk membuat objek kosong di JavaScript:
var objectA = {}
var objectB = new Object()
Apakah ada perbedaan dalam cara mesin skrip menangani mereka? Apakah ada alasan untuk menggunakan salah satunya?
Demikian pula dimungkinkan untuk membuat array kosong menggunakan sintaks yang berbeda:
var arrayA = []
var arrayB = new Array()
javascript
arrays
object
javascript-objects
new-operator
Jonas Pegerfalk
sumber
sumber
var objectA = {} var objectB = new Object()
ada konstruksi ketiga yang akan menghasilkan hasil yang sama:var objectC = Object.create(Object.prototype);
{}
dan[]
Gunakan{}
sebagai gantinew Object()
. Gunakan[]
sebagai gantinew Array()
. Gunakan array ketika nama anggota akan menjadi bilangan bulat berurutan. Gunakan objek ketika nama anggota adalah string atau nama yang berubah-ubah. sumbernew Object()
dan{}
bukan objek yang cukup kosong, mereka adalah objek yang memiliki Object.prototype. Anda dapat menggunakanObject.create(null)
untuk objek yang benar-benar kosong (setidaknya sesuai dengan dokumen mozilla: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… )Jawaban:
Benda
Tidak ada manfaatnya menggunakan
new Object();
- sedangkan{};
dapat membuat kode Anda lebih kompak, dan lebih mudah dibaca.Untuk mendefinisikan objek kosong mereka secara teknis sama. The
{}
sintaks yang lebih pendek, lebih rapi (kurang Java-ish), dan memungkinkan Anda untuk langsung mengisi objek inline - seperti:Array
Untuk array, hampir tidak ada manfaatnya menggunakan
new Array();
over[];
- dengan satu pengecualian kecil:menciptakan array panjang 100 item dengan semua slot yang berisi
undefined
- yang mungkin bagus / berguna dalam situasi tertentu (seperti(new Array(9)).join('Na-Na ') + 'Batman!'
).Rekomendasi saya
new Object();
- ini lebih clunkier daripada{};
dan terlihat konyol.[];
- kecuali ketika Anda perlu dengan cepat membuat array "kosong" dengan panjang yang telah ditentukan.sumber
new Array(100)
. Baca literatur: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…[]
. Tidak ada argumen di sana. Anda, bagaimanapun, berpendapat bahwanew Array(100)
entah bagaimana "tidak valid", yang tidak benar.new Array(1,2,3)
hasil dalam[1,2,3]
, tapinew Array(1)
tidak tidak menghasilkan[1]
; dengan demikian, semantik dariArray
tidak konsisten dan tidak perlu membingungkan.Object.create(null)
dapat berguna untuk membuat objek kosong, sedangkan{ }
mewarisi dari prototipe Obyek.Ya, ada perbedaan, mereka tidak sama. Memang benar Anda akan mendapatkan hasil yang sama tetapi mesin bekerja dengan cara yang berbeda untuk keduanya. Salah satunya adalah objek literal, dan yang lainnya adalah konstruktor, dua cara berbeda untuk membuat objek dalam javascript.
Di JS semuanya adalah objek, tetapi Anda harus mengetahui hal berikut dengan Objek baru (): Objek dapat menerima parameter, dan tergantung pada parameter itu, ia akan membuat string, angka, atau hanya objek kosong.
Misalnya:,
new Object(1)
akan mengembalikan Nomor.new Object("hello")
akan mengembalikan string, artinya konstruktor objek dapat mendelegasikan - tergantung pada parameter - pembuatan objek ke konstruktor lain seperti string, angka, dll. Sangat penting untuk mengingat ini saat Anda mengelola data dinamis untuk buat objek ..Banyak penulis merekomendasikan untuk tidak menggunakan konstruktor objek ketika Anda dapat menggunakan notasi literal tertentu, di mana Anda akan yakin bahwa apa yang Anda buat adalah apa yang Anda harapkan ada dalam kode Anda.
Saya menyarankan Anda untuk melakukan bacaan lebih lanjut tentang perbedaan antara notasi literal dan konstruktor pada javascript untuk menemukan rincian lebih lanjut.
sumber
Ini memiliki hasil akhir yang sama, tetapi saya hanya akan menambahkan bahwa menggunakan sintaks literal dapat membantu seseorang menjadi terbiasa dengan sintaks JSON (subset string-ified dari sintaks objek JavaScript JavaScript), sehingga mungkin merupakan praktik yang baik untuk masuk ke dalam .
Satu hal lagi: Anda mungkin memiliki kesalahan kecil jika Anda lupa menggunakan
new
operator. Jadi, menggunakan literal akan membantu Anda menghindari masalah itu.Pada akhirnya, itu akan tergantung pada situasi dan juga preferensi.
sumber
Objek dan larik sintaks literal {} / [] diperkenalkan di JavaScript 1.2, jadi tidak tersedia (dan akan menghasilkan kesalahan sintaksis) dalam versi Netscape Navigator sebelum 4.0.
Jari-jariku masih default untuk mengatakan Array baru (), tapi aku sudah tua. Untungnya Netscape 3 bukan peramban yang harus dipertimbangkan banyak orang hari ini ...
sumber
jauh lebih cepat dan, dalam pengalaman saya, lebih umum digunakan, jadi mungkin yang terbaik untuk mengadopsi 'standar' dan menyimpan beberapa pengetikan.
sumber
new Object
harus dieksekusi saat runtime.Saya percaya
{}
direkomendasikan di salah satu vid Javascript di sini sebagai konvensi pengkodean yang baik.new
diperlukan untuk pewarisan pseudoklasik. yangvar obj = {};
cara membantu untuk mengingatkan Anda bahwa ini bukan bahasa berorientasi objek klasik tapi satu prototypal. Jadi, satu-satunya waktu yang Anda perlukannew
adalah ketika Anda menggunakan fungsi konstruktor. Sebagai contoh:Kemudian digunakan seperti:
Keuntungan lain untuk menggunakan
{}
sebagai lawannew Object
adalah Anda dapat menggunakannya untuk melakukan objek literal gaya JSON.sumber
Array kinerja instantiation
Jika Anda ingin membuat array tanpa panjang:
var arr = [];
lebih cepat darivar arr = new Array();
Jika Anda ingin membuat array kosong dengan panjang tertentu:
var arr = new Array(x);
lebih cepat darivar arr = []; arr[x-1] = undefined
;Untuk tolok ukur klik yang berikut ini: https://jsfiddle.net/basickarl/ktbbry5b/
Namun saya tidak tahu jejak memori keduanya, saya bisa membayangkan bahwa ini
new Array()
membutuhkan lebih banyak ruang.sumber
arr = new Array(x)
setara denganarr = []; arr.length = x;
, bukan untuk menugaskanx-1
indeks denganundefined
.Ini pada dasarnya adalah hal yang sama. Gunakan apa pun yang Anda rasa lebih nyaman.
sumber
Object
adalah null, sedangkan {proto} dari{}
adalah 'Object.prototype'?Object
adalah nol, itu benar. Itu karenaObject
mengakhiri rantai prototipe. Contoh objek tidak memiliki prototipe, hanya konstruktor yang memilikinya. Dan(new Object()).constructor === ({}).constructor
->true
new Object()
menghasilkan instance Obyek kosong.{}
menghasilkan instance Obyek kosong. Kedua contoh ini benar-benar tidak bisa dibedakan. Contoh yang Anda tautkan untuk melakukan sesuatu yang lain (itu memodifikasi rantai prototipe) dan tidak benar-benar berlaku di sini - atau saya tidak mengerti argumen Anda.OK , hanya ada 2 cara berbeda untuk melakukan hal yang sama! Yang satu dipanggil
object literal
dan yang lainnya adalah fungsiconstructor
!Tapi baca terus, ada beberapa hal yang ingin saya bagikan:
Penggunaan
{}
membuat kode Anda lebih mudah dibaca, sambil membuat instanceObject
atau fungsi bawaan lainnya tidak disarankan ...Selain itu, fungsi Objek mendapat parameter karena fungsinya, seperti
Object(params)
... tetapi{}
merupakan cara murni untuk memulai objek dalam JavaScript ...Menggunakan objek literal membuat kode Anda terlihat jauh lebih bersih dan lebih mudah dibaca untuk pengembang lain dan sejalan dengan praktik terbaik dalam JavaScript ...
Meskipun Objek dalam Javascript bisa berupa hampir semua hal,
{}
hanya menunjuk ke objek javascript, untuk pengujian cara kerjanya, lakukan di bawah ini dalam kode atau konsol javascript Anda:Anehnya, itu menciptakan Angka!
Dan ini menciptakan Array!
dan hasil aneh ini untuk
String
!Jadi, jika Anda membuat objek, disarankan untuk menggunakan objek literal, untuk memiliki kode standar dan menghindari kecelakaan kode seperti di atas, juga penggunaan kinerja yang bijaksana
{}
lebih baik dalam pengalaman saya!sumber