The following CoffeeScript code:
foo = (x) ->
alert("hello") unless x?
alert("world") unless y?
编译为:
var foo;
foo = function(x) {
if (x == null) {
alert("hello");
}
if (typeof y === "undefined" || y === null) {
return alert("world");
}
};
为什么foo
的参数x
未针对undefined
进行检查,而y
是?
答案 0 :(得分:9)
未定义的检查是为了防止在检索不存在的标识符的值时抛出的ReferenceError异常:
>a == 1
ReferenceError: a is not defined
编译器可以看到x标识符存在,因为它是函数参数。
编译器无法判断y标识符是否存在,因此需要检查y是否存在。
// y has never been declared or assigned to
>typeof(y) == "undefined"
true