1、数组长度的有限性和无限性
var myArray = [];
myArray.lenght; // 0
myArray[10000] = true;
myArray.length // 10001
根据 ECMAScript 标准,数组的下标必须是大于或等于0且小于2^32 -1 的证书。
我们可以指定数组的长度,这将导致所有下标大于或等于新 length 的元素被删除。
2、建议使用 splice 删除数组
由于数组其实就是对象,因此使用 delete 运算符可以从数组中移除元素。但是移除下标位置元素后,会在数组中遗留一个空洞。
例如:
splice 删除元素,如下
3、使用 arguments 模拟重载
4、建议使用闭包跨域开发
演示步骤说明:
第一步,程序预编译之后,从第9行开始解析执行,创建上下文环境,创建调用对象,把参数、局部变量、内部的函数转换为对象的属性。
第二步,执行函数体内代码。在第6行执行局部变量 a 的递加运算,并把这个值传递给对象属性a, 内部函数动态保持与局部变量 a 的联系,同时更新自己内部调用变量的值。
第3步,外部函数把内部函数返回给全局变量c,实现内部函数的定义,此时 c 完全继承了内部函数的所有结构和数据。
第4步,外部函数返回后(即返回之后调用完毕)会自动销毁,内部的结构、标识符和数据也随之丢失。
第5步,执行第10行代码命令,调用内部函数,此时返回的是外部函数返回时(销毁之前)保存的变量a 所存储的最新数据值,即返回6。
function f(){
var a = 1;
b = function(){
alert(a);
}
c = function(){
a++;
}
d = function( x ){
a = x;
}
}
f();
b(); // alert(1);
c();b(); // alert(2);
d(100);b(); // alert(100);
5、在循环体和异步回调中慎重使用闭包
6、通过 Function 扩展类型
7、原型属性和本地特性之间的关系
8、合理使用原型
本地属性覆盖原型属性
function p(x){
this.x = x;
}
p.prototype.x = 1;
var p1 = new p(10);
alert(p1.x); // 本地属性覆盖原型属性
但是原型属性并没有被删除,它依然存在,仅是被覆盖