这个针对未定义的测试有什么问题吗?
var undefined;
if(x == undefined){
//do something
}
或者这个:
function undefined(x){
return typeof x == 'undefined';
}
if(undefined(x)){
//do something
}
jsLint并没有抛出保留字错误,但代码似乎仍然可以工作...
这个针对未定义的测试有什么问题吗?
var undefined;
if(x == undefined){
//do something
}
function undefined(x){
return typeof x == 'undefined';
}
if(undefined(x)){
//do something
}
jsLint并没有抛出保留字错误,但代码似乎仍然可以工作...
undefined
。其他程序员希望undefined
始终是undefined
,而不是为了函数而存在的函数。
人们经常使用typeof
运算符来确保在测试未定义变量时不会抛出引用错误。
如果有人这样对你做,你可以使用...
undefined = void 0;
...将其恢复回去。
void
运算符进行测试:if (a === void 0)
。 - ReidisUndefined()
或类似名称,以避免覆盖正常的 undefined
。 - nnnnnnvar undefined
部分没问题,但将其变成函数就不行。 - Tylerundefined
本身并没有什么问题。但是,在第二个例子中,你覆盖了一个经常用于检查未定义变量的核心变量,并将其设置为一个函数。如果我在审核任何人的代码时看到这种情况,我会尖叫并禁止他们提交代码。function undefined(){}
会抛出错误,因为undefined
是只读的。 - Adam Bergmarkundefined
只是全局对象的默认属性,您可以覆盖/重新定义它。这就是为什么您应该始终使用typeof x == 'undefined'
测试undefined
,因为typeof
运算符无法被重新定义。
var undefined;
if(x == undefined){
//do something
}
undefined
。 x
也未定义,其值也为undefined
。 因此两者相等。虽然这样做毫无意义。undefined
显然是毫无意义的。将其重新定义为函数会破坏检查 x == undefined
的代码 (你本来就不应该这样做,但是......)。 - decezeundefined
在JavaScript(ECMA-262)中不是保留字。它是一种名为Undefined的常量类型;
通过声明:
var undefined;
你在本地作用域中使用相同的变量名进行声明。
从技术上讲,你可以这样做,只是不要定义类似于这样的内容:
var undefined = 13;