JADE:for和each的区别

6
为什么会有差异呢?
- for(var user in users) {
  p= user //output: user1
- };

并且。
each user in users
  p= user //output: [object Object]

根据http://jade-lang.com的说法,它们是别名,那它们为什么有不同的输出?

用户列表(JSON格式)

users = {
    "user1": {
        "firstname": "John",
        "lastname": "Doe"
    },
    "user2": {
        "firstname": "Jane",
        "lastname": "Roe"
    }
}

我认为这与连字符有关,但我不确定。 - Nike Sprite
@Aᴍɪʀ:在http://jade-lang.com的文档中,他们说for和each是别名,但我认为我解决了它(请参见下面的答案)。我的答案正确吗? - Nike Sprite
3个回答

1

终于找到了一个可行的解决方案,我必须使用value, index,否则会返回一个对象

each value, index in users
  li= index //output: user1

0

你没有使用Jade的for,而是使用了Javascript的。

以下代码等同于你的each版本:

for user in users
  p= user

在你的情况下,由于 - 的存在,你正在使用 JavaScript 自带的 for 版本,它会迭代对象的 而不是其值。

你不能这样写...它会报错:无法读取未定义的属性“length” - Nike Sprite
@NickSpriet 看起来它只适用于数组。你在哪里读到它们是别名的?我在文档中找不到。 - Darkhogg
在“each章节”中的最后一句话是:“当调用yield时,它将会把控制权交给调用方,并返回执行的结果。”。请点击http://jade-lang.com/reference/iteration/查看原文。 - Nike Sprite
我的用户列表是一个JSON对象。 - Nike Sprite
1
@NickSpriet 在这里对我来说完美地工作:http://codepen.io/anon/pen/BjLRVM - Darkhogg
谢谢你提供的工作示例,奇怪...我也完全做了同样的事情 :p - Nike Sprite

0

它们做的事情是一样的,但是for是JavaScript的方式,而each是Jade的方式。

在Jade中,您可以放置一个-并开始编写JavaScript,forwhile或其他内容。

另一方面,Jade知道关键字each,并在后台为您将其转换为循环。

这有点不同,因为each user in users会被转换成类似于以下内容:

for (var key in users) {
    var user = users[key];
    // the rest of the code

因此,在这种情况下,user将是对象,而不仅仅是键,因为JavaScript的for循环遍历对象中的键。

好的,这有道理,至少如果你是正确的(因为有人给你的答案投了反对票) - Nike Sprite
我是正确的。你可以在jade-lang.com上自行测试并查看。我不知道为什么有人会对此进行负投票 :) - Aᴍɪʀ
另一个问题:我的老师使用了这个循环:每个用户在users.list中。但我不知道如何使用users.list,它一直报错。 - Nike Sprite
1
@NickSpriet 我只是想给你一个想法,为什么它们不同。如何在您的项目中使用它们由您决定。 - Aᴍɪʀ
是的,这让问题更加清晰了,谢谢您回答我的问题! :) - Nike Sprite
显示剩余2条评论

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