JavaScript引用数据类型

JavaScript引用数据类型

引用类型

在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起(它也常被称为类)。

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()方法。这个方法的目的是最终确定某个值到底是不是数组,而不管它是在哪个全局执行环境中创建的。

转换方法

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

所有对象都具有toLocalString()、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类型也重写了toLocalString()、toString()和valueOf()方法。

toLocalString()方法会按照与浏览器相适应的格式返回日期与时间,而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"

原文地址:https://www.cnblogs.com/wzp-monkey/p/9908013.html

时间: 2024-11-06 15:38:38

JavaScript引用数据类型的相关文章

JavaScript系列----数据类型以及传值和传引用

1.简单数据类型 在JavaScript中简单数据类型分为5种.分别为 Undefined, Null,Boolean,Number,String. Undefined类型Undefined类型只有一个值,即特殊的undefined.在使用var对变量声明的时候,变量的值即被初始化为undefined.在使用typeof求得数据类型的时候,对于未声明的变量返回的总是undefined. Null类型Null也只有一个值得数据类型,其实质是一个指向空对象的指针.所以使用typeof操作的时候返回的

JavaScript中基本数据类型和引用数据类型的区别

1.基本数据类型和引用数据类型 ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型. 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象. 当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值. 2.常见的基本数据类型: Number.String .Boolean.Null和Undefined.基本数据类型是按值访问的,因为可以直接操作保存在变量中的实际值.示例: var a = 10; var b = a; b = 20;

javascript实现引用数据类型的深拷贝和浅拷贝详解

关于引用类型值的详解,请看另一篇随笔 https://www.cnblogs.com/jinbang/p/10346584.html 深拷贝和浅拷贝,也就是引用数据类型栈和堆的知识点.深浅拷贝的原型都是Object,深拷贝指向的栈内存不一样,浅拷贝指向的栈内存一样): 如何区分深拷贝与浅拷贝,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B没有发生变化,说明是深拷贝.如果B也跟着发生了变化,说明是浅拷贝. let obj = { name: "jin", arr: [&quo

JavaScript的数据类型都有什么? JavaScript中 toStirng() 与 Object.prototype.toString().call()

JavaScript的数据类型都有什么? (via  BAT互联网公司2014前端笔试面试题:JavaScript篇  http://www.sxt.cn/u/756/blog/4508) 基本数据类型:String,boolean,Number,Undefined, Null 引用数据类型: Object(Array,Date,RegExp,Function) 疑问:这些基本的数据类型的值都是常量,而常量是没有方法的,为什么能够调用方法呢?答案是这样的,五种基本类型除了null.undefin

【JavaScript基础】在写冒泡排序时遇到的JavaScript基础问题:JavaScript的数据类型和变量赋值时的原理

写冒泡排序时,遇到一个问题: function bubbleSort(arr){ var temp = 0; console.log("传入的数组:"); console.log(arr); for(var i = 0;i<arr.length;i++){ //循环arr.length-1次 console.log("外层第"+i+"次循环===============start"); for(var j = 0;j<arr.leng

请简述javascript的数据类型种类?

答案: javascript里的数据类型分为基本数据类型 和 引用数据类型两种, 其中, 基本数据类型包括5个:数值,字符串,布尔,null, undefined 引用数据类型包括3个:array,function,object 请简述javascript的数据类型种类?,布布扣,bubuko.com

JavaScript基本数据类型

JavaScript基本数据类型 在JavaScript种一共有6种数据类型:Null.Undefined.Boolean.String.Number.Object.其中Object是一种复杂数据类型. 基本数据类型:Null.Undefined.Boolean.String.Number. 引用数据类型:Object.Array.Date.RegExp. 本文只对基本数据类型做一些介绍,引用数据类型不作介绍. Null和Undefined 两种数据类型,看起来有些相似,其实他们的逻辑含义是完全

JS-安全检测JavaScript基本数据类型和内置对象的方法

前言:在前端开发中经常会需要用到检测变量数据类型的需求,比如:判断一个变量是否为undefined或者null来进行下一步的操作,今天在阅读“编写高质量代码-改善JavaScript程序的188个建议”这本书的时候看到这个比较好的方法,在此小记一笔以备在以后的开发中使用. 1:如下所示是我编写的演示代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>I

js基础之引用数据类型

引用类型数据: 也就是对象类型Object type,比如:Object .Array .Function .Data等. javascript的引用数据类型是保存在堆内存中的对象. 与其他语言的不同是,你不可以直接访问堆内存空间中的位置和操作堆内存空间.只能操作对象在栈内存中的引用地址. 所以,引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址.通过这个引用地址可以快速查找到保存中堆内存中的对象. var obj1 = new Object(); var obj2 = obj1; o