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

转换方法

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"

转载于:https://www.cnblogs.com/wzp-monkey/p/9908013.html

JavaScript引用数据类型相关推荐

  1. JavaScript 引用数据类型

    JavaScript 引用数据类型 对象(Object) 对象的创建 使用{}创建 使用Object创建 使用Function创建 使用class关键字 对象的原型模型 数组(Array) 数组的定义 ...

  2. JavaScript中的基本数据类型与引用数据类型

    JavaScript中的基本数据类型与引用数据类型 转载自:https://www.cnblogs.com/c2016c/articles/9328725.html 1.栈(stack)和堆(heap ...

  3. JavaScript的数据类型、null 和undefined、原始数据类型和引用数据类型等JavaScript基础知识总结

    一.JavaScript里有哪些数据类型,解释清楚null 和undefined,解释清楚原始数据类型和引用数据类型.比如讲一下1 和Number(1)的区别 数据类型: undefined,没有定义 ...

  4. 惊呼!JavaScript基本数据类型和引用数据类型详解

    前言 我是歌谣 知其然知其所以然 人人都有一个大厂梦 希望通过自己的一个总结分享可以给予大家带来帮助和提升. 本期知识点 JavaScript中基本数据类型和引用数据类型 目标 理解基本数据类型和引用 ...

  5. Javascript第六章基本数据类型和引用数据类型第三课

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  6. 【JavaScript笔记 · 基础篇(五)】Array全家桶(引用数据类型中的数组 / Array对象 / Array.prototype)

    文章目录 一. 引用数据类型中的数组 1.1 概述 1.2 初始化 1.2.1 字面量 1.2.2 构造函数模式 1.3 访问 1.4 length属性 1.5 数组遍历 1.6 类数组对象 1.6. ...

  7. JavaScript数据类型基本数据类型与引用数据类型的区别

    JavaScript数据类型 1.JavaScript判断数据类型 typeof操作符 使用typeof操作符可以返回变量的数据类型 typeof操作符有带括号和不带括号两种用法 typeof (变量 ...

  8. 【JavaScript】关于基本数据类型和引用数据类型

    基本数据类型 JavaScript的基本数据类型有: String-字符串类型 Number-整形-----NaN也属于数值型 Boolean-布尔类型 null undefined-undefine ...

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

    1.基本数据类型和引用数据类型 ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型. 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象. 当我们把变量赋值给一个变 ...

最新文章

  1. 视觉(12)Active Vision Based Robot Navigation System
  2. ansible普通用户部署K8s要点
  3. Intellij 14快捷键
  4. Codeforces Round #250 (Div. 2)—A. The Child and Homework
  5. es5如何实现promise_ES5实现Promise(1) - 事件循环机制
  6. Mysql学习总结(22)——Mysql数据库中制作千万级测试表
  7. 第8-9讲 视觉里程计2
  8. SHELL脚本-猜数字游戏
  9. android 开发按键精灵,安卓按键精灵实现后台
  10. python海龟库命令_turtle库常用命令
  11. python订单详细教程-python实现京东订单推送到测试环境,提供便利操作示例
  12. k8s 集群全部更换机器 IP
  13. 分布式锁1 Java常用技术方案
  14. nginx的反向代理proxy_pass指令
  15. sign签名验签方案及代码
  16. 排序算法(希尔排序)
  17. 心率检测仪的设计与实现
  18. Beyond compare用法详解
  19. iview card布局
  20. tensorflow学习笔记

热门文章

  1. 趣味菜单C语言,趣味C语言
  2. 能买到大学考的英语计算机证吗,大学生不要盲目考证书,真正的硬通货是它,适用于所有专业的学生...
  3. 工作组win7计算机无法访问,win7系统没有权限访问工作组计算机的解决方法
  4. [译]CSS3实现柱状图的3D立体动画效果
  5. jdk1.8 HashMap ConcurrentHashMap
  6. Python代码规范(PEP8)问题及解决
  7. php 5.3新增的闭包语法介绍function() use() {}
  8. Google 视频编码格式 VP9 究竟厉害在哪里
  9. Java 语言基础(一)
  10. CentOS 7下安装集群HBase1.2.4