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