这不是严格错误,因为 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
}
这是一个绝妙的技巧,可以让我们在每次发现某些东西时都无需强制执行连锁检查。