【问题标题】:Coffeescript / Javascript - why object attribute is undefined?Coffeescript / Javascript - 为什么对象属性未定义?
【发布时间】:2012-01-10 06:34:33
【问题描述】:

我有这个功能,我在 Rails 3.1 项目中使用它:

setPosition: (object) ->
    console.log object
    console.log object.width
    object["position"] = [500, 50] 
    this

console.log object 给了

Object
    height: 600
    position: Array[2]
    title: "Banner for Creative"
    width: 160
    __proto__: Object

console.log object.width 未定义。为什么?

【问题讨论】:

  • 请不要将变量命名为object,使用更具描述性的名称以避免与本机对象产生歧义。
  • 这是在 chrome 中吗?
  • jm:你是对的。我已经改过了。
  • Firefox 中的相同行为
  • 您能添加console.log (x for x of object)console.log 'width' of object 的结果吗?可能存在一个微妙的字符串问题,例如键名末尾有一个空字符。今天看到我对另一个问题的回答:stackoverflow.com/a/8344503/66226

标签: javascript coffeescript


【解决方案1】:

几天前我回答了一个类似的问题:https://stackoverflow.com/a/8299394/66226

基本上,console.log 具有一些异步行为(在某些环境中)。因此,当您传入对对象的引用时,该对象稍后会被字符串化——而 object.width 现在是 undefined

如果你这样做

console.log object.toString()

那么你应该得到更一致的结果(虽然不太漂亮)。

编辑:或者更好,

console.log JSON.stringify(object)

参见下面的 cmets。

【讨论】:

  • +1 - 我假设他遇到了错误。没想到console.log会有这样的问题
  • 亚当,我没有收到错误,只是“未定义”。但是如果我尝试直接访问宽度或高度(例如 object.height )相同的行为。
  • console.log object.toString() 给出 [object Object]
  • @Aldo 啊,对不起;尝试JSON.stringify(object) 而不是object.toString()
  • @Aldo 啊,我误读了你关于JSON.stringify 显示的帖子——它 一个异步问题!如上所述,我的回答是正确的。除了console.log object 之外的所有内容都显示了console.log 时对象的真实状态; console.log object 正在存储对对象的引用,然后在填充对象的字段后显示它。 当你想避免混淆时使用JSON.stringify有意义吗?
猜你喜欢
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 2013-01-05
  • 2021-11-10
  • 2013-02-26
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
相关资源
最近更新 更多