1

没有@

alert("Even Number") if even?

对应的Javascript

if (typeof even !== "undefined" && even !== null) {
  alert("Even Number");
}

@

alert("Even Number") if @even?

对应的Javascript

if (this.even != null) {
  alert("Even Number");
}

我想检查undefined我何时使用this运算符以及?我是否遗漏了什么?

4

2 回答 2

4

Coffeecript 只是很聪明。这里的诀窍是null!=检查进行比较undefined。您不需要检查变量是否存在,因为this它已经是一个对象,并且您可以通过使用常规查找来检查属性是否存在if (this.prop),但如果值是假的(假,空字符串等...),这就是为什么你需要检查undefinednull写成这样的原因:

if (this.prop !== undefined && this.prop !== null)

但是利用类型转换我们可以!=用来简化:

if (this.prop != null) // checks null and undefined

因为null == undefined但是null !== undefined

于 2013-05-30T07:19:53.097 回答
3

如果你引用了一个未定义的变量,JS 会抛出一个 ReferenceError。如果你引用一个未定义的对象成员,你会得到undefined. 这就是为什么在针对null.

考虑:

var obj = {};

if( obj.foo != null ) {   // this is fine because `obj.foo` is `undefined`
   // ...
}

if( foo != null ) {       // ReferenceError, script execution halts
   // ...
}

换句话说,没有必要保护对象成员不存在,因此 CoffeeScript 不会这样做。如果您想专门检查根本不存在的成员,则必须手动执行此操作。

于 2013-05-30T07:16:36.033 回答