Dalam JavaScript, objek mengandungi sifat dalam format nilai kunci. Kita boleh mengakses mana-mana harta objek menggunakan nama harta dengan mengambil objek sebagai rujukan.
Kadangkala, kami cuba mengakses sifat objek yang tidak wujud dalam objek tersebut. Dalam kes ini kita mendapat nilai yang tidak ditentukan. Marilah kita memahaminya melalui contoh berikut.
Dalam contoh di bawah, kami telah mencipta objek dan menambah beberapa sifat. Selain itu, kami telah menambahkan beberapa sifat bersarang. Selepas itu, kami cuba mengakses harta "prop5", yang merupakan harta bersarang "prop4". Pengguna boleh melihat nilainya dalam output.
Selain itu, kami cuba mengakses sifat "prop6" tetapi objek kembali tidak ditentukan kerana ia tidak wujud dalam objek.
<html> <body> <h2>Accessing the object properties in JavaScript</h2> <div id="content"> </div> <script> let content = document.getElementById('content'); let object = { name: 'Shubham', prop1: 'Hello', prop2: 'World', prop3: '!', prop4: { prop5: 'This is a nested object.' } } content.innerHTML = "The value of prop5 is : " + object.prop4.prop5; content.innerHTML += "<br> The value of prop3 is : " + object.prop3; content.innerHTML += "<br> The value of prop6 is : " + object.prop6; </script> </body> </html>
Jadi, apabila sesuatu sifat tidak wujud dalam objek, kita boleh membuang ralat yang mengatakan bahawa harta itu tidak wujud dalam objek.
Di sini kita akan mempelajari cara lain untuk membuang ralat semasa mengakses sifat objek.
Pengendali "dalam" membolehkan kami menyemak sama ada sifat wujud dalam objek. Kita boleh menggunakan kunci sebagai operan kiri pengendali "dalam" dan objek sebagai operan kanan.
Kita boleh menyemak sama ada sifat wujud dalam objek. Jika tidak, kita boleh membuang ralat.
Pengguna boleh menggunakan operator "masuk" mengikut sintaks berikut untuk membuang ralat semasa mengakses sifat objek.
if(key in obj){ }else { // throw error }
Dalam sintaks di atas, kunci ialah sifat yang digunakan untuk menyemak sama ada ia wujud dalam objek.
Dalam contoh di bawah, kami mencipta objek table_obj dan menambah beberapa pasangan nilai kunci. Fungsi bernama get_property_value() menyemak sama ada harta itu wujud dalam objek. Jika harta wujud dalam objek, nilai harta akan dikembalikan. Jika tidak, ia akan membuang ralat.
Dalam blok cuba-tangkap, kami mendapati ralat. Dalam output, pengguna boleh melihat bahawa fungsi get_property_value() membuang ralat untuk sifat "table_price1" dan bukannya mengembalikan nilai yang tidak ditentukan untuk harta tersebut.
<html> <body> <h3>Using the <i> in </i> operator to throw an error while accessing the object properties in JavaScript</h3> <div id = "content"> </div> <script> let content = document.getElementById('content'); // creating an object for table details let table_obj = { table_name: "table1", table_type: "table", table_size: "10x10", table_color: "black", table_price: 1000 } function get_property_value(key) { if (key in table_obj) { return table_obj[key]; } else { throw new Error(key + " is not a valid property name."); } } try { content.innerHTML += "table_name : - " + get_property_value("table_name"); content.innerHTML += "<br>" + get_property_value("table_price1"); } catch (e) { content.innerHTML += "<br>" + e.message; } </script> </body> </html>
Kaedah defineProperty() Javascript membolehkan kami menambah sifat pada objek. Kita boleh menambah getter untuk deskriptor harta yang membuang ralat.
Pengguna boleh menggunakan kaedah defineProperty() mengikut sintaks berikut untuk membuang ralat semasa mengakses sifat objek.
Object.defineProperty(obj_name, 'prop_name', { get: () => { // throw an error } });
Dalam sintaks di atas, kami menghantar deskriptor sebagai parameter ketiga kaedah defineProperty(). Kita boleh membuang ralat daripada fungsi deskriptor bagi sifat tertentu objek.
Obj_name - Ini ialah nama objek untuk menambah sifat pada objek.
Prop_name - Ini ialah nama harta yang akan ditambahkan pada objek.
{ get: () => { } } - Ia ialah fungsi getter untuk sifat objek.
Dalam contoh di bawah, kami mencipta objek empty_obj dengan sifat sifar. Kami menggunakan kaedah defineProperties() untuk menambah sifat. Sebagai deskriptor, kami menambah kaedah get(), yang melemparkan ralat dan memaparkan mesej ralat.
Dalam output, pengguna boleh memerhatikan bahawa apabila kita cuba mengakses sifat "prop1" ia menimbulkan ralat.
<html> <body> <h3>Using the <i> defineProperty() </i> method to throw an error while accessing the object properties in JavaScript </h3> <div id = "content"> </div> <script> let content = document.getElementById('content'); let empty_obj = {}; Object.defineProperty(empty_obj, 'prop1', { get: () => { throw new Error('You cannot access prop1 property'); } }); try { content.innerHTML = "The value of prop1 property in the empty object is " + empty_obj.prop1; } catch (err) { content.innerHTML = "The error is : - " + err; } </script> </body> </html>
Proxy() constructor membenarkan kami membuat proksi untuk objek dan mengatasi semua deskriptor objek, seperti getter dan setter. Di sini kita boleh mengatasi getters() dan menulis fungsi baharu yang boleh membuang ralat.
Pengguna boleh menggunakan sintaks berikut untuk menggunakan pembina Proxy() untuk membuang ralat semasa mengakses sifat objek.
let proxy_obj = new Proxy(target_Obj, { get: function (target, prop) { // throw error }, });
Dalam sintaks di atas, target_obj ialah objek yang mana proksi dibuat. Kami telah melepasi objek yang mengandungi kaedah get() sebagai parameter kedua. Dalam kaedah get() kita boleh mengesahkan sifat objek dan membuang ralat jika sifat objek tidak sah.
Dalam contoh di bawah, kami mencipta proksi untuk objek targetObj menggunakan pembina Proxy(). Apabila membuat proksi, kami menyemak sama ada pengguna mengakses sifat "prop5". Jika tidak, kami akan sentiasa membuang ralat. Ini bermakna bahawa sifat "prop5" hanya boleh diakses daripada objek. Walau bagaimanapun, ia akan mengembalikan nilai yang tidak ditentukan untuk sifat "prop5" kerana kami belum mentakrifkannya dalam objek lagi.
<html> <body> <h3>Using the <i> defineProperty() </i> method to throw an error while accessing the object properties in JavaScript </h3> <div id = "content"> </div> <script> let content = document.getElementById('content'); let targetObj = { prop1: 'Hello', } let proxy_obj = new Proxy(targetObj, { get: function (target, prop) { if (prop != 'prop5') { throw new Error('You are only allowed to access prop5'); } }, }); try { content.innerHTML += "The value of prop1 is: " + proxy_obj.prop1 + "<br>"; } catch (e) { content.innerHTML += "The error is - " + e + "<br>"; } </script> </body> </html>
Atas ialah kandungan terperinci Bagaimana untuk membuang ralat apabila menggunakan sifat objek?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!