JavaScript中的引用类型

JavaScript中的引用类型

JavaScript中的数据类型有两种,基本类型与引用类型!基本类型主要包括Boolean、String、Number;引用类型包括Object、Array、Function、Date(常用的)。


引用类型

引用类型的值(对象)是引用类型的一个实例。在JS中,引用类型是一种数据结构,用于将数据和功能组织在一起。它也常被称为类,但这种称呼并不妥当。尽管JS从技术上讲是一门面向对象的语言,但是并不具备传统的面向对象语言所支持的类和接口等基本结构。引用类型有时候也能被称为对象定义,因为他们描述的是一类对象所具有的属性和方法。

Object类型

创建object类型实例有两种方式。第一种是使用new操作符后跟Object构造函数:

var person =new object();
person.name="bluce";
person.sex="man";
person.age=58;

第二种是使用对象字面量表示法,(Key:Value

var person ={
    name:'bluce',
    sex:'man',
    age:58
}

推荐使用第二种方式,简洁,代码量少,有一种封装数据的感觉。向函数传递大量参数的首选方式(前面博客都采用的这种方式)。

Array类型

Object类型是JS中最常用的数据类型,Array类型仅次之。Array类型有如下特性:

  • 数组的每一项可以保存类型的数据。{38,’bluce’,{name:’bluce’,sex:’man’}};
  • 数组长度是动态变化的,类似于java中的泛型
    同样创建数组也有两种方式,第一种是使用Array构造函数,代码如下:
var persons =new Array();
var persons=new Array(20);
var persons=new Array('bluce','james','jhon');

另外,在使用Array构造函数时也可以省略new操作符。省略操作符的结果和上面代码结果相同:

var persons = Array();
var persons = Array(20);
var persons = Array('bluce','james','jhon');

第二种是使用数组字面量表示法,数组由[]包裹,多个数据项之间以逗号隔开。

var players = [];
var players = ['kurry','kobe','james'];

索引与Java、C#等语言一样,从0开始。item=players[0];
Array 常用方法:

方法作用
push()添加数据至数组末尾,可以是任意多项;返回修改后数组长度
pop()移除数组末尾项,返回移除项;length-1
shift()移除数组首项,返回移除项;length-1
unshift()在数组前端添加任意多项,并返回修改后数组长度
reverse()重排序
sort()重排序
concat()根据传入参数重新构建数组
slice()分割数组
splice()
indexOf
lastIndexOf()
迭代方法every()、some()、map()、forEach()、filter()

方法有些多,后面总结自己常用的一些方法。

Function类型

JS中的函数实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定(函数无重载)。函数定义由三种方式:
第一种——函数声明

function sum(num1,num2){
    return num1+num2;
}

第二种是函数表达式,下段代码定义了变量sum并将其初始化为一个函数。

var sum = function(num1,num2){
    return num1+num2;
};

第三种是使用Function构造函数。Function构造函数可以接收任意数量的参数,但最后一个参数始终被看成是函数体,而前面的参数则枚举了新函数的参数,例如:

var sum=Function('num1','num2','return num1+num2');

不推荐第三种方式,但这种方式表明函数实际上就是对象。一二两种方式中函数声明用的多一些,函数表达式次之。

函数名仅仅是指向函数的指针,因此函数名与包含对象指针的其他变量没有什么不同,也就是说一个函数可能会有多个名字。使用不带圆括号的函数名是访问函数的指针,而非调用函数。例如:

function sum(num1,num2){
    return num1+num2;
} 
alert(sum(2,2));       //4

var anotherSum=sum;
alert(anotherSum(2,2));//4

sum=null;
alert(anotherSum(2,2));//4
函数没有重载

函数名是指向函数的指针,JS中没有函数重载的概念

function add(num){
    return num+10;
}

function add(num){
    return num+20;
}

var result=alert(add(10));    //30

上述代码声明了两个同名的函数,其结果是后面的函数覆盖了前面的函数,以上代码实质上等同与以下代码:

var add=function(num){
    return num+10;
};
add =function(num){
    return num+20;
};

var result=alert(add(10));      //30

add只是指针,重复声明只是改变了add指向的函数。

函数属性和方法

JS中函数是对象,因此函数也有属性和方法。每个函数都包含两个属性:length和prototype。其中,length属性表示函数希望接收的命名参数的个数。prototype(原型),后面重学js面向对象编程时再着重总结。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值