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

读JavaScript某文章(标题被和谐)的收获

资料来源:http://bonsaiden.github.com/JavaScript-Garden/zh/

?

1.hasOwnProperty函数

??? 为了判断一个对象 是否包含自定义属性而不是原型链上的属性,我们需要使用继承自Object.prototype的hasOwnProperty方法。

?

??? 在chrome控制台中测试如下:


?

在for (var key in obj){ } 中, key包含了obj继承下来的所有原型链的内容,hasOwnProperty只表示当前对象的原型链属性,可用于过滤父对象的原型链方法

在chrome中可以看到,若Object对象中包含了一个属性show,则在obj对象中for (var key in obj)也同样打出来了:

?

2.typeof 与 instanceof

在JavaScript中,typeof 只用于判断对象是否已定义,或者是否已经赋值:


?

instanceof只有在比较自定义对象时才有意义,内置对象String, Number等,与 typeof 一致

?

3.undefined 和 null

undefined 是 一个值为undefined的类型

而 null 表示的是一个对象,该对象为空对象

?

返回undefined的情况:

1.访问未修改的全局变量 undefined

2.没有定义 return 表达式的函数隐式返回

3.return 表达式没有显式的返回任何内容

4.访问不存在的属性

5.函数参数没有被显式传递值

6.任何被设置为 undefined 值的变量

?

4.setTimeout 和 setInterval

setTimeout和setInterval的一个区别是setInterval在javascript执行有阻塞时,仍然会组织回调函数堆积起来,在下一个时间执行。

?

处理可能阻塞的情况:

function foo(){
    // 阻塞执行 1 分钟
    setTimeout(foo, 1000);
}
foo();

阻止了setInterval的调用指令堆积,拥有更多的控制。

怪不得看到很多执行的都是用setTimeout,原来是有这个原因。

?

里面有一个结论是,绝对不要使用字符串作为 setTimeout 或者 setInterval 的第一个参数,这么写的代码明显质量很差。

呀哦,之前就是直接传弟一个函数名进去的。不知道属于不属于这种情况。