Rumah >hujung hadapan web >tutorial js >Penjelasan terperinci tentang Objek dalam kemahiran system_javascript jenis JavaScript
Perkataan sebelumnya
Dalam JavaScript, objek adalah raja; hampir semua dalam Javascript adalah objek atau berfungsi seperti objek. Jika anda memahami objek, anda memahami Javascript. Dalam JavaScript, jenis rujukan ialah struktur data yang digunakan untuk menyusun data dan fungsi bersama-sama Ia juga sering dipanggil kelas. Jenis rujukan kadangkala dipanggil definisi objek kerana ia menerangkan sifat dan kaedah kelas objek
Kebanyakan nilai jenis rujukan adalah contoh jenis Objek, selain itu, Objek juga merupakan jenis yang paling biasa digunakan dalam JavaScript. Walaupun kejadian Objek tidak mempunyai banyak fungsi, ia sememangnya sesuai untuk menyimpan dan memindahkan data dalam aplikasi
Buat objek
Terdapat dua cara untuk mencipta jenis Objek
[1]Pembina objek
var person = new Object(); //如果不给构造函数传递参数可以不加括号 var person = new Object; person.name = 'bai'; person.age = 29; //创建无属性的空对象 var cody1 = new Object(); var cody2 = new Object(undefined); var cody3 = new Object(null); console.log(typeof cody1,typeof cody2, typeof cody3);//object object object //创建string、number、array、function、boolean、regex console.log(new Object('foo')); console.log(new Object(1)); console.log(new Object([])); console.log(new Object(function(){})); console.log(new Object(true)); console.log(new Object(/\bbt[a-z]+\b/));
[Nota] Pembina Object() itu sendiri ialah objek, dan pembina ialah objek yang dicipta berdasarkan pembina Fungsi
[2]Gunakan literal objek
Javascript menyediakan pintasan yang dipanggil literal untuk mencipta kebanyakan nilai objek asli. Menggunakan literal hanya menyembunyikan
yang sama seperti menggunakan operator baharuProses asas
var person = { name : 'bai', age : 29, 5 : true };
[Nota] Gunakan koma dalam literal objek untuk memisahkan sifat yang berbeza, tetapi menambah koma selepas sifat terakhir akan menyebabkan ralat dalam IE7
Gunakan kaedah literal objek untuk mentakrifkan objek, dan nama atribut akan ditukar secara automatik menjadi rentetan
//同上 var person = { 'name' : 'bai', 'age' : 29, '5' : true };
Jika anda membiarkan pendakap kerintingnya kosong, anda boleh menentukan objek yang mengandungi hanya sifat dan kaedah lalai
//等价于var person = new Object(); var person = {}; [tips]使用对象字面量封装多个可选参数 function displayInfo(args){ var output = ''; if(typeof args.name == 'string'){ output += 'name:' + args.name +'\n'; } if(typeof args.age == 'number'){ output += 'Age:' + args.age + '\n'; } console.log(output); }; displayInfo({ name: 'Nicholas', age: 29 }); displayInfo({ name: 'match' });
Mod lulus parameter di atas paling sesuai untuk situasi di mana sejumlah besar parameter pilihan perlu dihantar ke fungsi. Secara umumnya, walaupun parameter yang dinamakan mudah dikendalikan, ia boleh menjadi tidak fleksibel apabila terdapat berbilang parameter pilihan. Oleh itu, gunakan parameter formal untuk nilai yang diperlukan dan gunakan literal objek untuk merangkum berbilang parameter pilihan
Tetapkan objek
Terdapat dua cara untuk mengakses sifat objek Anda boleh menggunakan notasi titik atau notasi kurungan untuk mendapatkan, menetapkan atau mengemas kini sifat objek
.
Dua kelebihan kaedah kurungan segi empat sama ialah atribut boleh diakses melalui pembolehubah dan nama atribut boleh menjadi pengecam tidak sah Javascript
[Nota] Aksara Cina boleh wujud dalam pembolehubah, kerana aksara Cina adalah bersamaan dengan aksara dan dianggap sama seperti aksara Inggeris, jadi ia boleh ditulis sebagai orang.白 atau orang['白']
var myObject = { 123:'zero', class:'foo' }; console.log(myObject['123'],myObject['class']);//'zero' 'foo' console.log(myObject.123);//报错
Jika nilai dalam kurungan segi empat sama adalah jenis bukan rentetan, ia akan ditukar secara tersirat kepada rentetan menggunakan String() dan kemudian keluarkan jika ia adalah jenis rentetan, jika terdapat petikan, nilai asal akan dikeluarkan , jika tidak, ia akan dikenali sebagai pembolehubah Jika pembolehubah tersebut Jika ia tidak ditakrifkan, ralat akan dilaporkan
person[0] = 1; //[]中的数字不会报错,而是自动转换成字符串 person[a] = 1; //[]中符合变量命名规则的元素会被当成变量,变量未被定义,而报错 person[''] = 2; //[]中的空字符串不会报错,是实际存在的且可以调用,但不会在控制台右侧的集合中显示 person[undefined 或 null 或 true 或 false] = 4;// 不会报错,而是自动转换成字符串 person['白'] = 6; // 不会报错
Padam objek
Operator padam boleh digunakan untuk memadam sepenuhnya atribut daripada objek. Padam ialah satu-satunya cara untuk memadamkan harta daripada objek Menetapkan harta kepada tidak ditentukan atau null hanya boleh menukar nilai harta itu tanpa memadamkan harta daripada objek. delete hanya boleh memadam data di bawah objek, lima jenis nilai asas yang lain tidak boleh dipadamkan
[Nota] padam tidak akan memadamkan sifat yang terdapat pada rantai prototaip
var foo = {bar: 'bar'}; delete foo.bar; console.log('bar' in foo);//false var a = 123; delete a; console.log(a);//123
Jika anda mengisytiharkan pembolehubah a dalam keadaan global, ia bersamaan dengan data a di bawah objek tetingkap Anda boleh menetapkan nilai kepada tetingkap melalui atau a, dan nilai tetingkap. a dan a sentiasa sama, tetapi mereka tidak boleh dipadamkan
var a; a = 10; console.log(a,window.a);//10 10 window.a = 20; console.log(a,window.a);//20 20 delete a ; console.log(a,window.a);//20 20 delete window.a; console.log(a,window.a);//20 20
Jika anda menggunakan window.b untuk mengisytiharkan dan menetapkan nilai (b adalah bersamaan dengan mengisytiharkannya di bawah objek tetingkap), anda boleh memadamkannya dan menggunakan delete b dan delete window.b mempunyai kesan yang sama selepas pemadaman. console.log(b) menggesa pembolehubah Tidak wujud, console.log(window.b) menggesa undefined
window.b = 10; console.log(b,window.b);//10 10 delete b; console.log(b);//报错 console.log(window.b);//undefined window.b = 10; console.log(b,window.b);//10 10 delete window.b; console.log(b);//报错 console.log(window.b);//undefined
Bersarang objek
Objek boleh bersarang, tetapi nilai mesti diperolehi lapisan demi lapisan
var student = { name : { chinese : 1, englisth : 2 }, sex : 1, age : 26 }
[Nota] Nilai hanya boleh diambil lapisan demi lapisan, seperti student.name.chinese, dan tidak boleh silang nama Gunakan student.chinese secara langsung, kerana mungkin juga terdapat unsur yang dipanggil cina di bawah tahap yang sama dengan nama
var object1 = { object1_1:{ object1_1_1:{foo: 'bar'}, object1_1_2:{} }, object1_2:{ object1_2_1:{}, object1_2_2:{} } }; console.log(object1.object1_1.object1_1_1.foo);//bar
实例方法
constructor:保存着用于创建当前对象的函数
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,propertyName必须以字符串形式指定
isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。其中,propertyName必须以字符串形式指定
toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
toString():返回对象的字符串表示
valueOf():返回对象的字符串、数值或布尔值表示,通常与toString()方法的返回值相同
var myObject = { mark: true }; console.log(myObject.constructor);//function Object(){} console.log(myObject.hasOwnProperty('mark'));//true console.log(Object.prototype.isPrototypeOf(myObject));//true console.log(myObject.propertyIsEnumerable('mark'));//true console.log(myObject.toLocaleString());//[object Object] console.log(myObject.toString());//[object Object] console.log(typeof myObject.valueOf(),myObject.valueOf());// object Object{mark:true}
小结:
Object类型
对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象。
var o = new Object();
Object的每个实例都具有下列属性和方法:
● constructor——保存着用于创建当前对象的函数
● hasOwnProperty(propertyName)——用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例如:o.hasOwnProperty("name"))
● isPrototypeOf(object)——用于检查传入的对象是否是另一个对象的原型
● propertyIsEnumerable(propertyName)——用于检查给定的属性是否能够使用for-in语句来枚举
● toString()——返回对象的字符串表示
● valueOf()——返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。