JavaScript中有null
和undefined
。是否有任何有意义的用例将undefined
分配给变量?
答案 0 :(得分:5)
是
当一个属性有一个值,现在你想让它没有,你通常会有这些选择:
删除:强>
delete obj.prop;
问题:它有very big performance impacts。 是在其他设计良好的JS程序中最大的性能杀手之一。跟踪它并确保在性能很重要时永远不会使用它(请注意,影响不只是位于删除属性的位置,而是位于稍后读取或写入对象的其他属性的位置,包括调用方法时)。
将值设置为null:
obj.prop = null;
当值的预期类型是“对象”(或有时“字符串”)时,这只会产生语义上的意义。请注意,null
(即没有对象)和undefined
之间存在语义差异(即未设置值)。
将值设置为NaN:
obj.prop = NaN;
你不会将它用于除数字之外的任何东西(但是根据具体的使用情况,它会有很多意义)。
将值设置为undefined:
obj.prop = undefined;
在大多数其他情况下,这是最佳选择。它也可以很好地运用通常正确的方法来测试参数或参数的属性是否已经设置,即检查options.something === undefined
。
答案 1 :(得分:1)
看起来已经由@Denys详细解释过:)
如果我使用this.x = null
,则typeof x将为object
,这使我使用undefined
。
在ECMA 5之前有一个问题,您可以更改undefined
的值,这是唯一的理论陷阱。
undefined = 'myEx';
function myEx(){
this.x = undefined;
function isXExisting(){
return typeof this.x !== "undefined";
}
function squareX(){
switch(typeof this.x){
case 'undefined': return undefined;
case 'string': return this.x + this.x;
case 'number': return this.x * this.x;
case 'object': return this.x;
default: return undefined;
}
}
function setX(value){
this.x = value;
}
function getX(){
return this.x;
}
function resetX(){
this.setX(undefined);
}
return{
isXExisting: isXExisting,
setX: setX,
getX: getX,
squareX: squareX,
resetX: resetX
}
}
var y = new myEx();
console.log(y.isXExisting(), y.getX(), y.squareX());
y.setX(3);
console.log(y.isXExisting(), y.getX(), y.squareX());
y.setX('xX');
console.log(y.isXExisting(), y.getX(), y.squareX());
y.resetX();
console.log(y.isXExisting(), y.getX(), y.squareX());