不明白这道题

不明白这道题

http://img1.sycdn.imooc.com//climg/5cb2f3250001ab6404880274.jpg

for循环的不是属性名吗?

第一次循环:str+=obj.name;

第二次循环:str+=obj.price;

第三次循环:str+=obj.action;

结果加起来不是没有重复的吗?

请老师说一下具体的每次循环让我理解一下

正在回答

登陆购买课程后可参与讨论,去登陆

4回答

1、首先先了解for in

for…in语句用来遍历对象的每一个属性,每次都将属性名作为字符串保存在变量里。

for (variable in object ){

  statement

}

(1)variable是一个变量名,数组的一个元素或者是对象的一个属性

(2)object是一个对象名,或者是计算结果为对象的表达式。

(3)statement通常是一个原始语句或者语句块,由它构成循环的主体。


第一循环遍历,执行var i in obj,找到的是obj.name,上面说了for……in每次都将属性名作为字符串保存在变量里,因此,这里是将obj.name的值保存在i里面。也就是得到的是字符串aaa,执行alert(str+=obj[i]),因为遍历到一个字符串aaa,没有其他可拼接的字符串,因此输出结果是aaa,

第二次循环遍历,执行var i in obj,找到的是obj.price,得到的是bbb,这个时候,因为第一次遍历,已经遍历得到了字符串aaa,这一次遍历得到了字符串bbb,因此执行alert(str+=obj[i]),会将两次遍历得到的字符串aaa和bbb进行拼接,即得到aaabbb,

第三次循环遍历,执行var i in obj,找到的是obj.action,得到的是

function() {

            alert("ccc");

};

因为前两次遍历得到了aaa和bbb,因此执行alert(str+=obj[i]),会将这三次遍历得到的字符串aaa和bbb和

function() {

            alert("ccc");

};

进行拼接,即得到aaabbbfunction() {

            alert("ccc");

};

http://img1.sycdn.imooc.com//climg/5cb3522800015d5411530651.jpg

如果for in里面的代码块如下

for (var i in obj) {
           alert(obj[i])
}

同学的理解就是正确的了。

另外,老师想要跟你解释一下老师给同学讲解原理的本意,这里老师是希望通过概念,能够帮助同学独立思考,毕竟将来工作的时候,在团队协同开发一个项目的时候,是需要能够读懂别人的代码的,工作中,同事是不可能给你讲一遍他的写的每一行代码是什么意思,是如何执行的,当然,直接给你结果,对于老师来说是非常快捷的解决你的疑惑的方法,但是这样对你来说,只能达到只知其一不知其二的效果。这样对你的学习成果是非常不利的。老师希望能够通过一步一步的引导同学去思考这个原理,慢慢的学会分析代码,掌握编程语言的逻辑。自己思考理出来的结果跟别人给你讲的结果,收获是不一样的哦。

希望可以帮到你!

  • 你的粉丝_啊德 提问者 #1
    谢谢老师,心情有时有点糟糕,不好意思
    2019-04-15 00:00:45
提问者 你的粉丝_啊德 2019-04-14 19:48:59

第一次循环:str+=obj.name;

第二次循环:str+=obj.price;

第三次循环:str+=obj.action;

所以,str=obj.name+obj.price+obj.action,不是这样吗?

str=aaa+bbb+function(){alert("ccc"};不是这样吗?

哪里错指出来一下就行,谢谢

提问者 你的粉丝_啊德 2019-04-14 19:40:50

不要复制其他的回答好不好,我举例子来问您,您给我讲概念,麻烦讲解一下例子的每次循环吧,谢谢了

卡布琦诺 2019-04-14 18:40:05

for in 的遍历过程就相当于循环取值,能取到多少个值,就执行多少次函数体,对象遍历时,可以当做数组一样处理,通过[]取值,且这里是字符串累加,str += obj[i]就是str = str + obj[i],所以就会出现重复的情况。

希望可以帮到你!

  • 提问者 你的粉丝_啊德 #1
    这个回答我在另一个问题看过了,能不能讲具体一点,讲一下我上面的例子,具体的值。
    2019-04-14 19:36:53
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师