Melihat kode sumber online saya menemukan ini di bagian atas beberapa file sumber.
var FOO = FOO || {};
FOO.Bar = …;
Tapi saya tidak tahu apa || {}
itu.
Saya tahu {}
sama dengan new Object()
dan saya pikir ||
itu untuk sesuatu seperti "jika sudah ada, gunakan nilainya, gunakan objek baru.
Mengapa saya melihat ini di bagian atas file sumber?
javascript
namespaces
variable-declaration
or-operator
Ricardo Sanchez
sumber
sumber
Jawaban:
Tebakan Anda tentang maksud dari
|| {}
cukup dekat.Pola khusus ini bila dilihat di bagian atas file digunakan untuk membuat namespace , yaitu sebuah objek bernama di mana fungsi dan variabel dapat dibuat tanpa terlalu mencemari objek global.
Alasan mengapa itu digunakan adalah jika Anda memiliki dua (atau lebih) file:
dan
keduanya berbagi namespace yang sama maka tidak masalah urutan kedua file dimuat, Anda masih mendapatkan
func1
danfunc2
mendefinisikan dengan benar dalamMY_NAMESPACE
objek dengan benar.File pertama yang dimuat akan membuat
MY_NAMESPACE
objek awal , dan file yang dimuat selanjutnya akan menambah objek.Berguna, ini juga memungkinkan pemuatan skrip asinkron yang berbagi namespace yang sama yang dapat meningkatkan waktu pemuatan halaman. Jika
<script>
tag memilikidefer
atribut yang disetel, Anda tidak dapat mengetahui dalam urutan mana tag tersebut akan diinterpretasikan, sehingga seperti yang dijelaskan di atas, ini juga memperbaiki masalah tersebut.sumber
||
juga sangat berguna ketika Anda ingin memberikan argumen opsional dan menginisialisasinya ke default jika tidak disediakan:function foo(arg1, optarg1, optarg2) { optarg1 = optarg1 || 'default value 1'; optarg2 = optart2 || 'defalt value 2';}
||
operator yang tidak bisa mengatakanundefined
darifalsey
.Pada dasarnya baris ini mengatakan setel
AEROTWIST
variabel ke nilaiAEROTWIST
variabel, atau setel ke objek kosong.Pipa ganda
||
adalah pernyataan OR, dan bagian kedua dari OR hanya dijalankan jika bagian pertama mengembalikan false.Oleh karena itu, jika
AEROTWIST
sudah memiliki nilai, akan disimpan sebagai nilai tersebut, tetapi jika belum ditetapkan sebelumnya, maka akan ditetapkan sebagai objek kosong.pada dasarnya sama dengan mengatakan ini:
Semoga membantu.
sumber
Penggunaan umum lainnya untuk || adalah menyetel nilai default untuk parameter fungsi yang tidak ditentukan juga:
Padanan dalam pemrograman lain biasanya adalah:
sumber
var
di depana
,a
memasukkan konteks eksekusi fungsi sebagai parameter formal , maka itu sudah dideklarasikan.Ada dua bagian utama yang
var FOO = FOO || {};
menutupi.# 1 Mencegah penggantian
Bayangkan Anda memiliki kode yang dibagi menjadi beberapa file dan rekan kerja Anda juga mengerjakan sebuah Object bernama
FOO
. Maka itu bisa mengarah pada kasus bahwa seseorang sudah mendefinisikanFOO
dan menetapkan fungsionalitas padanya (sepertiskateboard
fungsi). Kemudian Anda akan menimpanya, jika Anda tidak memeriksa apakah sudah ada.Kasus bermasalah:
Dalam hal ini
skateboard
fungsi akan hilang jika Anda memuat file JavaScripthomer.js
setelahbart.js
di HTML Anda karena Homer mendefinisikanFOO
objek baru (dan dengan demikian menimpa yang sudah ada dari Bart) sehingga hanya mengetahui tentangdonut
fungsi tersebut.Jadi, Anda perlu menggunakan
var FOO = FOO || {};
yang artinya "FOO akan ditempatkan ke FOO (jika sudah ada) atau objek kosong baru (jika FOO belum ada).Larutan:
Karena Bart dan Homer sekarang memeriksa keberadaan
FOO
sebelum mereka mendefinisikan metodenya, Anda dapat memuatbart.js
danhomer.js
dalam urutan apa pun tanpa menimpa metode satu sama lain (jika mereka memiliki nama yang berbeda). Jadi Anda akan selalu mendapatkanFOO
objek yang memiliki metodeskateboard
dandonut
(Yay!).# 2 Mendefinisikan objek baru
Jika Anda sudah membaca contoh pertama maka Anda sudah sekarang apa tujuan dari
|| {}
.Karena jika tidak ada
FOO
objek maka OR-case akan menjadi aktif dan membuat objek baru, sehingga Anda dapat menetapkan fungsinya. Suka:sumber
Jika tidak ada nilai di AEROTWIST atau null atau tidak ditentukan, nilai yang ditetapkan ke AEROTWIST baru akan menjadi {} (objek kosong)
sumber
The
||
Operator mengambil dua nilai:Jika adalah truthy , itu akan kembali
a
. Jika tidak, itu akan kembalib
.Nilai-nilai falsy adalah
null
,undefined
,0
,""
,NaN
danfalse
. Nilai kebenaran adalah segalanya.Jadi jika
a
belum diset (apakahundefined
) akan kembalib
.sumber
||
JS (dan Perl) dan versi di C, C ++ dan Java adalah bahwa JS tidak mentransmisikan hasilnya ke boolean. Ini masih operator logis.Perhatikan bahwa di beberapa versi IE kode ini tidak berfungsi seperti yang diharapkan. Karena
var
, variabel didefinisikan ulang dan ditetapkan jadi - jika saya ingat dengan benar masalahnya - Anda akan selalu memiliki objek baru. Itu seharusnya memperbaiki masalah:sumber