- 主题:JavaScript的for循环是我理解错了吗?
for(var attr in obj) 或者 for(var elem in array) 两个有时候JavaScript解释器是不是会弄错。。我这种有个测试代码:
Array.prototype.fish = function(){
console.debug("fish is here.");
}
l = [1, 2, 3, 4];
for(var i in l){
console.debug(i);
}
与我的想象差距甚远。
--
FROM 117.30.55.*
我的意思是,遍历数组,我的期望是只输出数字,不想输入最后面的那个fish.
【 在 ottffsse (nothing) 的大作中提到: 】
: 我这运行正常啊:
: 0
: 1
: ...................
--
FROM 117.30.55.*
我能理解这种现象,但是感觉javascript的这种设计很蛋疼。因为现在有些工具会在Array.prototype里面做文章,这直接让 for(elem in array) 这种形式作废了。
【 在 tcper (知心哥哥) 的大作中提到: 】
: array 也是 object 啊
--
FROM 117.30.55.*
太麻烦了。所以我现在都用for(i<arrry.length)来循环。
【 在 a316783812 (woniuppp) 的大作中提到: 】
: for in的循环 都要加一层hasOwnProperty 验证的
--
FROM 59.57.165.*
用javascript的果然都已经不考虑运行效率了。据我所知,动态语言调用函数的开销都挺大的。
【 在 ttl (小驴) 的大作中提到: 】
: 难道不是应该用forEach咩?
: 如果考虑浏览器兼容,jQuery / underscore 之流也有each。
--
FROM 117.30.55.*
没觉得$.each()有多方便。JavaScript又不是函数式编程语言,能根据可重入函数的特性做惰性计算并行计算什么的。$.each与for的区别不过是写法上的不同而已。
而且性能这个,积少成多。咱不能像那些搞Java的那样,大家都写一坨坨,最后搞成一撮矬。
【 在 ttl (小驴) 的大作中提到: 】
: 以写起来舒服为第一目的,一般也不会把密集运算给放浏览器端。
: 跟写C/C++程序一样,优化是需要根据profile做的,每一行代码都去考虑这里是不是多一次寻址,会不会有cache命中率低问题,最后就累死了。
--
FROM 117.30.55.*
还要寻找函数对象,构造Context之类的吧。
【 在 ttl (小驴) 的大作中提到: 】
: 顺便说下开销的问题:
: 以v8为例,一个function的调用对应到的C++:
: fn->GetFunction()->Call(v8::Context::GetCurrent()->Global(), 1, args)
: ...................
--
FROM 117.30.55.*