JavaScript에서 참조 데이터 유형은 데이터와 기능을 함께 구성하는 데 사용되는 데이터 구조입니다. 클래스라고도 합니다. 참조 유형의 값은 메모리(스택 메모리와 힙 메모리 모두)에 저장된 객체입니다. 참조 유형의 값은 참조를 통해 액세스됩니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.
데이터 유형은 프로그램에서 저장하고 조작할 수 있는 값의 유형을 나타냅니다. 각 프로그래밍 언어에는 지원되는 데이터 유형이 있습니다. 텍스트, 값, 이미지 등과 같은 다양한 데이터 유형을 저장하는 데 사용됩니다.
JavaScript의 데이터 유형은 두 가지 유형으로 나눌 수 있습니다.
기본 데이터 유형(값 유형): 문자열, 숫자, 부울, Null, 정의되지 않음( 정의되지 않음), 기호
참조 데이터 유형: 개체, 배열, 함수.
ECMAScript에서 참조 유형은 데이터와 기능을 함께 구성하는 데 사용되는 데이터 구조입니다(클래스라고도 함).
참조 유형의 값은 메모리에 저장된 객체입니다(스택 메모리와 힙 메모리 모두에 저장됨). JavaScript는 메모리 위치에 대한 직접 액세스를 허용하지 않으므로 객체에 대해 작업을 수행할 때 실제로는 실제 객체가 아닌 객체에 대한 참조에 대해 작업을 수행하게 됩니다. 참조 유형의 값은 참조로 액세스됩니다.
객체 인스턴스를 만드는 방법에는 두 가지가 있습니다. 첫 번째는 new 연산자와 Object 생성자를 사용하는 것입니다(예:
var person = new Object(); person.name = "Nicholas"; person.age = 29;
). 다른 하나는 객체 리터럴 표기법을 사용하는 것입니다. 예:
var person = { name : "Nicholas", age ; 29 }
참고: 객체 리터럴을 통해 객체를 정의할 때 객체 생성자는 실제로 호출되지 않습니다.
배열을 만드는 기본 방법에는 두 가지가 있습니다. 첫 번째는 배열 생성자를 사용하는 것입니다. 예:
var colors = new Array();
두 번째 기본 방법은 배열 리터럴 표기법을 사용하는 것입니다. 배열 리터럴은 배열 항목을 포함하는 한 쌍의 대괄호로 표시되며 여러 배열 항목은 쉼표로 구분됩니다. 예:
var colors = ["red","blue","green"];
instanceof 연산자는 전역 실행 환경이 하나만 있다고 가정합니다. 이 문제를 해결하기 위해 ECMAScript 5에서는 Array.isArray() 메서드를 추가했습니다. 이 메서드의 목적은 값이 생성된 전역 실행 컨텍스트에 관계없이 값이 배열인지 여부를 궁극적으로 확인하는 것입니다.
모든 객체에는 toLocaeString(), toString() 및 valueOf() 방법이 있습니다.
배열의 toString() 메서드를 호출하면 쉼표로 구분된 문자열이 반환됩니다.
toLocaleString() 호출은 toString()과 동일하지만 문자열은 실행 환경의 영역에 해당합니다.
valueOf() 호출은 여전히 반환됩니다. 배열.
join() 메서드는 구분 기호로 사용되는 문자열인 하나의 매개 변수만 허용하고 모든 배열 항목이 포함된 문자열을 반환합니다.
ECMAScript는 스택과 같은 동작을 달성하기 위해 배열에 특별히 push() 및 pop() 메서드를 제공합니다. push() 메소드는 원하는 수의 매개변수를 허용하고, 이를 배열의 끝에 하나씩 추가하고, 수정된 배열 길이를 반환할 수 있습니다. pop() 메서드는 배열 끝에서 마지막 항목을 제거하고 배열 길이를 줄인 다음 제거된 항목을 반환합니다.
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
创建日期对象,使用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高级教程】
위 내용은 자바스크립트의 참조 데이터 유형은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!