Rumah hujung hadapan web tutorial js javascript之typeof、instanceof操作符使用探讨_基础知识

javascript之typeof、instanceof操作符使用探讨_基础知识

May 16, 2016 pm 05:33 PM
instanceof typeof Operator

写javascirpt代码时,typeof和instanceof这两个操作符时不时就会用到,堪称必用。但是!使用它们总是不能直接的得到想要的结果,非常纠结,普遍的说法认为“这两个操作符或许是javascript中最大的设计缺陷,因为几乎不可能从他们那里得到想要的结果”
typeof
说明:typeof返回一个表达式的数据类型的字符串,返回结果为js基本的数据类型,包括number,boolean,string,object,undefined,function。
从说明来看,貌似没什么问题。

下面的代码写了一个数值变量,typeof后的结果是"number"。

复制代码 代码如下:

var a = 1;
console.log(typeof(a)); //=>number

如果用Number类型的构造函数new一个变量的话,typeof后的结果是"object"。
复制代码 代码如下:

var a = new Number(1);
console.log(typeof(a)); //=>object

上面的这两个输出结果看似没啥问题,这一点从书上看来是理所当然的事情,因为javascript就是这么设计的。

但是!问题就在于既然调用了typeof就应该准确返回一个变量的类型,不管是直接用值创建的还是用类型的构造函数创建的,否则!我还用你做啥!
那么对于:
复制代码 代码如下:

var a = 1;
var b = new Number(1);

a和b变量的类型准确的说来都应该是Number才是想要的结果。
而准确的类型信息保存在变量的内部属性 [[Class]] 的值中,通过使用定义在 Object.prototype 上的方法 toString来获取。

获取类型信息:
复制代码 代码如下:

var a = 1;
var b = new Number(1);
console.log(Object.prototype.toString.call(a));
console.log(Object.prototype.toString.call(b));

输出:
复制代码 代码如下:

[object Number]
[object Number]

是不是已经很直接了,我们稍微处理一下,得到直接结果:
复制代码 代码如下:

var a = 1;
var b = new Number(1);
console.log(Object.prototype.toString.call(a).slice(8,-1));
console.log(Object.prototype.toString.call(b).slice(8,-1));

输出:
Number
Number
这就是想要的结果。
为了更好的使用,我们封装一个方法,用来判断某个变量是否是某种类型:
复制代码 代码如下:

function is(obj,type) {
var clas = Object.prototype.toString.call(obj).slice(8, -1);
return obj !== undefined && obj !== null && clas === type;
}

定义一些变量做过测试,先来看看它们的typeof输出:
复制代码 代码如下:

var a1=1;
var a2=Number(1);
var b1="hello";
var b2=new String("hello");
var c1=[1,2,3];
var c2=new Array(1,2,3);
console.log("a1's typeof:"+typeof(a1));
console.log("a2's typeof:"+typeof(a2));
console.log("b1's typeof:"+typeof(b1));
console.log("b2's typeof:"+typeof(b2));
console.log("c1's typeof:"+typeof(c1));
console.log("c2's typeof:"+typeof(c2));
输出:
a1's typeof:number
a2's typeof:object
b1's typeof:string
b2's typeof:object
c1's typeof:object
c2's typeof:object

我们再用新作的函数是一下:
复制代码 代码如下:

console.log("a1 is Number:"+is(a1,"Number"));
console.log("a2 is Number:"+is(a2,"Number"));
console.log("b1 is String:"+is(b1,"String"));
console.log("b2 is String:"+is(b2,"String"));
console.log("c1 is Array:"+is(c1,"Array"));
console.log("c2 is Array:"+is(c2,"Array"));
输出:
a1 is Number:true
a2 is Number:true
b1 is String:true
b2 is String:true
c1 is Array:true
c2 is Array:true

注:typeof也不是无用,实际用处是用来检测一个变量是否已经定义或者是否已经赋值。
instanceof
说明:判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例。
instanceof 操作符用来比较两个内置类型的变量时一样力不从心,同样会对结果不满意。
复制代码 代码如下:

console.log("abc" instanceof String); // false
console.log("abc" instanceof Object); // false
console.log(new String("abc") instanceof String); // true
console.log(new String("abc") instanceof Object); // true

只有在比较自定义的对象时才准确反映关系。
复制代码 代码如下:

function Person() {}
function Man() {}
Man.prototype = new Person();
console.log(new Man() instanceof Man); // true
console.log(new Man() instanceof Person); // true
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah yang dilakukan oleh instanceof? Apakah yang dilakukan oleh instanceof? Nov 14, 2023 pm 03:50 PM

Fungsi instanceof adalah untuk menentukan sama ada objek adalah contoh kelas tertentu, atau sama ada ia melaksanakan antara muka tertentu. instanceof ialah operator yang digunakan untuk menyemak sama ada objek adalah jenis yang ditentukan. Senario penggunaan instanceof operator: 1. Pemeriksaan jenis: boleh digunakan untuk menentukan jenis objek tertentu, untuk melaksanakan logik yang berbeza mengikut jenis yang berbeza 2. Penghakiman antara muka: boleh digunakan untuk menentukan sama ada objek melaksanakan antara muka , untuk menentukan sama ada objek melaksanakan antara muka Definisi antara muka memanggil kaedah yang sepadan 3. Transformasi ke bawah, dsb.

Lapan penggunaan misteri pengendali '!' dalam arahan Linux Lapan penggunaan misteri pengendali '!' dalam arahan Linux Jun 27, 2023 pm 12:51 PM

Penggunaan kebanyakan arahan Linux menggunakan simbol '!' mungkin berbeza dalam cangkerang yang berbeza. Walaupun contoh yang saya sediakan biasanya digunakan dalam cengkerang bash, beberapa cangkerang Linux yang lain mungkin mempunyai pelaksanaan yang berbeza atau mungkin tidak menyokong penggunaan simbol '!' tertentu. Mari kita selami penggunaan simbol ‘!’ yang mengejutkan dan misteri dalam arahan Linux. 1. Gunakan nombor arahan untuk menjalankan arahan daripada sejarah Apa yang anda mungkin tidak tahu ialah anda boleh menjalankan arahan daripada sejarah arahan (perintah yang telah dilaksanakan). Mula-mula, cari nombor arahan dengan menjalankan arahan 'history'. linuxmi@linuxmi:~/www.linuxmi.

Ketahui lebih lanjut tentang penggunaan pengendali sama modulo dalam PHP Ketahui lebih lanjut tentang penggunaan pengendali sama modulo dalam PHP Mar 19, 2024 pm 12:54 PM

Pengendali sama modulo (%) ialah operator yang sangat biasa digunakan dalam PHP dan digunakan untuk mengira baki pembahagian dua nombor. Dalam artikel ini, kami akan melihat dengan lebih mendalam tentang penggunaan pengendali modular equals dan memberikan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik. Pertama, mari kita lihat contoh mudah Katakan kita perlu mengira baki pembahagian satu nombor dengan yang lain: $a=10;$b=3;$remainder=$a%$b;echo"10 dibahagikan dengan 3 Bakinya. ialah: &

Apakah maksud instanceof dalam java Apakah maksud instanceof dalam java Nov 13, 2023 pm 01:52 PM

Di Java, instanceof ialah operator binari yang digunakan untuk menyemak sama ada objek ialah contoh kelas atau contoh subkelas kelas nama atau nama antara muka.

sql dalam penggunaan operator sql dalam penggunaan operator Aug 04, 2023 pm 03:58 PM

SQL dalam penggunaan operator: 1. Padanan lajur tunggal, anda boleh menggunakan operator IN untuk memadankan berbilang nilai dalam lajur 2. Padanan berbilang lajur, pengendali IN juga boleh digunakan untuk memadankan nilai dalam berbilang lajur; 3. Subquery, Operator IN juga boleh digunakan dengan subquery, iaitu pernyataan pertanyaan yang bersarang dalam pertanyaan utama.

Dua pengendali baharu ditambahkan pada php7: '?->' dan '??' Dua pengendali baharu ditambahkan pada php7: '?->' dan '??' Mar 21, 2023 pm 03:49 PM

Dalam versi PHP sebelumnya, jika kita tidak mentakrifkan pembolehubah, menggunakannya secara langsung akan mengakibatkan ralat pembolehubah Tidak ditentukan. Walau bagaimanapun, dalam PHP7, kami boleh menggunakan beberapa ciri baharu untuk mengelakkan masalah ini. Ciri baharu ini termasuk dua pengendali baharu: ?-> dan ??. Mereka boleh menyelesaikan dua jenis masalah masing-masing.

Bagaimana untuk menggunakan instanceof operator dalam java Bagaimana untuk menggunakan instanceof operator dalam java May 19, 2023 am 08:16 AM

Konsep 1. Operator ini digunakan untuk mengendalikan objek dan menyemak sama ada objek itu daripada jenis tertentu (jenis atau jenis antara muka). Format 2. Jika objek yang ditunjuk oleh pembolehubah di sebelah kiri kalkulator ialah objek kelas atau antara muka di sebelah kanan operator, hasilnya adalah benar. (Objectreferencevariable)instanceof(class/interfacetype) instance packagecom.verify_instanceof;publicclassTestInstanceOf{publicstaticvoidmain(String[]args){//Empat baris kod berikut digunakan untuk membuktikan: instanceof

instanceof operator di Jawa instanceof operator di Jawa Sep 01, 2023 pm 08:01 PM

Operator ini hanya digunakan untuk pembolehubah rujukan objek. Operator ini menyemak sama ada objek tergolong dalam jenis tertentu (jenis kelas atau jenis antara muka). Operator instanceof ditulis sebagai -(Objectreferencevariable)instanceof(class/interfacetype) Jika objek yang dirujuk oleh pembolehubah di sebelah kiri operator melepasi semakan IS-A bagi kelas/jenis antara muka di sebelah kanan, hasilnya akan menjadi benar. Berikut ialah contoh - Contoh Demonstrasi Langsung publicclassTest{ publicstaticvoidmain(Stringargs[]){&nbs

See all articles