日期:2014-05-16  浏览次数:20518 次

JavaScript小结(一)
1.关于函数定义
if (false) {
    function f() {
        return 1;
    }
}
f();

上面的js在IE、Chrome下都会输出1,原因是当JavaScript解析程序遇到一个函数function f(){}是在运行前的解析过程中被定义的,一般定义在作用域的头部(见犀牛书第六章和第八章)。
但在Firefox下会报f未定义的错误,这是因为函数是不能定义在if等控制语句中,Firefox不会解析控制语句中的函数定义。

2.Delete
Delete可以删除对象中的属性,但由var语句创建的一个特性或多个特性不
能用delete运算符删除(见犀牛书6.13),delete删除成功后会返回true,否则返回false。

3.Finally
如果finally从句抛出一个异常,那么该异常讲代替处于抛出过程中的异常,
如:
try {
    throw "try block";
} catch (e) {
    console.log(e);
} finally {
    throw "finally block";
}

控制台会输出”finally block”。另外,如果finally从句运行到了return语句,即使已经抛出一个未处理的异常,方法也会正常返回。

4.原型链
Var p = new Person(); 这个语句实际上执行了以下过程:

通过对p的__proto__赋值,让p能集成Person.prototype中的属性及方法,
当p调用一个方法时,会到他的__proto__中找,如果找不到,会向它继承的__proto__中找,就这样构成了原型链。Prototype只是辅助__proto__构造原型链的工具。

5.HasOwnProperty()与propertyIsEnumerable()
两个方法都是能用来判断对象一个非继承属性是否可以在一个for/in循环中
枚举,由于不能枚举的属性通常是继承的属性,所以两个方法几乎总会返回相同的结果

6.Sort()
Array.Sort()会将数组中元素按照字符串的顺序进行排序,而不是数字的大小,如果要按照数字大小进行排序,可以使用以下代码:
var arr = [1,22,3,44,5];
arr.sort(function (a, b) {
    return a - b;
});

如果 a < b,a将排在b前面;反之则b排在a前面。

7.Slice() 与 splice()
Slice(start, end)是列出一个数组中的从下标start到end的一个片段,不会对
数组进行处理,返回的是片段的数组。
Splice(start, length, item)是截取数组中从下标start开始,长度为length的数组,并讲item数组置于截断位置,这个方法会对数组进行处理。

8.Push()
Push()方法返回的是插入后数组的长度。

9.Arguments
Arguments对象是一个类似数组的对象,document.getElementsByTagName()
也会返回类似数组的对象。遍历该对象的方法是用Array.slice(arguments)将arguments转成数组后进行遍历。

以上小结存在问题,希望大家能帮忙指出,谢谢~