Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Javascript中“未定义”的一个问题_Javascript - Fatal编程技术网

关于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);
}
当然,我喜欢走捷径,尽可能地节省打字时间,但你必须知道什么时候走捷径,什么时候不走