【发布时间】:2008-12-03 12:38:55
【问题描述】:
今天我的一个朋友说:
if (typeof isoft == "undefined") var isoft = new Object();
这种代码是大一写的,写的吗
if(!isoft) var isoft = new Object();
我最初认为肯定有一些不同。但我找不到区别。是 有吗?还是这两个例子是一样的?
谢谢。
【问题讨论】:
标签: javascript
今天我的一个朋友说:
if (typeof isoft == "undefined") var isoft = new Object();
这种代码是大一写的,写的吗
if(!isoft) var isoft = new Object();
我最初认为肯定有一些不同。但我找不到区别。是 有吗?还是这两个例子是一样的?
谢谢。
【问题讨论】:
标签: javascript
查看问题Javascript, check to see if a variable is an object,但请注意Tom Ritter 接受的答案似乎不完整,请查看关于他的答案的评论。另请参阅community answer by Rob。
【讨论】:
在您提供的涉及常规对象的示例中,几乎没有区别。然而,另一种典型的模式可以是:
var radioButtons = document.forms['formName'].elements['radioButtonName'];
if ('undefined' === typeof radioButtons.length) {
radioButtons = [ radioButtons ];
}
for (var i = 0; i < radioButtons.length; i++) {
// ...
}
如果您使用if (!radioButtons.length),它将在未找到单选按钮时评估为真(radioButtons.length 为 0)并创建一个包含单个(不存在)单选按钮的数组。如果您选择使用以下方式处理单选按钮,可能会出现同样的问题:
if ('undefined' === typeof radioButtons.length) {
// there is only one
} else {
// there are many or none
}
还有其他涉及空字符串的示例,可能不建议使用 if (!variable),最好针对 typeof undefined 进行测试或显式针对 null 进行测试。
【讨论】:
如果isoft 应该持有对对象的引用,则两者都做同样的事情。 !isoft 对所有假值都为真,但对象不能是假值。
【讨论】:
在您的特定示例中,没有显着差异,因为您正在评估 Object 实例,并且对象在转换为 Boolean 时被转换为 Boolean true,而 undefined 和 null 被评估为 Boolean false。 但以此为例:
function alertSomething(something) {
//say you wanna show alert only if something is defined.
//but you do not know if something is going to be an object or
//a string or a number, so you cannot just do
//if (!something) return;
//you have to check if something is defined
if (typeof something=='undefined') return;
alert(something);
}
当然,我喜欢走捷径并尽可能节省打字,但你必须知道什么时候走捷径,什么时候不走捷径;)
【讨论】: