ember.js中打印数组的问题
Issue with printing arrays in ember.js
当我尝试包含ember.js库(ember-0.0.-rc.7.js)时,我看到了一些奇怪的东西。
我刚刚打印出的java代码是一个javascript数组:
<script type="application/javascript">
var songs = [ 'a','b','c'];
console.debug(songs.toString());
for(key in songs)
{
console.debug(songs[key]);
}
</script>
当我不包括库时,它会在控制台中打印出a、b、c。然而,当我包含它时,它开始打印出a、b、c,以及所有的功能…
示例:
function (idx) {
return this.objectAt(idx);
}
function superWrapper() {
var ret, sup = this._super;
this._super = superFunc || K;
ret = func.apply(this, arguments);
this._super = sup;
return ret;
}
function (key) {
return this.mapProperty(key);
}
ember.js库出现这种情况的原因是什么?我该如何解决这个问题?
感谢您的任何建议,谢谢D
默认情况下,Ember扩展了Array.prototype
等内置原型,为不支持的浏览器提供额外的方法或填充ES5方法。您看到这些方法是因为for...in
迭代对象的可枚举属性。其中包括所有属性,甚至是通过原型链继承的属性。
相反,您应该使用一个常规的for
循环来迭代数组:
for(var i=0; i<songs.length; i++) {
console.debug(songs[i]);
}
这将只涉及实际的数组元素,即具有数字键的属性。不过,还有更好的方法,例如使用ES5 Array.forEach
(在旧浏览器中由Ember填充):
songs.forEach(function(song, i) {
console.debug(song);
});
如果您不打算使用它们,或者它们可能与其他库/脚本冲突,您可以通过配置Ember.EXTEND_PROPERTIES
来禁用Ember的原型扩展。Ember文档中有一整页专门讨论这个问题。
embjer.js必须向本机Array.prototype添加函数。您可以使用hasOwnProperty:检查每个键是否实际上是数组本身的属性,而不是继承的属性
for(key in songs) {
if(songs.hasOwnProperty(key)){
console.debug(songs[key]);
}
}
但是,通常建议始终使用普通的数组循环,因为它们有数字键:
for(var i = 0; i < songs.length; i++) {
console.debug(songs[i]);
}
你也可以使用forEach函数,具有讽刺意味的是,Ember在Array原型中添加了这个函数,如果它还不存在的话(在旧的浏览器中)。
songs.forEach(function(song){
console.debug(song);
});
演示
相关文章:
- 将子文档推送到父数组时遇到问题
- 从数组在d3中创建条形图时出现问题
- JavaScript/jQuery JSON数组问题-值为未定义
- JavaScript变量引用数组时出现问题
- Javascript中的多维数组排序索引问题
- JavaScript对象中存在数组的问题
- array_push平面数组问题-需要能够向数组中添加多个变量
- 多维数组 JAVASCRIPT 出了点问题
- javascript中的数组和if语句存在问题
- JavaScript的循环问题,将值插入数组将不起作用
- Javascript数组比较问题
- 设置和添加数组值javascript时出现问题
- 数组有什么问题
- 在Javascript/Google Maps Api中将结果放入数组时出现问题
- 尽管使用了off,click函数仍会触发,这可能也会导致数组问题
- azure移动服务中的数组长度问题
- 将数组从PHP传递到Javascript(Jquery)的问题,如常见答案所示
- 填充对象的Javascript数组时出现问题
- JavaScript——迭代一系列问题(数组/对象)
- 表单显示问题+数组下的结果