使用CoffeeScript检查对象中是否存在键的最简单方法

111
在CoffeeScript中,检查对象中是否存在键的最简单方法是什么?
3个回答

186
key of obj

这段代码编译成JavaScript后变为 key in obj。 (CoffeeScript 引用键时使用 of,引用数组值时使用 inval in arr 将测试 val 是否在 arr 中。)

如果要忽略对象的原型,则 thejh 的答案是正确的。如果要忽略具有nullundefined值的键,则 Jimmy 的答案是正确的。


2
很可能obj的自有键也可以用来测试.hasOwnProperty()。我说“很可能”是因为我没有尝试过,但这种语法在推导中是有效的。 - flying sheep
2
@flyingsheep 不,它只在推导式中起作用。试一下:http://coffeescript.org/#try:own%20key%20of%20obj - Trevor Burnham
啊,好的own = (prop, obj) -> Object::hasOwnProperty.call obj, prop - flying sheep

38

'?'运算符用于检查其后面的内容是否存在:

if obj?
    # object is not undefined or null

if obj.key?
    # obj.key is not undefined or null

# call function if it exists
obj.funcKey?()

# chain existence checks, returns undefined if failure at any level
grandChildVal = obj.key?.childKey?.grandChildKey

# chain existence checks with function, returns undefined if failure at any level
grandChildVal = obj.key?.childKey?().grandChildKey

18
如果键存在但其值为null,则此操作将失败。 - mu is too short
如果你不关心键是否存在,而只是关心它是否为null,那么obj.key?可能是最简洁的写法。 - Andrew Mao

22
obj.hasOwnProperty(name)
忽略继承的属性

我喜欢这个回应,因为如果值是字符串或数字,key of obj会抛出错误。在这种情况下,如果对象不是未定义的并且不是空的,它将起作用。 - jqualls
当对象具有其原型中的值时,这将失败。 - Brian M. Hunt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接