JavaScript引用类型详解:对象、数组及其核心方法
本文深入解析JavaScript中的引用类型,重点讲解对象与数组的创建及操作。内容涵盖Object和Array的基础用法,详细阐述数组的栈与队列操作、排序、切片、拼接及位置查找方法,并介绍every、filter、map等迭代器与reduce归并器的使用场景,帮助开发者掌握JS数据结构的处理技巧。
引用类型概述
引用类型
引用类型是一种数据结构,旨在将数据和相关功能整合在一起。虽然它常被称为类,但这种叫法并不准确。尽管ECMAScript在技术层面属于面向对象语言,它却缺乏传统面向对象语言中类和接口等基础结构。由于引用类型描述了一类对象共有的属性和方法,因此有时也被称为对象定义。
前文已提及,引用类型的值即为对象。在ECMAScript中,引用类型是用于组织数据和功能的数据结构,而具体的对象则是某个特定引用类型的实例。
var a=new Object();
对象与数组基础
上述代码声明了一个类型为Object的实例,并将其赋值给变量a。这意味着变量a并不直接包含该实例,而是保存指向该实例的指针。
对于Object类型,通常采用对象字面量语法来创建实例,例如var a={name:"Nick",age:20}。这种方式在视觉上提供了封装感。访问对象属性时,可以使用点表示法或方括号表示法,其中a.name与a["name"]等价,需注意方括号内的"name"必须是字符串形式。
对于Array类型,可以使用数组字面量语法进行创建。
针对Array类型,可以通过修改length属性来改变数组长度,这会导致从数组末尾添加或移除元素。
判断一个值是否为数组的方法是使用Array.isArray(value)。
转换方法包括:toString(),它将数组转换为以逗号分隔各项的字符串;valueOf(),它返回数组本身;toLocaleString(),其具体行为可通过示例演示。
var p1={
toString:function(){return "guo";},
toLocaleString:function(){return "yuzhe";}
}
var p2={
toString:function(){return "song";},
toLocaleString:function(){return "hap";}
}
var p=[p1,p2];
alert(p); //guo,song
alert(p.toLocaleString()); //yuzhe,hap
数组转换与栈队列操作
可以看出,alert在输出前会隐式调用toString()方法。此外,还有join()方法,它使用指定的分隔符将数组项连接成字符串,若未设置参数,默认分隔符为逗号。
栈操作方法包括:push(),用于在数组末尾添加项并返回新长度;pop(),用于从末尾删除项并返回被删除的项。
队列操作方法包括:shift(),用于移除并返回数组第一项;unshift(),用于在数组开头添加项并返回新长度。
数组重排序方法
重排序方法(返回值为数组):
reverse(),用于反转数组顺序,即a[length-1]=a[0]。
sort(),默认情况下按ASCII码进行升序排序,而非数值大小比较。因此,若需按数值大小排序,需要传入自定义比较函数。
function compare(no1,no2){
if(no1<no2){
return -1;}
else if(no1>no2){
return 1;}
else{
return 0;}
}
var a=[1,2,3,4,6,5];
a.sort(compare);
alert(a)
若希望实现降序效果,只需反转比较函数中的if语句逻辑即可。
数组切片与拼接操作
操作方法:
concat(),该方法会创建原数组的一个副本,对原数组无影响,其作用是将传入的参数添加到数组末尾。
slice(),该方法会创建副本,接受1个或2个参数(分别表示返回项的起始位置和结束位置,不包含结束位置)。若只提供一个参数,则返回从指定位置到结尾的所有项。若参数为负数,则结果为length+arguments;若结束位置小于起始位置,则返回空数组。
splice():1.删除方法,指定两个参数,分别为要删除的第一项位置和删除的项数。
2.插入方法,指定三个参数,分别为起始位置、0(表示要删除的个数)以及要插入的项。
3.替换方法,指定三个参数,分别为起始位置、要删除的个数以及要插入的项。
插入或替换操作的位置均从起始位置开始计算。
数组位置查找
位置方法:
indexOf(),返回要查找项的数组下标,若未找到则返回-1。参数包括要查找的项以及可选的查找起点索引。
lastIndexOf(),这是indexOf()的逆序版本。
数组迭代与归并方法
迭代方法:
这些方法接收2个参数:要运行的函数以及可选的作用域。传入这些方法的函数需要三个参数:item(数组项的值)、index(该项的位置)和array(数组对象本身)。
every(),对数组中的每一项运行给定函数,若每一项都返回true,则最终返回true。
filter(),返回由那些会返回true的项组成的新数组。
forEach(),对数组中的每一项运行给定函数,该方法无返回值。
map(),返回每次函数执行结果组成的新数组。
some(),若有一项返回true,则最终返回true。
<script>
var a=[1,2,3,4];
var b=a.every(function(item,index,array){
return item>2;
});
alert(b); //false
</script>
归并方法:
reduce(),从数组的第一项开始遍历;reduceRight(),从数组的最后一项开始遍历。
使用reduce()可以计算数组中所有元素的总和。
<script>
var a=[1,2,3,4];
var b=a.reduce(function(prve,cur,index,array){
return prve+cur;
});
alert(b); //10
第一次执行时,prev为1,cur为2;第二次执行时,prev为3,cur为3。
以上所述是小编给大家介绍的JavaScript入门教程之引用类型的相关内容,希望对大家有所帮助!
JS语法错误会阻止加载吗?区分SyntaxError与资源加载失败
2026-11-05 16:08:46
JavaScript常见SyntaxError语法错误排查与修复方法
2026-11-05 13:58:44
JS中slice、substring和substr截取字符串的区别
2026-11-05 13:43:47
JS 转 TS 手动迁移最佳实践:从配置 tsconfig 到消除 any 类型
2026-11-05 11:53:32
为什么JS数组push后得到的是数字而不是数组?
2026-11-05 09:59:18
