遇到一个 JavaScript 运算符的问题

2015-09-16 16:21:09 +08:00
 isbase

菜鸟一枚,不明白下面这两段代码为什么会输出不同的结果

var yun = new Object ()
yun.name = "bai";
yun.age = 199;

function showPro (obj ) {
    var result = "";
    for (var clone in obj )
            result = clone + "=" + obj[clone];
        }
    }
    return result;
}
console.log (showPro (yun ));    // age=99


function showPro (obj ) {
    var result = "";
    for (var clone in obj )
            result += clone + "=" + obj[clone];
        }
    }
    return result;    // name=bai age=199
}
2233 次点击
所在节点    JavaScript
14 条回复
jarlyyn
2015-09-16 16:30:44 +08:00
+= 和=的区别吧?
answeryou
2015-09-16 16:39:11 +08:00
第一个函数里是重新赋值
第二个函数里是累加赋值
isbase
2015-09-16 17:35:34 +08:00
@answeryou
@jarlyyn

我只是不明白为什么第二个函数里的 result += clone + "=" + obj[clone];

我的理解是 result 不是空字符串吗?
isbase
2015-09-16 17:38:00 +08:00
```
var yun = new Object ()
yun.name = "bai";
yun.age = 199;

function showPro (obj ) {
var result = "";
for (var clone in obj )
result = clone + "=" + obj[clone];
}
}
return result;
}
console.log (showPro (yun )); // age=199


function showPro (obj ) {
var result = "";
for (var clone in obj )
result += clone + "=" + obj[clone];
}
}
return result; // name=bai age=199
}
```
crs0910
2015-09-16 17:40:07 +08:00
第一次是空的,第二次不是空的。
那是个 for 循环啊。
crs0910
2015-09-16 17:41:10 +08:00
a+=b 就是 a = a + b
循环里面 += ,就是每次都拼接新的在原来后面
crs0910
2015-09-16 17:41:35 +08:00
= 就是无视原来的 重新赋值了
isbase
2015-09-16 17:49:17 +08:00
@crs0910

Thanks
IFoon
2015-09-16 17:55:04 +08:00
重新看一下 C 语言的语法。
isbase
2015-09-16 17:58:59 +08:00
@IFoon Why?
an168bang521
2015-09-16 18:24:43 +08:00
个人理解的代码:
var yun ={};
yun.name = "bai";
yun.age = 199;
function showPro (obj ) {
var result = "";
for (var clone in obj ){
result = clone + "=" + obj[clone];//把等号右边计算后的值赋给等号左边的变量;记得 for-in 枚举出来的顺序是混乱的;枚举出来值的是第一次枚举出来的数值;
}
return result;
}
function showPro2 (obj ) {
var result = "";
for (var clone in obj ){
//result += clone + "=" + obj[clone];//可以转化成下面一行的代码
//result = result +(clone + "=" + obj[clone]);//这句和上面一句一样的;

//下面两句和上面一行是一样的;
result= ("age" + "=" + "199 ");//分解的第一步。值等于第一次枚举
var result2=("name" + "=" +"bai ")+result;//分解的第二部,值等于第二次枚举的值+第一次枚举出来的值;
}
return result2;
}
console.log (showPro (yun )); // age=99
console.log (showPro2 (yun )); // name=bai age=199
shsf4
2015-09-16 23:45:31 +08:00
你试试 result=result+clone+"="+obj[clone];
flydogs
2015-09-17 09:40:02 +08:00
第一个是循环里每次都重新赋值,所以最后一次有限
第二个是循环里每次往 result 结尾+数据,所以是所有属性的结果。
flydogs
2015-09-17 09:40:40 +08:00
有限=》有效

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/221176

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX