今天在写一段JS的时候总时有问题,后来才发现,是这个地方用的不对
“当obj没有attr1属性时,obj.attr()返回undefined。”这是支持文档上的一句话,以为其返字串'undefined'。这显然是不对的,正确的用法是:
那什么时候直接用 undefined == 变量进行变量有效性的判断,而什么时候用 "undefined" == typeof (变量)进行判断?
一般如果变量通过var声明,但是并未初始化的时候,变量的值为undefined,而未定义的变量则需要通过 "typeof 变量"的形式来判断,否则会发生错误。
如:if(!s) alert("发生错误"); // 该代码直接发生异常,因为变量未定义;
if(typeof(s)!='undefined') alert(s); 或者var s; if (undefined==s) alert(s)都将是正确的。
所以推荐用 typeof(s)=='undefined'的形式,以确保在s未定义的情况下仍能正常运行。
null
这是一个对象,但是为空。因为是对象,所以 typeof null 返回 'object' 。
null 是 JavaScript 保留关键字。
null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:
表达式:123 + null 结果值:123
表达式:123 * null 结果值:0
undefined
undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 'undefined' 。
虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。请看下面的代码:
alert('undefined' in window); //输出:true
var anObj = {};
alert('undefined' in anObj); //输出:false
从中可以看出,undefined是window对象的一个属性,但却不是anObj对象的一个属性。
注意:尽管undefined是有特殊含义的属性,但却不是JavaScript的保留关键字。
undefined参与任何数值计算时,其结果一定是NaN。
随便说一下,NaN是全局对象(window)的另一个特殊属性,Infinity也是。这些特殊属性都不是JavaScript的保留关键字!