Mengapakah `instanceof` Mengembalikan `false` untuk Literal dalam JavaScript?

DDD
Lepaskan: 2024-11-03 22:39:31
asal
771 orang telah melayarinya

Why Does `instanceof` Return `false` for Literals in JavaScript?

Misteri Instanceof and Literals

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
Salin selepas log masuk

Memahami Perbezaan

Primitif vs. Objek:

  • Tersurat, seperti rentetan, nombor, dan boolean, adalah primitif. Mereka wujud secara bebas daripada mana-mana kelas atau tika.
  • Objek, seperti tatasusunan dan objek yang dibuat dengan kata kunci baharu, ialah tika kelas.

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan