如果在控制台中给出“未定义”,则为javascript

如果在控制台中给出“未定义”,则为javascript,javascript,if-statement,Javascript,If Statement,我肯定我只是忽略了一些东西,但我看不到它是什么 我有一个使用控制台测试新代码的页面。大部分都有效。 返回 a1 a3 foo undefined 给定ThisNode.S5.download的类型undefined'返回true lastSku返回24536 而thisNode.S5.download.sku.toString返回24536 这是预料不到的 我做了一些分解,看起来问题出在最初的if语句上 我进入控制台:如果thisNode.L1.downloa

我肯定我只是忽略了一些东西,但我看不到它是什么

我有一个使用控制台测试新代码的页面。大部分都有效。

返回

    a1
    a3
    foo
    undefined
给定ThisNode.S5.download的类型undefined'返回true

lastSku返回24536

而thisNode.S5.download.sku.toString返回24536

这是预料不到的

我做了一些分解,看起来问题出在最初的if语句上

我进入控制台:如果thisNode.L1.download.sku.toString==lastSku{},我就没有定义

    if (thisNode.L1.download.sku.toString() == lastSku) {
       console.log('foo');
    } else {
        console.log('bar');
    }
    console.log('yabba');
所以我一件一件地检查

lastSku返回24536

此节点返回一个JSON对象。对象{L1:Object,S2:Object,S3:Object,S5:Object}

thisNode.L1返回对象{box:Object,download:Object,cd:Object}

thisNode.L1.download返回对象{sku:24354}

thisNode.L1.download.sku返回24354

thisNode.L1.download.sku.toString返回24354

thisNode.L1.download.sku.toString==lastSku返回false

返回 酒吧 未定义

    if (thisNode.L1.download.sku.toString() == lastSku) {
       console.log('foo');
    } else {
        console.log('bar');
    }
    console.log('yabba');
返回

    bar
    yabba
    undefined
请注意,我可以在原始if语句中放入任何JavaScript,但仍然没有定义,所以并不是没有代码可以跳过

总而言之,原始块似乎从未到达第7行,但在运行了第一组if语句之后,它看起来确实会在所有语句之后继续运行代码

我进入控制台:如果thisNode.L1.download.sku.toString==lastSku{},我就没有定义

    if (thisNode.L1.download.sku.toString() == lastSku) {
       console.log('foo');
    } else {
        console.log('bar');
    }
    console.log('yabba');
这完全是意料之中的行为

在更大的代码示例中,您看到的未定义和最后一个未定义只是Chrome的JS控制台输出上一条语句计算结果的值,在JavaScript中,如果语句计算结果不是值,则输出值

在控制台上尝试以下操作:

console.log('foo')
你会看到的

foo
undefined
foo由console.log输出,undefined是console.log的返回值。如果你看未定义的左边,你会看到一个灰色 我进入控制台:如果thisNode.L1.download.sku.toString==lastSku{},我就没有定义

    if (thisNode.L1.download.sku.toString() == lastSku) {
       console.log('foo');
    } else {
        console.log('bar');
    }
    console.log('yabba');
这完全是意料之中的行为

在更大的代码示例中,您看到的未定义和最后一个未定义只是Chrome的JS控制台输出上一条语句计算结果的值,在JavaScript中,如果语句计算结果不是值,则输出值

在控制台上尝试以下操作:

console.log('foo')
你会看到的

foo
undefined
foo由console.log输出,undefined是console.log的返回值。如果你看一下undefined的左边,你会看到一个灰色的undefined是一条我无法停止看的红鲱鱼,这让我最终看到了它

真正的问题是外部的if..else if..else if结构。它从未检查thisNode.S5的原因是我使用了

if(typeof(thisNode.L1.download) != 'undefined') {
    if (thisNode.L1.download.sku.toString() == lastSku) {
        //do stuff
    }
else if(typeof(thisNode.S5.download) != 'undefined') {
    if (thisNode.S5.download.sku.toString() == lastSku) {
        //do different stuff
    }
}
把第二张支票放在第一张支票里面是愚蠢的举动。我没在想。相反,我应该使用

if(typeof(thisNode.L1.download) != 'undefined' && thisNode.L1.download.sku.toString() == lastSku) {
    //do stuff
} else if(typeof(thisNode.S3.download) != 'undefined' && thisNode.S5.download.sku.toString() == lastSku) {
    //do different stuff
}
未定义的是一条我无法停止看的红鲱鱼,这让我终于看到了

真正的问题是外部的if..else if..else if结构。它从未检查thisNode.S5的原因是我使用了

if(typeof(thisNode.L1.download) != 'undefined') {
    if (thisNode.L1.download.sku.toString() == lastSku) {
        //do stuff
    }
else if(typeof(thisNode.S5.download) != 'undefined') {
    if (thisNode.S5.download.sku.toString() == lastSku) {
        //do different stuff
    }
}
把第二张支票放在第一张支票里面是愚蠢的举动。我没在想。相反,我应该使用

if(typeof(thisNode.L1.download) != 'undefined' && thisNode.L1.download.sku.toString() == lastSku) {
    //do stuff
} else if(typeof(thisNode.S3.download) != 'undefined' && thisNode.S5.download.sku.toString() == lastSku) {
    //do different stuff
}

这是函数中的代码吗?如果是这样,如果没有返回任何内容,它将输出“undefined”。控制台始终打印最后计算的语句的值。块语句没有值,它们是未定义的,变量声明、函数声明和其他声明也是如此。这段代码在函数中吗?如果是这样,如果没有返回任何内容,它将输出“undefined”。控制台始终打印最后计算的语句的值。块语句没有值,它们是未定义的,var声明、函数声明和其他声明也是如此。我太专注于那个显示器了,以至于我没有看到else if将永远不会被检查,因为,DUH,第一个返回了一些东西。我需要用一些&&组合这些对来重新构造它。我一开始不这么做,我不完全确定自己在想什么。@ManofSnow是的,他会的,除非您使用的浏览器console.log返回值,或者控制台在REPL模式下不输出返回值。@meagar好的,但我看到您的编辑被替换为foo@ManofSnow这是7分钟前更正的。。。你能解释一下为什么你认为他不会从中看到未定义的吗?@meager我不知道如果语句没有函数,返回关键字就会出现。事实上,我确实看到了未定义的。我太专注于那个显示器了,以至于我没有看到else if将永远不会被检查,因为,DUH,第一个返回了一些东西。我需要用一些&&组合这些对来重新构造它。我不完全确定当初不这么做是在想什么。@ManofSnow是的,他会的,除非你使用的是console.log返回值的浏览器
或者在REPL模式下不输出返回值的控制台。@meagar好的,但我看到您的编辑被替换为foo@ManofSnow这是7分钟前更正的。。。你能解释一下为什么你认为他不会从中看到undefined吗?@meager我不知道如果语句没有函数,返回关键字会出现在if语句中