Den js-Typ, den Sie kennen müssen, und die Methode zur Beurteilung des Typs

Vorwort

jsIch glaube , dass die Art des Mediums ein Teil ist , der bekannt sein muss , sei es in der Entwicklung oder bei der Festigung des Fundaments . Und da jsim Prozess der Datenberechnung und des Datenvergleichs immer noch eine Datentypkonvertierung stattfindet, bereitet dieser unsichere Datentyp immer noch Kopfschmerzen. Aber auch wenn es Kopfschmerzen bereitet, jsdie Datenumwandlung ins Chinesische hat Regeln zu befolgen, hier sortiere ich jsdie Datentypen und Datentypumwandlungsregeln von den Grundlagen aus, einerseits um mein Gedächtnis zu vertiefen, andererseits, Ich hoffe, allen zu helfen.

Eingebaute Datentypen

Im Allgemeinen jswerden eingebaute Datentypen im Allgemeinen in zwei Kategorien unterteilt: grundlegende Datentypen und Referenzdatentypen

grundlegender Datentyp

  • nicht definiert
  • Null
  • boolesch
  • Schnur
  • Anzahl
  • Symbol
  • bigInt

Referenzdatentyp

  • Objekt
  • Array
  • RegExp
  • Datum
  • Mathematik
  • Funktion

Der Unterschied zwischen primitiven Datentypen und Referenzdatentypen

Basisdatentyp : Der Basisdatentyp wird im Stapelspeicher gespeichert, und wenn darauf verwiesen oder kopiert wird, wird eine vollständig gleiche Variable erstellt. Der belegte Speicherplatz ist klein und die Größe ist fest. Da es sich um häufig verwendete Daten handelt, werden sie im Stack gespeichert.

Referenzdatentyp : Der Anwendungsdatentyp wird im Haldenspeicher gespeichert, und der Zeiger auf die Adresse des Haldenspeichers wird im Stack gespeichert. Mehrere Referenzen zeigen auf dieselbe Heap-Speicheradresse. Der vom Referenzdatentyp belegte Platz ist in der Größe nicht festgelegt. Im Stapelspeicher gespeicherte Zeiger zeigen auf Heap-Speicheradressen. Wenn ein Wert eines Referenztyps benötigt wird, geht er zu der Adresse im Stack und findet dann die echten Daten über die Adresse.

Wie man den Datentyp beurteilt

Art der

Wird im Allgemeinen typeofverwendet, um den grundlegenden Datentyp zu beurteilen, außer nulldass der richtige Datentyp angezeigt werden kann

// number
typeof 1 
// boolean
typeof false
// string
typeof 'water'
// undefined
typeof undefined
// object
typeof null
复制代码

因为一些历史原因会把null判断为object,想知道原因的老铁可自行搜索查阅。而且当用typeof来判断引用类型的时候,除了函数会显示function外,其他的都会显示object。所以想要判断引用类型这个就不可以用了。

instanceof

instanceof可以正确的来判断对象的类型,因为内部使用的原理是通过判断对象的原型链中是不是能找到类型的prototype

[] instanceof Array 
function() {} instanceof Function
{} instanceof Object
复制代码

以上判断都为true,由此可见instanceof可以准确的判断出引用数据类型,但是不能正确判断出基础数据类型

constructor

1.constructor === Number
true.constructor === Boolean
'water'.constructor === String
[].constructor === Array
(function() {}).constructor === Function
{}.constructor === Object
复制代码

正常的都能都来判断出各自的类型,但是又一个例外情况,就是如果你手动修改了原型,那么这个方法就不能准确判断数据类型了。

比如:

function Fn() {}
Fn.prototype = new Array()
const func = new Fn()
f.constructor === Fn // false
复制代码

Object.prototype.toString.call

调用这个方法可以返回[Object xxx]的字符串,其中就可以通过xxx来判断各种的数据类型。

Object.prototype.toString({})       // "[object Object]"
Object.prototype.toString.call({})  // "[object Object]"
Object.prototype.toString.call(1)    // "[object Number]"
Object.prototype.toString.call('1')  // "[object String]"
Object.prototype.toString.call(true)  // "[object Boolean]"
Object.prototype.toString.call(function(){})  // "[object Function]"
Object.prototype.toString.call(null)   //"[object Null]"
Object.prototype.toString.call(undefined) //"[object Undefined]"
Object.prototype.toString.call(/123/g)    //"[object RegExp]"
Object.prototype.toString.call(new Date()) //"[object Date]"
Object.prototype.toString.call([])       //"[object Array]"
Object.prototype.toString.call(document)  //"[object HTMLDocument]"
Object.prototype.toString.call(window)   //"[object Window]"
复制代码

小结

由以上可以看出,不同的数据结构采用不同的检测方法,需要根据数据类型选择正确的判断方法才能正确的判断出数据的类型。大家可以用这些在写代码时经行判断数据类型。如果觉得对你有帮助,欢迎点赞!!!谢谢!

Ich denke du magst

Origin juejin.im/post/7079823629269073950
Empfohlen
Rangfolge