首页 技术 正文
技术 2022年11月14日
0 收藏 944 点赞 4,057 浏览 2801 个字

数组是一段线性分配的内存,它通过整数计算偏移并访问其中的元素。大多数的语言都会要求一个数组的元素是相同类型,但JavaScript数组可以包含任意类型。

var misc = ['string', null, true, 98.4, undefined, NaN,2, { object: true }, Infinity, ['dd', 'ss']];
console.log(misc.length);//

长度

数组的length没有上界,如果用大于等于当前length的数字作为下标保存一个元素,那么length会增大来容纳新的元素,而不会发生边界冲突。

          var myArray = [];
console.log(myArray.length);//
myArray[10] = true;
console.log(myArray.length);//

ECMAScript标准:数组的下标必须是大于等于0且小于2^32-1的整数。如果执行下面的语句,则数组返回最近的一次长度。

myArray[4294967295] = true;
console.log(myArray.length);//

因为在上面代码上执行的,结果为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);//
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);//
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));//
console.log(data.reduce(mult, 1));//

[]定义数组与{}定义数组的区别

数组为空的时候,值为undefined,{}定义的数组没有length。

            var empty = [];
var numbers = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
console.log(empty[1]);//undefined
console.log(numbers[1]);//一
console.log(empty.length);//
console.log(numbers.length);// 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。

【读书笔记】– JavaScript数组 【读书笔记】– JavaScript数组

转换:

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技术内幕》

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,966
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,487
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,332
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,115
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,748
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,783