这不是严格错误,因为 javascript 是动态类型的。但如果发生这种情况,它可能会隐藏你函数的错误架构。
在某些情况下会发生什么?
在某些情况下,null如果没有结果,JavaScript 核心会返回。是.match函数的情况。在这种情况下,null类似于“我什么都没找到”。
在其他情况下,它返回-1(即.indexOf)。在这种情况下它是合适的,因为返回值应该是一个正整数。-1这是一种告诉我们的方式:“我什么都没找到”或“我没有找到一个正整数”。
那么为什么它会在一种情况下返回,null而以另一种方式返回-1来告诉我们同样的事情呢?
在第一种情况下,match应该返回一个 Array (即一个Object)。在第二种情况下,indexOf应该返回一个整数。So-1比 更合适null,因为null它是 Object 而不是整数。
为什么不undefined呢?因为undefined是未定义的东西,例如:“我什么都没找到,我不知道该怎么告诉你!”。undefined通常在函数应返回 aString但未找到此字符串时使用。Returns""并不优雅,因为它告诉我们:“我找到了字符串,而字符串是空的”。
另一种情况可能是返回 aBoolean但在一种情况下未定义的函数。所以当你问:“这是真的还是假的?” ,它似乎在说:“都不是!” .
一个漂亮的例子是这个函数:
isAlive(SchroedingersCat); // <--- undefined!!!
如果你的函数应该返回一个 DOM 元素怎么办?
看看在jQuery做什么。
jQuery 总是返回一个Object. 该对象(自身的实例)可以为空,也可以不为空。
var obj = $('#idElement') // <--- return always a jQuery object
if(obj.length == 1) {
// do something
}
这是一个绝妙的技巧,可以让我们在每次发现某些东西时都无需强制执行连锁检查。