Rumah  >  Artikel  >  hujung hadapan web  >  Mengapakah String, Boolean dan Number Literal Gagal dalam Ujian `instanceof`?

Mengapakah String, Boolean dan Number Literal Gagal dalam Ujian `instanceof`?

Patricia Arquette
Patricia Arquetteasal
2024-10-31 21:51:02546semak imbas

Why Do String, Boolean, and Number Literals Fail the `instanceof` Test?

Instanceof Conundrum: Mengapa Sesetengah Literal Gagal Padan

Walaupun asas kepada JavaScript, instanceof operator boleh menunjukkan tingkah laku yang membingungkan apabila digunakan dengan tertentu literal. Terutamanya, rentetan, Boolean dan literal Nombor semuanya dinilai palsu apabila diuji terhadap pembina masing-masing.

<code class="js">"foo" instanceof String //=> false
"foo" instanceof Object //=> false

true instanceof Boolean //=> false
true instanceof Object //=> false
false instanceof Boolean //=> false
false instanceof Object //=> false

12.21 instanceof Number //=> false
/foo/ instanceof RegExp //=> true</code>

Tingkah laku ini mengejutkan, kerana seseorang menjangkakan literal adalah contoh jenis yang sepadan. Walau bagaimanapun, sebab ketidakkonsistenannya terletak pada perbezaan antara primitif dan objek.

Primitivisme at Play

JavaScript primitif, seperti rentetan, nombor dan boolean, adalah jenis terbina dalam yang tidak dicipta melalui pembina objek. Sebaliknya, ia pada asasnya berbeza daripada objek yang dibina dalam JavaScript.

<code class="js">var color1 = new String("green");
color1 instanceof String; // returns true
var color2 = "coral";
color2 instanceof String; // returns false (color2 is not a String object)</code>

Seperti yang ditunjukkan di atas, menggunakan String constructor mencipta objek String, yang akan menilai kepada benar apabila diuji dengan instanceof. Walau bagaimanapun, rentetan primitif literal "karang" tidak mewarisi tingkah laku ini.

Kaedah Semakan Jenis Alternatif

Tingkah laku yang membingungkan instanceof dengan primitif telah membawa kepada penerimaan kaedah alternatif untuk semakan jenis:

  • jenis Operator: Jenis operator mengembalikan jenis primitif pembolehubah, cth., jenis "foo" === "rentetan".
  • Object.prototype.toString: Kaedah ini juga boleh digunakan untuk semakan jenis, mis., Object.prototype.toString.call("foo") === "[object String ]".

Sebagai kesimpulan, kelakuan instanceof dengan primitif adalah hasil daripada sistem jenis unik JavaScript. Walaupun ini boleh membawa kepada kekeliruan, memahami perbezaan antara primitif dan objek boleh membantu pembangun menavigasi nuansa ini dengan berkesan.

Atas ialah kandungan terperinci Mengapakah String, Boolean dan Number Literal Gagal dalam Ujian `instanceof`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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