认识引用类型和对象

什么是引用类型和对象?

1.引用类型的值(对象)是引用类型的一个实例,在ES中,引用类型是一种数据结构,用于将数据和功能组织在一起。引用类型有时候也被称为对象定义,因为他们描述的是一类对象所具有的属性和方法。

2.如前,对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数来创建的。 构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而定义的

var  person = new Object();

这行代码创建了Object引用类型的一个新实例,然后把该实例保存到变量person中,使用的构造函数是Object,它属于ES的原生引用类型,只为新对象定义了默认的属性和方法(此处涉及到原型继承)。其他原生引用类型还有Array,RegExp等;

基本引用类型概览:
1.Object是一个基础类型,其他所有类型都从Object继承了基本行为
2.Array类型是一组值的有序列表,同时还提供了操作和转换这些值的功能;
3.Date类型提供了有关日期和时间的信息,包括当前日期和时间以及相关的计算功能;
4.RegExp类型是ES支持正则表达式的一个借口,提供了最基本的和一些高级的正则表达式功能。
5.Function类型的实例是函数,因此函数也是对象,所以函数也也拥有方法。
6.基本包装类型也属于引用类型,其下包括三种:Boolean,Number,String,有了这三种基本包装类型,基本类型值可以被当作对象来访问。他们的共同特征是:
            每个包装类型都映射到同名的基本类型;
            在读取模式下访问基本类型值时,就会创建对应的基本包装类型的一个对象,从而方便数据操作。
            操作基本类型值的语句一经执行完毕,就会立即销毁新创建的包装对象。
7.单体内置对象:在所有代码执行之前,作用域中就已经存在连个内置对象,Global 和 math。Global不能直接被访问,但WEB浏览器实现了承担该角色的window对象,全局变量和函数都是Global对象的属性。Math对象提供了很多种方法,用于辅助完成复杂的计算


接下来将以Object类型,Array类型,Function类型为例进行说明

1.Object类型

创建方法有两种:
3.1.
var person = new Object();
    person.name = "nicholas";
    person.age = 29;
                              
3.2.
第二种称为 对象字面量表示法,是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。
var person = {name:"nicholas",
     age:29
}

使用对象字面量创建新对象,对象的属性名也可以使用字符串:
var person = {"name":"nicholas",
              "age":29
}

在通过对象字面量定义对象时,实际上不会调用Object构造函数
这是因为字面量法创建对象强调该对象仅是一个可变的hash映射,而不是从对象中提取的属性或方法。(???)

拓展:
结构上看,所有的数据(data)最终都可以分解成三种类型:
第一种类型是 标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。
第二种类型是 序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海"。
第三种类型是 映射(mapping),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"首都:北京"。


2.Array类型
创建数组的基本方式有两种。

1.使用Array构造函数:
var colors = new Array( );

如果预先知道数组要保存的项目数量,可以传递该数量进去,该值会自动编程length属性的值,例如
var colors = new Array(20);

也可以向构造函数传递数组中应该包含的项,例如:
var colors = new Array("red","blue","green");

在使用Array构造函数也可以省略new操作符,如下:
var colors = Array(20);

2.使用数组字面量表示法:
var colors = ["red","blue","green"];
var name = [];      //创建一个空数组
var values = [1,2];

3.Function 类型
函数实际上是对象,每个函数都是Function类型的实例,而且与其他引用类型一样具有属性和方法,由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。

1.除我们熟悉的两种函数定义方式外,还可通过Function 构造函数来定义函数,例如:
var sum = new Funtion("num1","num2","return  num1 + num2");//不推荐
从技术角度来讲,这是一个函数表达式,但是,这种语法会导致解析两次代码,第一次是解析常规的ES代码,第二次是解析传入构造函数的字符串。影响性能。

2.作为值的函数:
函数名本身就是变量,所以函数也可以作为值来使用,也就是说,不仅可以像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。例如:
function fn1( fn2,a){
return fn2(a);
}
function add10(num){
return num +10;
}
var result1 = fn1(add10,10);
alert(result1);//20


也可以从一个函数中返回另一个函数,假设有一个对象数组,根据某个对象属性对数组进行排序,
function fn1(propeytName){
return function (m,n){
var value1 = m[propertyName];
var value2 = n[propertyName];
if(value1 < value2){
return -1;
}else if(value1 > value2){
return 1;
}else{
return 0;
}
}
};
var data = [{name:"张三",age:28},{name:"李四", age:21} ];

data.sort(fn1(name));
alert(data[0].name); 

data.sort(fn(age));
aler(data[1].name);
sort方法:sort() 方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串Unicode码点。
语法:arrayObject.sort(sortby);参数sortby可选。规定排序顺序。必须是函数。
注:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。

关于函数更多方法与属性,大家可以深入了解。


                


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值