概述
什么是引用类型和对象?
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 的值。
关于函数更多方法与属性,大家可以深入了解。
最后
以上就是跳跃小熊猫为你收集整理的认识引用类型和对象的全部内容,希望文章能够帮你解决认识引用类型和对象所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复