日期:2014-05-16  浏览次数:20307 次

求助此函数,不是很明白。
类似这样的函数
typeof(collection[i].x)=='string'?eval(collection[i].x):collection[i].x

因为eval这个函数感觉一直都是加不加没什么用。
我想知道eval(collection[i].x)和collection[i].x有什么区别
——————
再问下这个函数
this.items[this.items.length] = newItem;
是将一个数组赋给一个变量
例如this.items[3]这样的感觉不能成为一个数组
——————
代码如下
<script language="javascript">
function floaters()
{
this.items = [];
this.addItem = function(id,x,y,content)
{
document.write('<div id='+id+'style = "z-index:10;position:absolute;width:80px;height:30px;
   left:'+(typeof(x) == 'string'?eval(x):x+';
   top:'+(typeof(y) == 'string'?eval(y):y)+'">'+content+'<div>');
var newItem = {};
newItem.object = document.getElementById(id);
newItem.x = x;
newItem.y = y;
this.items[this.items.length] = newItem;
}
this.play = function()
{
collection = this.items;
setInterval('play()',10);
}
}

function play()
{
if(screen.width <= 800)
{
for(var i = 0; i<collection.length;i++)
{
collection[i].object.style.display = 'none';
}
return;
}
for(var i=0;i<collection.length;i++)
{
var followObj = collection[i].object;
var followObj_x = (typeof(collection[i].x)=='string'?eval(collection[i].x):collection[i].x);
var followObj_y = (typeof(collection[i].y)=='string'?eval(collection[i].y):collection[i].y);
if(followObj.offsetLeft!=(document.body.scrollLeft+followObj_x))
{
var dx=(document.body.scrollLeft+followObj_x-followObj.offsetLeft)*delta;
dx=(dx>0?1:-1)*Math.ceil(Math.abs(dx));
followObj.style.left=followObj.offsetLeft+dx;
}
if(followObj.offsetTop!=(document.body.scrollTop+followObj_y))
{
var dy=(document.body.scrollTop+followObj_y-followObj.offsetTop)*delta;
dy=(dy>0?1:-1)*Math.ceil(Math.abs(dy));
followObj.style.top=followObj.offsetTop+dy;
}
followObj.style.display = '';
}
}
</script>

------解决方案--------------------
eval干什么用的,查查语法手册不就知道了?
加不加是否一样,你多做几个不同情况测试不就知道了?

“再问下这个函数 this.items[this.items.length] = newItem;是将一个数组赋给一个变量
例如this.items[3]这样的感觉不能成为一个数组”

这叫函数吗?这是对一个已有的数组增加新的元素而已。看看书上关于数组的使用就知道了。

------解决方案--------------------
eval的作用是将字符串当做代码执行,作用那是非常非常强大啊
js数组模型也是集合,可以以任意下标添加成员
var items = [];
items['a']='test';
这种写法同样是合法的
------解决方案--------------------

有时传的参数要求是字符串
function asd(f)
{
var a = 4, b = 2;
alert(eval(f));
}
asd("(a+6)*b-3");//传的参数是字符串

可以理解成给items数组中添加一个变量 

------解决方案--------------------
typeof ([]);
给出的结果是 "object",那就是说Array是一种特别的object,有它自己的方法,但同时也可以象一般object一样操作如

var items = ["aa","xx"];
alert(typeof items); //object
items['call']=function (){
   for(var i=0;i<this.length;i++ ){
      alert(this[i]);
   }
};
items.call();