对象
(一)Javascript中所有变量均可作为对象使用,除null和undefined。

 一个常见的误解是数字的字面值(literal)不能当作对象使用。这是因为 JavaScript 解析器的一个错误, 它试图将点操作符解析为浮点数字面值的一部分。
   
2.toString(); // 出错:SyntaxError
有很多变通方法可以让数字的字面值看起来像对象。
2..toString(); // 第二个点号可以正常解析
2 .toString(); // 注意点号前面的空格
(2).toString(); // 2先被计算

(二)访问属性
两种方式:点和中括号,两种方法是一样的效果。但在下面两种情况下中括号依然有效果:动态设置属性,属性变量不是一个有效变量名
(三)删除属性
删除属性的唯一方法是使用delete,设置属性为null和undefined并不是真的删除属性,而是去除属性和值的关联
(四)属性遍历
for in循环会遍历原型链上的所有属性,由于不可能改变 for in 自身的行为,因此有必要过滤出那些不希望出现在循环体中的属性, 这可以通过 Object.prototype 原型上的 hasOwnProperty 函数来完成。
使用 hasOwnProperty 过滤
// foo 变量是上例中的
for(var i in foo) {

if (foo.hasOwnProperty(i)) {
    console.log(i);
}

}
闭包
避免引用错误
为了正确的获得循环序号,最好使用 匿名包装器
方法一:
for(var i = 0; i < 10; i++) {

(function(e) {
    setTimeout(function() {
        console.log(e);  
    }, 1000);
})(i);

}
方法二:
for(var i = 0; i < 10; i++) {

setTimeout((function(e) {
    return function() {
        console.log(e);
    }
})(i), 1000)

}
arguments 对象

JavaScript 中每个函数内都能访问一个特别变量 arguments。这个变量维护着所有传递到这个函数中的参数列表。

注意: 由于 arguments 已经被定义为函数内的一个变量。 因此通过 var 关键字定义 arguments 或者将 arguments 声明为一个形式参数, 都将导致原生的 arguments 不会被创建。
arguments 变量不是一个数组(Array)。 尽管在语法上它有数组相关的属性 length,但它不从 Array.prototype 继承,实际上它是一个对象(Object)。

因此,无法对 arguments 变量使用标准的数组方法,比如 push, pop 或者 slice。 虽然使用 for 循环遍历也是可以的,但是为了更好的使用数组方法,最好把它转化为一个真正的数组。

转化为数组

下面的代码将会创建一个新的数组,包含所有 arguments 对象中的元素。

Array.prototype.slice.call(arguments);
这个转化比较慢,在性能不好的代码中不推荐这种做法。


bigtooth
26 声望2 粉丝