【读书笔记】-- JavaScript数组
2016-05-03 19:41 stoneniqiu 阅读(637) 评论(0) 编辑 收藏 举报数组是一段线性分配的内存,它通过整数计算偏移并访问其中的元素。大多数的语言都会要求一个数组的元素是相同类型,但JavaScript数组可以包含任意类型。
var misc = ['string', null, true, 98.4, undefined, NaN,2, { object: true }, Infinity, ['dd', 'ss']]; console.log(misc.length);//10
长度
数组的length没有上界,如果用大于等于当前length的数字作为下标保存一个元素,那么length会增大来容纳新的元素,而不会发生边界冲突。
var myArray = []; console.log(myArray.length);//0 myArray[10] = true; console.log(myArray.length);//11
ECMAScript标准:数组的下标必须是大于等于0且小于2^32-1的整数。如果执行下面的语句,则数组返回最近的一次长度。
myArray[4294967295] = true; console.log(myArray.length);//11
因为在上面代码上执行的,结果为11,如果去掉第三行代码,length为0.
删除
var misc = ['string', null, true, 98.4, undefined, NaN, 2, { object: true }, Infinity, ['dd', 'ss']]; delete misc[1]; console.log(misc.length);//10 console.log(misc[1]);//undefined
delete方法只删除了元素,并没有删除下标。
var misc = ['string', null, true, 98.4, undefined, NaN, 2, { object: true }, Infinity, ['dd', 'ss']]; misc.splice(1, 1); console.log(misc.length);//9 console.log(misc[1]);//true
splice的第一个参数是序号,第二个参数是个数。splice方法在删除元素之后会让后面的元素补齐。Jquery的toArray方法用来转换数组。
方法
通过给Array的原形扩充一个函数,每个数组都会继承这个方法。下面的例子定义了一个reduce方法,接受一个函数和一个初始值为参数,内部会遍历数组调用这个方法。返回计算的结果。然后用来求总和和乘积。
Array.prototype.reduce = function(f, value) { for (var i = 0; i < this.length; i++) { value = f(this[i], value); } return value; }; var data = [4, 5, 6, 8, 9]; var add = function(a, b) { return a + b; }; var mult = function(a, b) { return a * b; }; console.log(data.reduce(add, 0));//32 console.log(data.reduce(mult, 1));//8640
[]定义数组与{}定义数组的区别
数组为空的时候,值为undefined,{}定义的数组没有length。
var empty = []; var numbers = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']; console.log(empty[1]);//undefined console.log(numbers[1]);//一 console.log(empty.length);//0 console.log(numbers.length);//10 var number_object = { '0': '零', '1': '一', '2': '二', '3': '三', '4': '四', '5': '五', '6': '六', '7': '七', '8': '八', '9': '九' }; console.log(number_object[1]);//一 console.log(number_object.length);//undefined
numbers继承Array.prototype 而number_object 继承Object.prototype 因此numbers继承了大量有用的方法。不过typeof numbers和typeof number_object 返回的都是object。
转换:
Jquery的toArray方法是调用了Array原型的slice方法。主要是用于将元素集合、参数转为数组。因为数组拥有更多方法。
slice = Array.prototype.slice; toArry:function(){ slice.call(this,0); }
不过上面的number_object要转换需要加上length属性。
var number_object = { length:10,0: '零', 1: '一', '2': '二', '3': '三', '4': '四', '5': '五', '6': '六', '7': '七', '8': '八', '9': '九' }; Array.prototype.slice.call(number_object); //["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]
如果没有长度,或者长度不对,会返回一个空数组。
判断:
那如何判断一个对象是不是数组呢,通过上面的例子我们知道type of 返回的都是'object',参考Jquery的isArray方法。
isArry:Array.isArray||function(obj) { return jquery.type(obj) === 'array'; }, type: function(obj) { return obj == null ? String(obj) : class2type[toString.call(obj)] || 'object'; }
class2type这里是一个钩子,包含了所有Object的类型。而这个toString是Object原型的一个方法。
console.log(Object.prototype.toString.call(numbers));//[object Array] console.log(Object.prototype.toString.call(number_object));//[object Object]
而这个原型方法会返回 ‘[object Array]’,[object Boolean],[object Data],[object Function],[object Number],[object RegExp],[object String]几种类型。这样就很方便用来判断。
阅读书目:《JavaScript语言精粹》,《Jquery技术内幕》
书山有路群:452450927
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义