《JavaScript 语言精粹》 学习笔记 —— 第六章 数组
第六章 数组
6.1、数组是一段线性分配的内存,它通过整数去计算偏移并访问其中的元素。6.2、JavaScript 没有数组数据结构。但提供了一种类数组特性的对象。它把数组的下标转变成字符串,用作其属性。
6.3、JavaScript 中这种类“数组特性的对象”与一般对象的不同点在于:1、此对象继承自Array.prototype,而一般对象继承自Object.prototype;2、此对象拥有一个诡异的length属性,而一般对象没有。
6.4、JavaScript中,允许数组包含任意混合类型的值。例如:
var misc = ['string', 98.6, true, null, undefined, ['nested', 'array'], {object : true}, NaN, Infinity]; misc.length // 106.5、每一个数组都有一个length属性。和大多数其他语言不同,JavaScript数组的length没有上界。
6.6、length 属性的值是这个数组中最大整数属性名加上1,所以它不一定等于数组里属性的个数。例如:
var myArray = []; myArray.length // 0 myArray[1000000] = true; myArray.length // 1000001 // myArray 只包含一个属性6.7、[] 后缀下标运算符将它的表达式转换成一个字符串,如果该字表达式有toString方法,就是用该方法的值。这个字符串被用作属性名。如果这个字符串看起来像一个大于等于这个数组当前的length且小于4 294 976 295的正整数,那么这个数组的length就会被重新设置成新的下标加1。
6.8、可以手动设置length的值。设置更大无须给数组分配更多的空间,而把length设小,将导致下标大于等于新length的属性被删除。
6.9、由于JavaScript中的数组就是对象,所以delete运算符可以用来从数组中移除元素。不幸的是,这样户在数组中遗留一个空洞。这是因为排在被删除元素之后的元素保留了他们最初的名字(下标)。
6.10、splice方法可以用来删除数组中的一些元素。第一个参数是数组中的序号,第二个参数是要删除元素的个数。此方法对大型数组来说效率不高。
6.11、typeof 运算符报告数组的类型是'Object',JavaScript数组与对象的区别是混乱的。
6.12、可以通过for in语句来遍历一个数组所有的属性,for in无法保证属性的顺序,而for语句能避免这样的问题。
6.13、一个检查对象是否为数组的函数:
var is_array = function (value) { return value && typeof value === 'object' && typeof value.length === 'number' && typeof value.splice === 'function' && !(value.propertyIsEnumerable('length')); };
总结:JavaScript中的数组并没有数组结构,而是一种类数组的对象。该对象继承自Array.prototype,它多了一个length属性。
转载请注明出处:http://blog.csdn.net/xxd851116/article/details/7671892