JS编程建议——51:理解数组长度的有限性和无限性

建议51:理解数组长度的有限性和无限性
每个数组都有一个length属性。和大多数其他语言不同,JavaScript数组的length是没有上限的。如果用大于或等于当前length的数字作为下标来保存一个元素,那么length将增大以容纳新元素,不会发生数组边界错误。
length属性的值是这个数组的最大整数属性名加上1。它不一定等于数组中属性的个数。例如,下面数组myArray最后长度为10001,但它仅包含一个元素:
var myArray = [];
myArray.length // 0
myArray[10000] = true;
myArray.length // 10001
[]后缀下标运算符将它的表达式转换成一个字符串,如果该表达式中有toString方法,就使用该方法的值。这个字符串将用做属性名。如果这个字符串看起来像一个大于或等于这个数组当前的length且小于4 294 967 295的正整数,那么这个数组的length就会被重新设置为新的下标加1。根据ECMAScript 262标准,数组的下标必须是大于或等于0且小于232–1的整数。
我们可以直接为数组设置length值。当设置更大的length时,也不用向数组分配更多的空间,而当把length设置为小于数组的实际长度时,将导致所有下标大于或等于新length的元素被删除。
var numbers=['zero','one','two','three','four','five','six','seven','eight','nine'];
numbers.length = 3; // numbers = ['zero', 'one', 'two']
通过将下标指定为一个数组的当前length,可以附加一个新元素到该数组的尾部。
numbers[numbers.length] = 'ten'
有时用push方法可以更方便地完成同样的事情。
numbers.push('ten');

时间: 2024-07-30 02:26:03

JS编程建议——51:理解数组长度的有限性和无限性的相关文章

JS编程建议——21:推荐提高循环性能的策略(2)

建议21:推荐提高循环性能的策略(2)在每个循环中,每次运行循环体都要发生如下操作:第1步,在控制条件中读一次属性(items.length).第2步,在控制条件中执行一次比较(i < items.length).第3步,比较操作,观察条件控制体的运算结果是不是true(i < items.length == true).第4步,一次自加操作(i++).第5步,一次数组查找(items[i]).第6步,一次函数调用(process(items[i])).在这些简单的循环中,即使没有太多的代码,

JS编程建议——55:不要拘泥于数字下标

建议55:不要拘泥于数字下标数组下标默认为大于或等于0的整数,不过JavaScript允许数组下标可以为任意表达式,甚至为任意类型数据.(1)文本下标为数组下标指定负值:var a = []; // 定义空数组直接量a[-1] = 1; // 为下标为-1的元素赋值很显然,上面的用法是非法的,因为这不符合语法规范.使用length属性检测,返回值为0,说明数组并没有增加长度,这是正确的,也很正常.但是,使用下面的方法可以读取该元素的值:alert(a.length); // 0,说明数组长度没有

编程-C中关于数组长度影响strncpy结果的问题,求教

问题描述 C中关于数组长度影响strncpy结果的问题,求教 今天刚刚学习字符串数组,运行过程中发现数组的长度会影响输出的结果 在长度为16及以下时候,一切正常 #include <stdio.h> #include <string.h> int main() { char s[16],l[16]; gets(s); puts(s); strncpy(l,s,3); strcat(l,s); puts(l); } 长度改为17及以上以后,问题出现了,strncpy函数的结果很奇怪

JS编程建议——11:慎重使用伪数组

建议11:慎重使用伪数组JavaScript没有真正的数组,因此typeof运算符不能辨别数组和对象.伪数组在JavaScript中有很高的易用性,程序员不用给它设置维度,而且永远不用担心产生越界错误,但JavaScript数组的性能相比真正的数组可能更糟糕.要判断一个值是否为数组,必须使用constructor属性,例如: if(value && typeof value === 'object' && value.constructor === Array) { } a

JS编程建议——35:获取字节长度

建议35:获取字节长度String对象的length属性能够返回字符串的长度,不管字符是单字节,还是双字节,都作为一个来计算.因此,要获取字符串的字节长度,必须通过手工计算获取,这里介绍两种方法.1)第一种方法是利用循环结构枚举每个字符,并根据字符的字符编码,判断当前字符是单字节还是双字节,然后递加字符串的字节数. String.prototype.lengthB = function( ){ var b = 0, l = this.length; if( l ){ for( var i = 0

JS编程建议——50:正确检测数组类型

建议50:正确检测数组类型由于数组和对象的数据同源性,导致在JavaScript编程中经常会出现:在必须使用数组时使用了对象,或者在必须使用对象时使用了数组.选用数组或对象的规则很简单:当属性名是小而连续的整数时,应该使用数组,或者当对属性的位置和排列顺序有要求时,应该使用数组.否则,使用对象.JavaScript语言对数组和对象的区别是混乱的.typeof运算符检测数组的类型是"object",这没有什么意义,因此在正确检测数组和对象方面JavaScript没有提供很多的机制.这时可

JS编程建议——78:正确理解执行上下文和作用域链

建议78:正确理解执行上下文和作用域链执行上下文(execution context)是ECMAScript规范中用来描述 JavaScript 代码执行的抽象概念.所有的 JavaScript 代码都是在某个执行上下文中运行的.在当前执行上下文中调用 function会进入一个新的执行上下文.该function调用结束后会返回到原来的执行上下文中.如果function在调用过程中抛出异常,并且没有将其捕获,有可能从多个执行上下文中退出.在function调用过程中,也可能调用其他的functi

JS编程建议——53:小心使用数组维度

建议53:小心使用数组维度在JavaScript中,数组在默认状态下是不会初始化的.如果使用[]运算符创建一个新数组,那么此数组将是空的.如果访问的是数组中不存在的元素,则得到的值将是undefined.因此,在JavaScript程序设计中应该时刻考虑这个问题:在尝试读取每个元素之前,都应该预先设置它的值.但是,如果在设计中假设每个元素都从一个已知的值开始(如0),那么就必须预定义这个数组.我们也可以为JavaScript自定义一个静态函数:Array.dim = function(dimen

JS编程建议——74:使用高阶函数

建议74:使用高阶函数高阶函数作为函数式编程众多风格中的一项显著特征,经常被使用.实际上,高阶函数即对函数的进一步抽象.高阶函数至少满足下列条件之一:接受函数作为输入.输出一个函数. 在函数式语言中,函数不但是一种特殊的对象,还是一种类型,因此函数本身是一个可以传来传去的值.也就是说,某个函数在刚开始执行的时候,总可以送入一个函数的参数.传入的参数本身就是一个函数.当然,这个输入的函数相当于某个函数的另外一个函数.当函数执行完毕之后,又可以返回另外一个新的函数,这个返回函数取决于return f