Mengapakah operator instanceof mengembalikan palsu untuk sesetengah literal?
Dalam JavaScript, pengendali instanceof menyemak sama ada objek ialah contoh kelas atau hierarki kelas tertentu. Walau bagaimanapun, ia berkelakuan di luar jangkaan apabila digunakan pada literal tertentu.
Literal, seperti rentetan, nombor dan boolean, ditakrifkan secara langsung dalam kod dan tidak dicipta melalui kelas. Mari kita periksa contoh berikut:
"foo" instanceof String //=> false "foo" instanceof Object //=> false true instanceof Boolean //=> false true instanceof Object //=> false 12.21 instanceof Number //=> false // Array and Object literals are exceptions [0,1] instanceof Array //=> true {0:1} instanceof Object //=> true
Memahami Perbezaan
Primitif vs. Objek:
Instanceof dan Primitif
Pengendali instanceof hanya menyemak sama ada objek ialah tika kelas atau keturunannya. Memandangkan primitif tidak dicipta melalui kelas, instanceof akan sentiasa mengembalikan false untuk literal primitif, walaupun nilai literal sepadan dengan jenis kelas.
Pengecualian: Tatasusunan dan Objek
Array dan Object literal adalah pengecualian kepada tingkah laku ini. Mereka tidak dibina melalui kelas tetapi masih dianggap sebagai contoh kelas Array dan Objek, masing-masing. Ini berkemungkinan merupakan keanehan sejarah bahasa tersebut.
Kaedah Pengujian Alternatif
Untuk menguji sama ada nilai adalah daripada jenis primitif tertentu, seseorang harus menggunakan operator jenis sebaliknya of instanceof:
typeof "foo" === "string" //=> true typeof 12.21 === "number" //=> true
Conclusion
Instanceof berkelakuan salah dengan literal primitif kerana ia bukan tika bagi mana-mana kelas. Array dan Object literal adalah pengecualian kerana ciri sejarah. Apabila menentukan jenis primitif, adalah dinasihatkan untuk menggunakan typeof dan bukannya instanceof.
Atas ialah kandungan terperinci Mengapakah `instanceof` Mengembalikan `false` untuk Literal dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!