Ada 5 nilai asli dalam JS, 6 jenis penilaian, dan 9 konstruktor bawaan.
Ini 569 membentuk dasar bahasa JS.
5 Nilai Asli adalah: Angka, Karakter, Booleans, Null, Tidak Ditentukan
Tipeof dapat menilai: angka, karakter, boolean, objek, fungsi, tidak terdefinisi. Perhatikan bahwa null dan array, typeof kedua objek output.
Tipeof tidak dapat membedakan array dan objek. Bagaimana cara menilai jenis? Gunakan Object.Prototype.ToString.Apply ().
if (value && typeOf value === 'objek' && value.constructor === Array)
Jika deteksi di atas dibuat dalam bingkai dan jendela yang berbeda, false akan diberikan, dan objek jendela akan berbeda.
Metode yang dapat diandalkan adalah if (object.prototype.tostring.apply (value) === "[array objek]")
Array argumen bukan array, itu hanya objek dengan atribut anggota panjang.
Seperti yang ditunjukkan dalam contoh berikut, argumen bukan array biasa
Salinan kode adalah sebagai berikut:
var a = function () {
var b = object.prototype.toString.Apply (argumen);
console.log (b);
}
a (); // output [argumen objek]
Salinan kode adalah sebagai berikut:
var a = function () {
var c = [];
var b = object.prototype.toString.Apply (c);
console.log (b);
}
a (); // output [array objek]
Bagaimana instance dari menentukan apakah suatu instance adalah sebuah instance
Properti dalam prototipe memiliki konstruktor.
Properti prototipe default adalah objek objek yang dapat diatur ke nilai kompleks apa pun, abaikan pengaturan ke nilai asli.
Meskipun ia adalah objek, ia istimewa, dan rantai melingkar menghubungkan setiap contoh dengan properti prototipe konstruktornya. Ada tautan tersembunyi antara instance dan atribut prototipe konstruktor, yang merupakan __proto__ instance. Pada saat yang sama, atribut konstruktor dari instance diperoleh melalui konstruktor konstruktor prototipe fungsi konstruktor.
Namun, kita harus mempertahankan konstruktor, sehingga contoh baru dapat memiliki atribut konstruktor, dan kita juga dapat menggunakan instanceof untuk menilai.
Salinan kode adalah sebagai berikut:
var foo = function () {}
Foo.prototype = {constructor: foo}
var fooinstance = foo baru;
Fooinstance .__ proto __ === foo.prototype; // true
Fooinstance.constructor === foo; //BENAR
Faktanya, contoh penilaian tidak didasarkan pada konstruktor, tetapi pada rantai prototipe, seperti yang ditunjukkan dalam contoh berikut
Salinan kode adalah sebagai berikut:
var foo = function () {};
Foo.prototype = {};
var fooinstance = {};
Fooinstance .__ proto __ = foo.prototype;
console.log (instance fooinstance dari foo); // true
Gunakan nilai asli, tidak ada konstruktor
Nilai mana yang salah: false, "", null, 0, -0, nan, tidak terdefinisi, ini salah, yang lain benar
Tapi tolong perhatikan contoh berikut
Salinan kode adalah sebagai berikut:
var a = boolean (false);
var b = boolean baru ("");
if (a) {console.log (a);} // tidak bisa output
if (b) {console.log (b);} // boolean {[[primitivevalue]]: false} yang baru setara dengan suatu objek, itu tidak salah
Artikel di atas sedikit lebih teoretis, tetapi ini adalah dasar untuk bahasa JavaScript, dan Anda harus memahaminya dengan jelas.