使用 CoffeeScript 检查对象中是不是存在键的最简单方法
Posted
技术标签:
【中文标题】使用 CoffeeScript 检查对象中是不是存在键的最简单方法【英文标题】:Simplest way to check if key exists in object using CoffeeScript使用 CoffeeScript 检查对象中是否存在键的最简单方法 【发布时间】:2012-01-04 19:00:26 【问题描述】:在 CoffeeScript 中,检查对象中是否存在键的最简单方法是什么?
【问题讨论】:
【参考方案1】:obj.hasOwnProperty(name)
(忽略继承的属性)
【讨论】:
我喜欢这个响应,因为如果值是字符串或数字,key of obj
会抛出错误。 Cannot use 'in' operator to search
。在这种情况下,如果对象不是 undefined 且不是 null,它将起作用。
如果对象具有其原型中的值,则此操作失败。【参考方案2】:
key of obj
这编译为 javascript 的 key in obj
。 (CoffeeScript 引用键时使用of
,引用数组值时使用in
:val in arr
将测试val
是否在arr
中。)
如果您想忽略对象的原型,thejh 的答案是正确的。如果您想忽略具有null
或undefined
值的键,Jimmy 的回答是正确的。
【讨论】:
很可能own key of obj
也可以用于额外测试.hasOwnProperty()
。 “最有可能”来自我没有尝试过,但这种语法在理解中起作用。
@flyingsheep 不,它只适用于理解。试试看:coffeescript.org/#try:own%20key%20of%20obj
啊,ok:own = (prop, obj) -> Object::hasOwnProperty.call obj, prop
【参考方案3】:
“?”操作员检查是否存在:
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
【讨论】:
如果密钥存在但值为null
,则会失败。
在不关心密钥存在但为空的情况下,obj.key?
可能是最简洁的。以上是关于使用 CoffeeScript 检查对象中是不是存在键的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章
Javascript/Coffeescript/jQuery 中是不是有与 Ruby 的发送等效的内容?
如何使用 CoffeeScript 将多个项目放入 JSON 对象?