ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptの参照データ型とは何ですか

JavaScriptの参照データ型とは何ですか

青灯夜游
青灯夜游オリジナル
2021-11-19 16:55:476215ブラウズ

JavaScript では、参照データ型はデータと機能をまとめて編成するために使用されるデータ構造であり、クラスとも呼ばれます。参照型の値はメモリ (スタック メモリとヒープ メモリの両方) に格納されるオブジェクトであり、参照型の値は参照によってアクセスされます。

JavaScriptの参照データ型とは何ですか

このチュートリアルの動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。

データ型とは、プログラム内で保存および操作できる値のタイプを指します。各プログラミング言語には、サポートされるデータ型があります。テキストや数値など、異なるデータを保存するには、異なるデータ型が使用されます。 、画像など。

JavaScript のデータ型は、次の 2 つの型に分類できます。

  • 基本データ型 (値の型): 文字列、数値、ブール (ブール)、Null、未定義、シンボル;

  • 参照データ型: オブジェクト、配列、関数。

#JavaScript 参照データ型

参照型

ECMAScript では、参照型はデータと機能を一緒に編成するために使用されるデータ構造 (クラスとも呼ばれます)。

参照型の値は、メモリに格納されるオブジェクトです (スタック メモリとヒープ メモリの両方に保存されます)。 JavaScript ではメモリ内の場所に直接アクセスできないため、オブジェクトを操作するときは、実際には実際のオブジェクトではなく、オブジェクトへの参照を操作することになります。参照型の値は参照によってアクセスされます。

オブジェクト タイプ

オブジェクト インスタンスを作成するには 2 つの方法があります。 1 つ目は、new 演算子の後に Object コンストラクターを使用する方法です (例:

var person = new Object();
 person.name = "Nicholas";
 person.age = 29;

)。もう 1 つの方法は、オブジェクト リテラル表記を使用することです。例:

var person = {
 name : "Nicholas",
 age ; 29
 }

注: オブジェクト リテラルを通じてオブジェクトを定義する場合、Object コンストラクターは実際には呼び出されません。

#配列タイプ

配列を作成するには 2 つの基本的な方法があります。 1 つ目は、配列コンストラクターを使用する方法です。例:

var colors = new Array();

2 つ目の基本的な方法は、配列リテラル表現を使用することです。配列リテラルは、配列項目を含む角括弧のペアで表されます。複数の配列項目はカンマで区切られます。例:

var colors = ["red","blue","green"];

配列の検出

インスタンス オブ オペレーション演算子は、グローバル実行環境が 1 つだけ存在することを前提としています。この問題を解決するために、ECMAScript 5 では Array.isArray() メソッドが追加されました。このメソッドの目的は、値が作成されたグローバル実行コンテキストに関係なく、値が配列であるかどうかを最終的に判断することです。

変換メソッド

##toLocaleString()、toString()、および valueOf() メソッド

すべてのオブジェクトには toLocaeString( ) が必要です。 toString() メソッドと valueOf() メソッド。 配列の toString() メソッドを呼び出すと、カンマ区切りの文字列が返されます;
toLocaleString() の呼び出しは toString() と同じですが、文字列は実行環境の領域に対応します;

valueOf() の呼び出し 返されるものは依然として配列です。


join() メソッド

join() メソッドは、区切り文字として使用される文字列というパラメータを 1 つだけ受け取り、すべての配列項目を含む文字列を返します。

スタック メソッド (後入れ先出し)

ECMAScript は、スタックのような動作を実現するために、配列専用の Push() メソッドと Pop() メソッドを提供します。 Push() メソッドは、任意の数のパラメーターを受け入れ、それらを配列の末尾に 1 つずつ追加し、配列の変更された長さを返すことができます。 Pop() メソッドは、配列の末尾から最後の項目を削除し、配列の長さを減分して、削除された項目を返します。

Queue メソッド (先入れ先出し)

shift() は、配列の長さを削減しながら、配列内の最初の項目を削除して返すことができます。 1つ。 SHIFT() メソッドと Push() メソッドを組み合わせると、配列をキューのように使用できます。 ECMAScript は、配列の unshift() メソッドも提供します。名前が示すように、unshift() はshift() の逆のことを行います。配列の先頭に任意の数の項目を追加し、新しい配列の長さを返します。


メソッドの並べ替え

reverse() メソッドは、配列項目の順序を逆にします。 デフォルトでは、sort() メソッドは配列項目を昇順に並べ替えます。つまり、最小値が先頭にあり、最大値が最後にあります。並べ替えを実装するには、sort() メソッドで各配列項目の toString() 変換メソッドを使用し、結果の文字列を比較して並べ替え方法を決定します。この並べ替え方法は多くの場合最適ではないため、sort() メソッドは比較関数をパラメータとして受け取り、どの値がどの値の前に来るかを指定できます。


reverse() メソッドと sort() メソッドの戻り値は、ソートされた配列です。

操作方法

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

Date类型

创建日期对象,使用new操作符和Date构造函数即可:
var now = new Date();
在调用Date构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。 为了可以接受表示日期的字符串参数,ECMAScript提供了两个方法:Date.parse()和Date.UTC()。
ECMAScript添加了Date.now()方法,返回表示调用这个方法时的日期和时间的毫秒数。

继承的方法

Date类型也重写了toLocaleString()、toString()和valueOf()方法。
toLocaleString()方法会按照与浏览器相适应的格式返回日期与时间,而toString()方法则通常返回带有时区信息的日期和时间。至于valueOf()方法,则根本不返回字符串,而是返回日期的毫秒表示。

Function类型

函数实际上是对象,函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。每个函数都是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运算符的作用是创建一个对象实例。这个对象可以是用户自定义的,也可以是带构造函数的一些系统自带的对象。如果 new 表达式之后的构造函数返回的不是JavaScript内置的引用对象(Object,String等)new会创建一个匿名对象并返回;如果是内置引用对象或者原始类型就会覆盖匿名对象。(无 return 时其实为 return 原始类型 undefined)

构造函数

构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而定义的。

JavaScript中object和Object的区别

object

使用typeof检测数据类型的时候,只要检查的变量是一个对象,或者是null,那么它就会返回object。

Object

Object 是 JavaScript 中一个重要的对象,其它对象都是基于它的,包括你创建的函数。

typeof 操作符和 instanceof 操作符的区别

确定一个值是哪种基本类型可以使用 typeof操作符,而确定一个值是哪种引用类型可以使用instanceof操作符。

function和Function

ECMAScript 的Function实际上就是一个功能完整的对象。而function这个关键字是用来创建所有对象的构造函数或者使用关键字来定义普通函数的类和对象,var a=new function(){}实际上是用构造函数的方法创建了一个匿名对象的实例,而并不是系统内置对象Function的实例。所以a instanceof Function返回false,typeof返回"object"。

什么时候typeof返回"function"呢?

function a (){ }
 //undefined
 typeof a
 //"function"

【推荐学习:javascript高级教程

以上がJavaScriptの参照データ型とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。