Sebagian besar bahasa modern seperti Ruby, Python, atau Java memiliki satu nilai nol ( 5 atau 6), yang tampaknya merupakan pendekatan yang masuk akal Tetapi JavaScript berbeda 6, tetapi juga 8, mewakili nilai kosong dalam JavaScript. Jadi apa perbedaan yang tepat di antara mereka? Jawaban singkatnya adalah bahwa juru bahasa JavaScript mengembalikan 8 saat mengakses properti variabel atau objek yang belum diinisialisasi. Sebagai contoh
Di sisi lain, _6 mewakili referensi objek yang hilang. JavaScript tidak menginisialisasi variabel atau properti objek dengan 6 Beberapa metode asli seperti 2 dapat mengembalikan 6 untuk menunjukkan objek yang hilang. Lihatlah sampelnya
Karena JavaScript permisif, pengembang tergoda untuk mengakses nilai yang tidak diinisialisasi. Saya bersalah atas praktik buruk seperti itu juga Seringkali tindakan berisiko tersebut menghasilkan 8 kesalahan terkait
Pengembang JavaScript dapat memahami ironi lelucon ini
Untuk mengurangi kesalahan tersebut, Anda harus memahami kasus ketika 8 dihasilkan. Mari jelajahi _8 dan pengaruhnya terhadap keamanan kode Daftar isi1. Apa yang tidak terdefinisiJavaScript memiliki 6 tipe primitif
Dan jenis objek yang terpisah. 8, 9 Dari 6 tipe primitif _8 adalah nilai khusus dengan tipenya sendiri Tidak terdefinisi. Berdasarkan
Standar dengan jelas mendefinisikan bahwa Anda akan menerima 8 saat mengakses variabel yang tidak diinisialisasi, properti objek yang tidak ada, elemen array yang tidak ada, dan sejenisnya Beberapa contoh
Contoh di atas menunjukkan bahwa mengakses
dievaluasi menjadi 8 Spesifikasi ECMAScript menentukan jenis nilai 8
Dalam pengertian ini, operator _8 mengembalikan string 9 untuk nilai 8
Tentu saja 8 berfungsi dengan baik untuk memverifikasi apakah suatu variabel berisi nilai 8 _ 2. Skenario yang membuat tidak terdefinisi2. 1 Variabel yang tidak diinisialisasi
Polos dan sederhana
_4 dideklarasikan dan belum diberi nilai. Mengakses variabel mengevaluasi ke 8 Pendekatan yang efisien untuk memecahkan masalah variabel yang tidak diinisialisasi adalah bila memungkinkan dengan menetapkan nilai awal. Semakin sedikit variabel yang ada dalam keadaan tidak diinisialisasi, semakin baik Idealnya, Anda akan menetapkan nilai segera setelah deklarasi 6. Tapi itu tidak selalu memungkinkan Kiat 1. Pilih 7, jika tidak, gunakan 8, tetapi ucapkan selamat tinggal pada 9 Menurut pendapat saya, salah satu fitur terbaik ECMAScript 2015 adalah cara baru untuk mendeklarasikan variabel menggunakan 7 dan 8. Ini adalah langkah maju yang besar 7 dan 8 adalah cakupan blok (berlawanan dengan cakupan fungsi yang lebih lama 9) dan ada di baris deklarasi sampai Saya merekomendasikan variabel _7 ketika nilainya tidak akan berubah. Itu menciptakan ikatan yang tidak dapat diubah Salah satu fitur bagus dari _7 adalah Anda harus menetapkan nilai awal ke variabel 7. Variabel tidak terpapar ke keadaan yang tidak diinisialisasi dan mengakses 8 tidak mungkin Mari kita periksa fungsi yang memverifikasi apakah suatu kata adalah palindrom
9 dan 00 variabel ditugaskan dengan nilai sekali. Tampaknya masuk akal untuk mendeklarasikannya sebagai 7 karena variabel ini tidak akan berubah Gunakan deklarasi _8 untuk variabel yang nilainya dapat berubah. Kapan pun memungkinkan, tetapkan nilai awal segera, mis. g. _03 Bagaimana dengan sekolah lama _9? _9 masalah deklarasi berada dalam lingkup fungsi. Anda dapat mendeklarasikan variabel _9 di suatu tempat di akhir cakupan fungsi, tetapi tetap saja, Anda dapat mengaksesnya sebelum deklarasi. dan Anda akan mendapatkan _8
_4 dapat diakses dan berisi 8 bahkan sebelum baris deklarasi. _10 Sebaliknya, variabel _7 atau 8 tidak dapat diakses sebelum baris deklarasi — variabel berada di sebelum deklarasi. Dan itu bagus karena Anda memiliki lebih sedikit kesempatan untuk mengakses 8 Contoh di atas diperbarui dengan _8 (bukan 9) melempar 16 karena variabel di zona mati temporal tidak dapat diakses
Mendorong penggunaan _7 untuk pengikatan yang tidak dapat diubah atau 8 memastikan praktik yang mengurangi munculnya variabel yang tidak diinisialisasi Kiat 2. Meningkatkan kohesi Kohesi mencirikan sejauh mana elemen-elemen modul (ruang nama, kelas, metode, blok kode) dimiliki bersama. Kohesi bisa tinggi atau rendah Modul kohesi tinggi lebih disukai karena elemen-elemen dari modul semacam itu hanya berfokus pada satu tugas. Itu membuat modul
Kohesi tinggi disertai kopling longgar adalah karakteristik dari sistem yang dirancang dengan baik Blok kode dapat dianggap sebagai modul kecil. Untuk mendapatkan manfaat dari kohesi tinggi, pertahankan variabel sedekat mungkin dengan blok kode yang menggunakannya Misalnya, jika variabel hanya ada untuk membentuk logika cakupan blok, maka deklarasikan dan buat variabel hidup hanya di dalam blok itu (menggunakan deklarasi 7 atau 8). Jangan paparkan variabel ini ke lingkup blok luar, karena blok luar seharusnya tidak peduli dengan variabel ini Salah satu contoh klasik dari perpanjangan umur variabel yang tidak perlu adalah penggunaan 21 siklus di dalam suatu fungsi _0 _22, 23 dan 9 variabel dideklarasikan di awal badan fungsi. Namun, mereka hanya digunakan menjelang akhir. Apa masalahnya dengan pendekatan ini? Antara deklarasi di atas dan penggunaan dalam pernyataan 21 variabel 22, 23 tidak diinisialisasi dan diekspos ke 8. Mereka memiliki siklus hidup yang sangat panjang di seluruh cakupan fungsi Pendekatan yang lebih baik adalah memindahkan variabel-variabel ini sedekat mungkin ke tempat penggunaannya _1 _22 dan 23 variabel hanya ada dalam lingkup blok pernyataan 21. Mereka tidak memiliki arti di luar ________10______21 9 variabel dideklarasikan dekat dengan sumber penggunaannya juga Mengapa versi modifikasi lebih baik dari versi awal?
2. 2 Mengakses properti yang tidak ada
Mari kita tunjukkan itu dalam sebuah contoh _2 _36 adalah objek dengan properti tunggal 37. Mengakses properti yang tidak ada _38 menggunakan pengakses properti 39 dievaluasi menjadi 8 Mengakses properti yang tidak ada tidak menimbulkan kesalahan. Masalah muncul saat mencoba mendapatkan data dari properti yang tidak ada, yang merupakan jebakan 8 yang paling umum, tercermin dalam pesan kesalahan terkenal 42 Mari sedikit memodifikasi cuplikan kode sebelumnya untuk mengilustrasikan lemparan 43 _3 _36 tidak memiliki properti 38, jadi 39 dievaluasi menjadi 8 Akibatnya, mengakses item pertama dari nilai 8 menggunakan ekspresi 49 melempar 43 Sifat permisif JavaScript yang memungkinkan mengakses properti yang tidak ada adalah sumber nondeterminisme. properti dapat diatur atau tidak. Cara yang baik untuk melewati masalah ini adalah membatasi objek untuk selalu menentukan properti yang dimilikinya Sayangnya, seringkali Anda tidak memiliki kendali atas objek tersebut. Objek tersebut mungkin memiliki kumpulan properti yang berbeda dalam berbagai skenario. Jadi, Anda harus menangani semua skenario ini secara manual Mari terapkan fungsi 51 yang menambahkan di awal dan/atau di akhir array elemen baru. _52 parameter menerima objek dengan properti
Fungsi mengembalikan instance array baru, tanpa mengubah array asli Versi pertama _57, agak naif, mungkin terlihat seperti ini _4 Karena _52 objek dapat menghilangkan 53 atau 55 properti, wajib untuk memverifikasi apakah properti ini ada di 52 Pengakses properti mengevaluasi ke 8 jika properti tidak ada. Godaan pertama untuk memeriksa apakah ada properti _53 atau 55 adalah memverifikasinya terhadap 8. Ini dilakukan dalam persyaratan _66 dan 67 Tidak terlalu cepat. Pendekatan ini memiliki kelemahan. 8, serta 0, 6, 71, 72 dan 73 adalah nilai palsu Dalam implementasi _57 saat ini, fungsi tidak mengizinkan untuk memasukkan elemen palsu _5 _71 dan 0 salah. Karena _66 dan 67 sebenarnya dibandingkan dengan falsy, elemen ini tidak dimasukkan ke dalam array. Fungsi mengembalikan array awal _79 tanpa modifikasi, bukan 80 yang diharapkan Tips berikut menjelaskan cara mengecek keberadaan properti dengan benar Kiat 3. Periksa keberadaan properti Untungnya, JavaScript menawarkan banyak cara untuk menentukan apakah objek tersebut memiliki properti tertentu
Rekomendasi saya adalah menggunakan _86 operator. Ini memiliki sintaks yang pendek dan manis. _86 kehadiran operator menyarankan maksud yang jelas untuk memeriksa apakah suatu objek memiliki properti tertentu, tanpa mengakses nilai properti yang sebenarnya _84 adalah solusi yang bagus juga. Ini sedikit lebih lama dari 86 operator dan memverifikasi hanya di properti objek itu sendiri Mari tingkatkan fungsi _51 menggunakan operator 86 _6 _92 (dan 93) adalah 9 apakah properti yang sesuai ada, 0 jika tidak _86 operator memperbaiki masalah dengan memasukkan elemen palsu 71 dan 0. Sekarang, menambahkan elemen ini di awal dan akhir 79 menghasilkan hasil yang diharapkan 80 Kiat 4. Destrukturisasi untuk mengakses properti objek Saat mengakses properti objek, terkadang perlu menetapkan nilai default jika properti tidak ada Anda dapat menggunakan _86 disertai dengan operator ternary untuk melakukannya _7 Sintaks operator ternary menjadi menakutkan ketika jumlah properti yang diperiksa bertambah. Untuk setiap properti, Anda harus membuat baris kode baru untuk menangani default, menambah tembok jelek dari operator ternary yang mirip Untuk menggunakan pendekatan yang lebih elegan, mari kenali fitur ES2015 hebat yang disebut penghancuran objek Penghancuran objek memungkinkan ekstraksi sebaris dari nilai properti objek secara langsung ke dalam variabel dan menyetel nilai default jika properti tidak ada. Sintaks yang nyaman untuk menghindari berurusan langsung dengan 8 Memang, ekstraksi properti sekarang tepat _8 Untuk melihat hal-hal dalam tindakan, mari kita definisikan fungsi berguna yang membungkus string dalam tanda kutip _03 menerima argumen pertama sebagai string yang akan dibungkus. Argumen kedua _04 adalah objek dengan properti
Menerapkan manfaat dari penghancuran objek, mari terapkan 11 _9 _12 penugasan destrukturisasi dalam satu baris mengekstrak properti 05 dan 09 dari objek 04 Jika beberapa properti tidak ada di objek _04, tugas penghancuran menetapkan nilai default. _17 untuk 05 dan 0 untuk 09 Untungnya, fungsinya masih memiliki ruang untuk perbaikan Mari pindahkan tugas penghancuran ke bagian parameter. Dan atur nilai default (objek kosong 21) untuk parameter 04, untuk melewati argumen kedua saat pengaturan default sudah cukup _0 Tugas penghancuran menggantikan parameter 04 dalam tanda tangan fungsi. aku suka itu. _11 menjadi satu baris lebih pendek _25 di sisi kanan tugas penghancuran memastikan bahwa objek kosong digunakan jika argumen kedua tidak ditentukan sama sekali 26 Penghancuran objek adalah fitur canggih yang menangani ekstraksi properti dari objek secara efisien. Saya suka kemungkinan untuk menentukan nilai default yang akan dikembalikan ketika properti yang diakses tidak ada. Akibatnya, Anda menghindari _8 dan kerumitan di sekitarnya Kiat 5. Isi objek dengan properti default Jika tidak perlu membuat variabel untuk setiap properti, seperti yang dilakukan tugas penghancuran, objek yang melewatkan beberapa properti dapat diisi dengan nilai default ES2015 _28 menyalin nilai dari semua properti yang dapat dihitung sendiri dari satu atau lebih objek sumber ke objek target. Fungsi mengembalikan objek target Misalnya, Anda perlu mengakses properti dari objek 29 yang tidak selalu berisi kumpulan properti lengkapnya Untuk menghindari _8 saat mengakses properti yang tidak ada dari 29, mari lakukan beberapa penyesuaian
_1 _29 hanya berisi 38 properti. _32 objek mendefinisikan nilai default untuk properti 38 dan 41 _42 mengambil argumen pertama sebagai objek target 43. Objek target menerima nilai properti _38 dari 29 objek sumber. Dan nilai _41 properti dari 32 objek sumber, karena 29 tidak mengandung 41 Urutan di mana objek sumber disebutkan memang penting. nanti properti objek sumber menimpa yang sebelumnya Anda sekarang aman untuk mengakses properti apa pun dari objek 34, termasuk 51 yang awalnya tidak tersedia di 29 Untungnya, ada alternatif yang lebih mudah untuk mengisi objek dengan properti default. Saya sarankan untuk menggunakan Alih-alih _42 doa, gunakan sintaks penyebaran objek untuk menyalin ke objek target semua properti yang dimiliki dan dapat dihitung dari objek sumber _2 Penginisialisasi objek menyebarkan properti dari 32 dan 29 objek sumber. Urutan di mana objek sumber ditentukan adalah penting. nanti properti objek sumber menimpa yang sebelumnya Mengisi objek yang tidak lengkap dengan nilai properti default adalah strategi yang efisien untuk membuat kode Anda aman dan tahan lama. Apa pun situasinya, objek selalu berisi kumpulan properti lengkap. dan _8 tidak dapat dibuat Tip bonus. penggabungan nullish Operator mengevaluasi ke nilai default ketika operannya adalah 8 atau 6 _3 Operator penggabungan Nullish nyaman untuk mengakses properti objek sambil memiliki nilai default saat properti ini adalah 8 atau 6 _4 _61 objek tidak memiliki properti 41, sehingga 63 pengakses properti adalah 8. _65 dievaluasi ke nilai default 66 _67 adalah 68, jadi operator penggabungan nullish mengevaluasi ke nilai properti 68 2. 3 Parameter fungsi
Biasanya sebuah fungsi yang didefinisikan dengan sejumlah parameter tertentu harus dipanggil dengan jumlah argumen yang sama. Saat itulah parameter mendapatkan nilai yang Anda harapkan _5 Ketika _71, parameter 72 dan 73 menerima 74 dan masing-masing 75 nilai. Perkalian dihitung seperti yang diharapkan. _76 Apa yang terjadi jika Anda menghilangkan argumen tentang doa? Mari kita ubah sedikit contoh sebelumnya dengan memanggil fungsi hanya dengan satu argumen _6 Doa _78 dilakukan dengan satu argumen. sebagai hasilnya 72 parameter adalah 74, tetapi parameter 73 adalah 8 Kiat 6. Gunakan nilai parameter default Kadang-kadang suatu fungsi tidak memerlukan set lengkap argumen pada pemanggilan. Anda dapat menyetel default untuk parameter yang tidak memiliki nilai Mengingat contoh sebelumnya, mari kita lakukan perbaikan. Jika parameter _73 adalah 8, biarkan default ke 85 _7 Fungsi dipanggil dengan satu argumen 78. Awalnya, parameter _72 adalah 85 dan 73 adalah 8 Pernyataan bersyarat memverifikasi apakah 73 adalah 8. Jika itu terjadi, penetapan _93 menetapkan nilai default Meskipun cara yang disediakan untuk menetapkan nilai default berfungsi, saya tidak menyarankan membandingkan langsung dengan 8. Ini bertele-tele dan terlihat seperti peretasan Pendekatan yang lebih baik adalah menggunakan fitur ES2015. Singkat, ekspresif, dan tidak ada perbandingan langsung dengan 8 Menambahkan nilai default ke parameter _93 terlihat lebih baik _8 _93 dalam tanda tangan fungsi memastikan bahwa jika 73 adalah 8, parameter default ke 85 Fitur parameter default ES2015 bersifat intuitif dan ekspresif. Selalu gunakan untuk menetapkan nilai default untuk parameter opsional 2. 4 Nilai pengembalian fungsi
Fungsi yang tidak memiliki pernyataan _01 secara implisit mengembalikan 8 _9 05 fungsi tidak mengembalikan hasil perhitungan apa pun. Hasil pemanggilan fungsi adalah 8 Situasi yang sama terjadi ketika ada pernyataan _01, tetapi tanpa ekspresi di dekatnya 0 08 pernyataan dieksekusi, tetapi tidak mengembalikan ekspresi apa pun. Hasil doa juga 8 Tentu saja, menunjukkan dekat _01 ekspresi yang dikembalikan berfungsi seperti yang diharapkan 1 Sekarang pemanggilan fungsi dievaluasi menjadi 11, yaitu 85 kuadrat Kiat 7. Jangan percaya penyisipan titik koma otomatis Daftar pernyataan berikut dalam JavaScript harus diakhiri dengan titik koma ( 13)
Jika Anda menggunakan salah satu pernyataan di atas, pastikan untuk menandai titik koma di bagian akhir 2 Di akhir pernyataan 8 dan pernyataan 01, sebuah titik koma wajib ditulis Apa yang terjadi jika Anda tidak ingin menandai titik koma ini? Dibantu oleh ASI, Anda dapat menghapus titik koma dari contoh sebelumnya 3 Teks di atas adalah kode JavaScript yang valid. Titik koma yang hilang dimasukkan secara otomatis untuk Anda Sekilas memang terlihat cukup menjanjikan. Mekanisme ASI memungkinkan Anda melewati titik koma yang tidak perlu. Anda dapat membuat kode JavaScript lebih kecil dan lebih mudah dibaca Ada satu jebakan kecil tapi menyebalkan yang dibuat oleh ASI. Ketika baris baru berada di antara _01 dan ekspresi yang dikembalikan 27, ASI secara otomatis menyisipkan titik koma sebelum baris baru 28 Apa artinya di dalam fungsi memiliki 08 pernyataan? . Jika Anda tidak mengetahui secara detail mekanisme ASI, ________0______8 tiba-tiba kembali menyesatkan Sebagai contoh, mari pelajari nilai yang dikembalikan dari 32 doa 4 Antara pernyataan _01 dan ekspresi literal array ada baris baru. JavaScript secara otomatis menyisipkan titik koma setelah 01, menafsirkan kode sebagai berikut 5 Pernyataan _08 membuat fungsi 32 mengembalikan 8 alih-alih array yang diharapkan Masalahnya diselesaikan dengan menghapus baris baru antara 01 dan array literal 6 Rekomendasi saya adalah untuk mempelajari bagaimana tepatnya Penyisipan Titik Koma Otomatis bekerja untuk menghindari situasi seperti itu Tentu saja, jangan pernah menempatkan baris baru antara 01 dan ekspresi yang dikembalikan 2. 5 batal operator40 mengevaluasi ekspresi dan mengembalikan 8 terlepas dari hasil evaluasi 7 dari _42 operator adalah untuk menekan evaluasi ekspresi ke 8, mengandalkan beberapa efek samping dari evaluasi 3. tidak terdefinisi dalam arrayAnda mendapatkan _8 saat mengakses elemen array dengan indeks di luar batas 8 45 array memiliki 3 elemen, sehingga indeks yang valid adalah 71, 1, dan 85 Karena tidak ada elemen array pada indeks 74 dan 50, pengakses 51 dan 52 adalah 8 Dalam JavaScript, Anda mungkin menemukan apa yang disebut array jarang. Ini adalah array yang memiliki celah, mis. e. pada beberapa indeks, tidak ada elemen yang didefinisikan Ketika celah (alias slot kosong) diakses di dalam array jarang, Anda juga mendapatkan 8 Contoh berikut menghasilkan larik renggang dan mencoba mengakses slot kosongnya _9 55 dibuat dengan memanggil konstruktor 56 dengan argumen numerik pertama. Ini memiliki 3 slot kosong 57 dibuat dengan array literal dengan elemen kedua yang hilang Di salah satu array jarang ini yang mengakses slot kosong bernilai 8 Saat bekerja dengan array, untuk menghindari 8, pastikan untuk menggunakan indeks array yang valid dan mencegah pembuatan array jarang 4. Perbedaan antara tidak terdefinisi dan nolApa perbedaan utama antara 8 dan 6? _8 mewakili nilai variabel yang belum diinisialisasi, sementara Mari jelajahi perbedaannya dalam beberapa contoh Variabel 2 didefinisikan, namun tidak ditetapkan dengan nilai awal 0 2 variabel adalah 8, yang menunjukkan variabel yang tidak diinisialisasi Konsep yang tidak diinisialisasi yang sama terjadi ketika properti objek yang tidak ada diakses _1 Karena _67 properti tidak ada di 68, JavaScript mengevaluasi 69 hingga 8 Di sisi lain, Anda tahu bahwa sebuah variabel mengharapkan sebuah objek. Tetapi untuk beberapa alasan, Anda tidak dapat membuat instance objek. Dalam kasus seperti itu _6 adalah indikator yang berarti dari objek yang hilang Misalnya, _72 adalah fungsi yang mengkloning objek JavaScript biasa. Fungsi ini diharapkan untuk mengembalikan objek _2 Namun _72 mungkin dipanggil dengan argumen non-objek. 74 atau 6. Dalam kasus seperti itu, fungsi tidak dapat membuat tiruan, sehingga mengembalikan 6 — indikator objek yang hilang 8 operator membuat perbedaan antara 8 dan 6 _3 Juga _80 dengan benar membedakan 8 dari 6 _4 5. Kesimpulan8 keberadaan adalah konsekuensi dari sifat permisif JavaScript yang memungkinkan penggunaan
Membandingkan langsung dengan _8 tidak aman karena Anda mengandalkan praktik yang diizinkan tetapi tidak dianjurkan yang disebutkan di atas Strategi yang efisien adalah dengan mengurangi kemunculan 8 kata kunci dalam kode Anda dengan menerapkan kebiasaan baik seperti
Apakah baik bahwa JavaScript memiliki _8 dan 6 untuk mewakili nilai kosong? Suka postingannya?Sarankan Perbaikan Posting berkualitas ke kotak masuk AndaSaya secara teratur menerbitkan posting yang berisi
Berlangganan buletin saya untuk mengirimkannya langsung ke kotak masuk Anda LanggananBergabunglah dengan 6915 pelanggan lainnya Tentang Dmitri PavlutinPenulis dan pelatih teknologi. Rutinitas harian saya terdiri dari (namun tidak terbatas) minum kopi, coding, menulis, coaching, mengatasi kebosanan 😉 Sekarang bekerja sebagai pengembang open source penuh waktu pada proyek Readapt - bertujuan untuk membuat web dapat diakses oleh semua orang Mengapa ini tidak terdefinisi dalam JavaScript?Properti undefined menunjukkan bahwa sebuah variabel belum diberi nilai, atau tidak dideklarasikan sama sekali .
Bagaimana cara mengatasi kesalahan yang tidak terdefinisi dalam JavaScript?Kiat 1. Mendukung const , jika tidak gunakan let , tetapi ucapkan selamat tinggal pada var Kiat 2. Meningkatkan kohesi Kiat 3. Periksa keberadaan properti Kiat 4. Destrukturisasi untuk mengakses properti objek Kiat 5. Isi objek dengan properti default Tip bonus. penggabungan nullish Kiat 6. Gunakan nilai parameter default Mengapa ini tidak ditentukan dalam mode ketat?Dalam mode ketat, sekarang tidak terdefinisi. Ketika sebuah fungsi dipanggil dengan call atau apply , jika nilainya adalah nilai primitif, yang ini dimasukkan ke dalam sebuah objek (atau objek global untuk undefined . Dalam mode ketat, nilai diteruskan langsung tanpa konversi atau penggantian.
Apa kata kunci ini dalam JavaScript?Dalam JavaScript, kata kunci this mengacu pada objek . Objek mana yang bergantung pada bagaimana ini dipanggil (digunakan atau dipanggil). Kata kunci this mengacu pada objek yang berbeda tergantung pada bagaimana kata kunci ini digunakan. Dalam metode objek, ini mengacu pada objek. Sendiri, ini mengacu pada objek global. |