关于Javascript中“未定义”的一个问题
今天我的一个朋友说:关于Javascript中“未定义”的一个问题,javascript,Javascript,今天我的一个朋友说: if (typeof isoft == "undefined") var isoft = new Object(); 这样的代码是由一名大一新生编写的 if(!isoft) var isoft = new Object(); 我原来认为一定有区别。但我找不到区别。是 有吗?或者这两个例子是一样的 谢谢。如果isoft应该包含对某个对象的引用,那么两者都会这样做。A.对于所有假值,isoft都为真,但对象不能为假值。如果isoft应包含对对象的引用,则两者的作用相同。A.
if (typeof isoft == "undefined") var isoft = new Object();
这样的代码是由一名大一新生编写的
if(!isoft) var isoft = new Object();
我原来认为一定有区别。但我找不到区别。是
有吗?或者这两个例子是一样的
谢谢。如果isoft应该包含对某个对象的引用,那么两者都会这样做。A.对于所有假值,isoft都为真,但对象不能为假值。如果isoft应包含对对象的引用,则两者的作用相同。A.isoft对于所有的假值都是真的,但对象不能是假值。查看问题,但请注意Tom Ritter接受的答案似乎不完整,请检查对其答案的评论。另请参见。参见问题,但请注意,Tom Ritter接受的答案似乎不完整,请检查对其答案的评论。另请参见您提供的涉及常规对象的示例中的。,两者几乎没有区别。但是,另一种典型模式可以是:
var radioButtons = document.forms['formName'].elements['radioButtonName'];
if ('undefined' === typeof radioButtons.length) {
radioButtons = [ radioButtons ];
}
for (var i = 0; i < radioButtons.length; i++) {
// ...
}
还有其他涉及空字符串的示例,其中if!可能不建议使用变量,最好针对typeof undefined进行测试,或者针对null进行显式测试。在您提供的涉及常规对象的示例中,没有什么区别。但是,另一种典型模式可以是:
var radioButtons = document.forms['formName'].elements['radioButtonName'];
if ('undefined' === typeof radioButtons.length) {
radioButtons = [ radioButtons ];
}
for (var i = 0; i < radioButtons.length; i++) {
// ...
}
还有其他涉及空字符串的示例,其中if!可能不建议使用变量,最好针对typeof undefined进行测试或显式针对null进行测试。在您的特定示例中,没有显著差异,因为您正在计算对象实例,当转换为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);
}
当然,我喜欢走捷径,尽可能地节省打字时间,但你必须知道什么时候走捷径,什么时候不走 在您的特定示例中,没有明显的区别,因为您正在计算对象实例,当转换为布尔值时,对象将转换为布尔值true,而未定义和null将计算为布尔值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);
}
当然,我喜欢走捷径,尽可能地节省打字时间,但你必须知道什么时候走捷径,什么时候不走