Oli*_*cal 38 javascript properties object object-literal
我正在研究这个动画功能,但我遇到了问题.我似乎无法执行应该是一项简单的任务,我无法获得一个对象的长度.如果你看看jsFiddle你可以看到我正在运行alert(properties.length);它正在返回undefined.任何人都可以看到为什么这可能是?
Jam*_*son 43
node.js和更新的环境支持此功能.
var obj = {a: "a", b: "b"};
Object.keys(obj).length // 2
Run Code Online (Sandbox Code Playgroud)
Ivo*_*zel 42
JavaScript对象根本就不能有一个length属性,只有Arrays做.如果您想知道在对象上定义的属性数,则必须迭代它们并对它们进行计数.
此外,由于in将遍历整个原型链并枚举链中的所有属性,因此您的for in循环容易出现错误.Object.prototype
例
// Poisoning Object.prototype
Object.prototype.bar = 1;
var foo = {moo: 2};
for(var i in foo) {
console.log(i); // logs both 'moo' AND 'bar'
}
Run Code Online (Sandbox Code Playgroud)
您必须在对象上使用hasOwnProperty方法才能过滤掉那些不需要的属性.
// still the foo from above
for(var i in foo) {
if (foo.hasOwnProperty(i)) {
console.log(i); // only logs 'moo'
}
}
Run Code Online (Sandbox Code Playgroud)
许多JavaScript框架扩展了原型,而不是hasOwnProperty经常导致可怕的错误.
更新
关于你的代码不是动画两个属性的实际问题.
for(var p in properties) {
...
for(var i = 0; i <= frames; i++)
{
setTimeout((function(exti, element) {
return function() {
// p gets overriden by for outer for in loop
element.style[p] = original + (pixels * exti) + 'px';
}
// you need to pass in a copy of the value of p here
// just like you do with i and element
})(i, element), i * (1000 / 60), element);
}
....
}
Run Code Online (Sandbox Code Playgroud)
Cas*_*sey 11
如果您使用的是Underscore.js,则可以使用_.size():
_.size({one : 1, two : 2, three : 3});
=> 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46646 次 |
| 最近记录: |