【发布时间】:2014-01-19 01:05:25
【问题描述】:
我确定我只是在俯瞰某些东西,但我看不到它是什么。
我有一个页面用于通过控制台测试一些新代码。大多数都有效。
if(typeof(thisNode.L1.download) != 'undefined') {
console.log('a1');
if (thisNode.L1.download.sku.toString() == lastSku) {
console.log('a2');
addSku = thisNode.L1.cd.sku.toString();
} else { console.log('a3'); }
} else if(typeof(thisNode.S5.download) != 'undefined') {
console.log('b1');
if (thisNode.S5.download.sku.toString() == lastSku) {
console.log('b2');
addSku = thisNode.S5.cd.sku.toString();
} else {
console.log('b3');
}
}
console.log('foo');
返回
a1
a3
foo
undefined
鉴于typeof(thisNode.S5.download) != 'undefined' 返回true
而lastSku 返回"24536"
而thisNode.S5.download.sku.toString() 返回"24536"
这不是预期的。
我做了一些分解,看起来问题出在最初的 if 语句上。
我进入控制台:if (thisNode.L1.download.sku.toString() == lastSku) {} 我得到“未定义”
所以我一块一块地检查了它
lastSku 返回"24536"
thisNode 返回一个 JSON 对象。 Object {L1: Object, S2: Object, S3: Object, S5: Object}
thisNode.L1 返回Object {box: Object, download: Object, cd: Object}
thisNode.L1.download 返回Object {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');
}
返回 “酒吧” 未定义
if (thisNode.L1.download.sku.toString() == lastSku) {
console.log('foo');
} else {
console.log('bar');
}
console.log('yabba');
返回
bar
yabba
undefined
请注意,我可以将任何 JavaScript 放在原始 if 语句中,但我仍然未定义,所以并不是没有可以跳过的代码。
回顾一下,原始块似乎永远不会到达第 7 行,但在运行第一组 if 语句后,它确实会在所有这些语句之后继续运行代码。
【问题讨论】:
-
该代码在函数中吗?如果是这样,如果没有返回,它将输出'undefined'
-
控制台总是 打印最后评估的语句的值。块语句没有价值(它们是
undefined),var声明、function声明和其他声明也是如此。