Heim > Artikel > Web-Frontend > Was ist der Referenzdatentyp von Javascript?
In JavaScript ist ein Referenzdatentyp eine Datenstruktur, die zum gemeinsamen Organisieren von Daten und Funktionen verwendet wird; sie wird oft auch als Klasse bezeichnet. Werte von Referenztypen sind im Speicher gespeicherte Objekte (sowohl im Stapelspeicher als auch im Heapspeicher); auf Werte von Referenztypen wird per Referenz zugegriffen.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, JavaScript-Version 1.8.5, Dell G3-Computer.
Datentyp bezieht sich auf die Art des Werts, der im Programm gespeichert und manipuliert werden kann. Jede Programmiersprache hat ihre unterstützten Datentypen, um unterschiedliche Daten zu speichern, wie z. B. Text, numerische Werte, Bilder usw.
Datentypen in JavaScript können in zwei Typen unterteilt werden:
Grundlegende Datentypen (Werttypen): Zeichenfolge, Zahl, Boolescher Wert, Null, Undefiniert (Undefiniert), Symbol;
Referenzdatentypen: Objekt, Array, Funktion.
In ECMAScript ist ein Referenztyp eine Datenstruktur, die zum gemeinsamen Organisieren von Daten und Funktionen verwendet wird (er wird oft auch als Klasse bezeichnet).
Der Wert des Referenztyps ist ein im Speicher gespeichertes Objekt (sowohl im Stapelspeicher als auch im Heapspeicher). JavaScript ermöglicht keinen direkten Zugriff auf Speicherorte im Speicher. Wenn Sie also ein Objekt bearbeiten, bearbeiten Sie tatsächlich eine Referenz auf das Objekt und nicht das eigentliche Objekt. Auf Werte von Referenztypen wird per Referenz zugegriffen.
Es gibt zwei Möglichkeiten, eine Objektinstanz zu erstellen. Die erste besteht darin, den neuen Operator zu verwenden, gefolgt vom Objektkonstruktor, zum Beispiel
var person = new Object(); person.name = "Nicholas"; person.age = 29;
Die andere besteht darin, die Objektliteralnotation zu verwenden. Zum Beispiel:
var person = { name : "Nicholas", age ; 29 }
Hinweis: Beim Definieren eines Objekts über ein Objektliteral wird der Objektkonstruktor nicht tatsächlich aufgerufen.
Es gibt zwei grundlegende Möglichkeiten, ein Array zu erstellen. Die erste besteht darin, den Array-Konstruktor zu verwenden, zum Beispiel:
var colors = new Array();
Die zweite grundlegende Möglichkeit besteht darin, die Array-Literal-Notation zu verwenden. Ein Array-Literal wird durch ein Paar eckiger Klammern dargestellt, die Array-Elemente enthalten, wobei mehrere Array-Elemente durch Kommas getrennt sind, zum Beispiel:
var colors = ["red","blue","green"];
Der Instanzoperator geht davon aus, dass es nur eine globale Ausführungsumgebung gibt. Um dieses Problem zu lösen, hat ECMAScript 5 die Methode Array.isArray() hinzugefügt. Der Zweck dieser Methode besteht darin, letztendlich zu bestimmen, ob ein Wert ein Array ist, unabhängig vom globalen Ausführungskontext, in dem er erstellt wurde.
Alle Objekte verfügen über die Methoden toLocaeString(), toString() und valueOf().
Der Aufruf der toString()-Methode eines Arrays gibt einen durch Kommas getrennten String zurück.
Der Aufruf von toLocaleString() ist derselbe wie toString(), aber der String entspricht dem Bereich der Ausführungsumgebung.
Der Aufruf von valueOf() gibt weiterhin zurück ein Array.
join()-Methode akzeptiert nur einen Parameter, nämlich eine Zeichenfolge, die als Trennzeichen verwendet wird, und gibt eine Zeichenfolge zurück, die alle Array-Elemente enthält.
ECMAScript bietet push()- und pop()-Methoden speziell für Arrays, um ein stapelähnliches Verhalten zu erreichen. Die Methode push() kann eine beliebige Anzahl von Parametern akzeptieren, diese einzeln am Ende des Arrays hinzufügen und die geänderte Länge des Arrays zurückgeben. Die Methode pop() entfernt das letzte Element vom Ende des Arrays, verringert die Länge des Arrays und gibt das entfernte Element zurück.
shift() entfernt das erste Element im Array und gibt es zurück, während die Array-Länge um eins reduziert wird. Durch die Kombination der Methoden „shift()“ und „push()“ können Sie Arrays wie Warteschlangen verwenden.
ECMAScript bietet auch eine unshift()-Methode für Arrays. Wie der Name schon sagt, macht unshift() das Gegenteil von shift(): Es fügt eine beliebige Anzahl von Elementen am Anfang eines Arrays hinzu und gibt die Länge des neuen Arrays zurück.
reverse()-Methode kehrt die Reihenfolge der Array-Elemente um.
Standardmäßig sortiert die Methode sort() die Array-Elemente in aufsteigender Reihenfolge – das heißt, der kleinste Wert steht vorne und der größte Wert am Ende. Um die Sortierung zu implementieren, verwendet die Methode sort() die Konvertierungsmethode toString() jedes Array-Elements und vergleicht dann die resultierenden Zeichenfolgen, um zu bestimmen, wie sortiert werden soll. Da diese Sortiermethode in vielen Fällen nicht optimal ist, kann die Methode sort() eine Vergleichsfunktion als Parameter erhalten, um anzugeben, welcher Wert vor welchem Wert steht.
Der Rückgabewert der Methoden reverse() und sort() ist das sortierte Array
concat()方法可以基于当前数组中的所有项创建一个新数组。
slice()方法能够基于当前数组中的一或多个项创建一个新数组。slice()方法可以接受一或者两个参数,即要返回项的起始和结束位置。(不会改变原数组)
splice()方法主要是向数组的中部插入值。(删除、插入、替换)该方法改变原数组的值。
ECMAScript为数组实例添加了两个位置方法:indexOf()和lastindexOf()这两个方法都返回要查找的项在数组中的位置,或者在没有找到的情况下返回-1。这两个方法都接受两个参数:要查找的项和表示查找起点位置的索引(可选的)。
ECMAScript为数组定义了五个迭代方法:
every():对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true。
filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
some():对数组中的每一项运行给定函数,如果该函数对任一项返回 true,则返回 true。
ECMAScript 5 还新增了两个归并数组的方法:reduce()和 reduceRight()。这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。
使用 reduce()和reduceRight()方法可以执行求数组中所有值之和的操作,比如:
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
return prev + cur;
});
alert(sum); //15
创建日期对象,使用new操作符和Date构造函数即可:
var now = new Date();
在调用Date构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。 为了可以接受表示日期的字符串参数,ECMAScript提供了两个方法:Date.parse()和Date.UTC()。
ECMAScript添加了Date.now()方法,返回表示调用这个方法时的日期和时间的毫秒数。
Date类型也重写了toLocaleString()、toString()和valueOf()方法。
toLocaleString()方法会按照与浏览器相适应的格式返回日期与时间,而toString()方法则通常返回带有时区信息的日期和时间。至于valueOf()方法,则根本不返回字符串,而是返回日期的毫秒表示。
函数实际上是对象,函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。
函数通常是使用函数声明语法定义的:(函数声明提升)
function sum (sum1,sum2) { return sum1 + sum2; }
还有一种方式,使用函数表达式定义函数:
var sum = function(sum1,sum2) { return sum1 +sum2 ; };
注意:要访问函数指针而不执行函数的话,必须去掉函数名后面的圆括号。
在函数内部,有两个特殊的对象:arguments和this。arguments是一个类数组对象,包含着传入函数中的所有参数。该对象有一个属性,该属性有一个指针,指向拥有这个arguments对象的函数。this引用的是函数据以执行的环境对象。(当在网页的全局作用域中调用函数时,this对象引用的就是window)
每个函数都包含两个属性:length和prototype。
length属性表示函数希望接收的命名参数的个数。
对于ECMAScript中的引用类型而言,prototype是保存它们所有实例方法的真正所在。prototype属性是不可枚举的,所以使用for-in无效。
每个函数都包含两个非继承而来的方法:apply()和call()
这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。作用实例:1.传递参数 2.扩充函数赖以运行的作用域
EAMAScript还定义了一个方法:bind()
这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。
每个函数继承的toLocaleString()、toString()和valueOf()方法始终都返回函数的代码。
对象是某个特定引用类型的实例。新对象是使用new操作符后跟一个构造函数来创建的。
new运算符的作用是创建一个对象实例。这个对象可以是用户自定义的,也可以是带构造函数的一些系统自带的对象。如果 new 表达式之后的构造函数返回的不是JavaScript内置的引用对象(Object,String等)new会创建一个匿名对象并返回;如果是内置引用对象或者原始类型就会覆盖匿名对象。(无 return 时其实为 return 原始类型 undefined)
构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而定义的。
使用typeof检测数据类型的时候,只要检查的变量是一个对象,或者是null,那么它就会返回object。
Object 是 JavaScript 中一个重要的对象,其它对象都是基于它的,包括你创建的函数。
确定一个值是哪种基本类型可以使用 typeof操作符,而确定一个值是哪种引用类型可以使用instanceof操作符。
ECMAScript 的Function实际上就是一个功能完整的对象。而function这个关键字是用来创建所有对象的构造函数或者使用关键字来定义普通函数的类和对象,var a=new function(){}实际上是用构造函数的方法创建了一个匿名对象的实例,而并不是系统内置对象Function的实例。所以a instanceof Function返回false,typeof返回"object"。
什么时候typeof返回"function"呢?
function a (){ } //undefined typeof a //"function"
【推荐学习:javascript高级教程】
Das obige ist der detaillierte Inhalt vonWas ist der Referenzdatentyp von Javascript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!