首頁 >web前端 >js教程 >javascript的引用資料型別是什麼

javascript的引用資料型別是什麼

青灯夜游
青灯夜游原創
2021-11-19 16:55:476256瀏覽

在javascript中,引用資料類型是一種資料結構,用於將資料和功能組織在一起;它也常被稱為類別。引用類型的值是保存在記憶體中的物件(同時保存在堆疊記憶體和堆疊記憶體中);引用類型的值是按引用存取的。

javascript的引用資料型別是什麼

本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

資料類型指的是可以在程式中儲存和操作的值的類型,每種程式語言都有其支援的資料類型,不同的資料類型用來儲存不同的數據,例如文字、數值、圖像等。

JavaScript 中的資料類型可以分為兩種類型:

  • 基本資料類型(值類型):字串(String)、數字(Number)、布爾(Boolean)、空(Null)、未定義(Undefined)、Symbol;

  • 引用資料型態:物件(Object)、陣列(Array)、函數(Function)。

JavaScript引用資料型別

#引用型別

在ECMAScript中,參考型別是一種資料結構,用於將資料和功能組織在一起(它也常被稱為類別)。

引用類型的值是保存在記憶體中的物件(同時保存在堆疊記憶體和堆疊記憶體中)。 JavaScript 不允許直接存取記憶體中的位置,因此在操作物件時,實際上是操作的物件的參考而不是實際的物件。引用類型的值按引用存取。

Object類型

建立Object實例的方式有兩種。第一種是使用new運算元後面接著Object建構函數,例如;

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

另一種方式是使用物件字面量表示法。例如:

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

注意:在透過物件字面量定義物件時,實際上不會呼叫Object建構函數。

Array型別

建立陣列的基本方式有兩種。第一種是使用Array建構函數,例如:

var colors = new Array();

第二種基本方式是使用陣列字面量表示法。陣列字面量由一對包含陣列項目的方括號表示,多個陣列項目之間以逗號隔開,例如:

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

偵測陣列

instanceof運算符假定只有一個全域執行環境。為了解決只有個問題,ECMAScript 5新增了Array.isArray()方法。這個方法的目的是最終確定某個值到底是不是數組,而不管它是在哪個全域執行環境中建立的。

轉換方法

toLocaleString()、toString()和valueOf()方法

所有物件都具有toLocaeString( )、toString()和valueOf()方法。
呼叫陣列的toString()方法會傳回以逗號分隔的字串;
呼叫toLocaleString( )和toString()一樣,但是該字串與執行環境的地區對應;
呼叫valueOf()傳回的還是數組。

join()方法

join()方法只接受一個參數,即用作分隔符號的字串,然後傳回包含所有陣列項目的字串。

堆疊方法(後進先出)

ECMAScript為陣列特別提供了push()和pop()方法,以便實作類似堆疊的行為。 push()方法可以接受任意數量的參數,把他們逐一加到數組末尾,並返回修改後數組的長度。 pop()方法則從陣列結尾一處最後一項,減少陣列的length值,然後傳回移除的項。

佇列方法(先進先出)

shift()能夠移除陣列中的第一項並傳回該項,同時將陣列長度減一。結合使用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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn