求助此函数,不是很明白。

wohuifude123 2013-04-05 01:42:26
类似这样的函数
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>
...全文
258 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ftiger 2013-04-05
  • 打赏
  • 举报
回复
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();
licip 2013-04-05
  • 打赏
  • 举报
回复
2楼说得很好。是这个意思?
天际的海浪 2013-04-05
  • 打赏
  • 举报
回复
① 有时传的参数要求是字符串 function asd(f) { var a = 4, b = 2; alert(eval(f)); } asd("(a+6)*b-3");//传的参数是字符串 ② 可以理解成给items数组中添加一个变量
wohuifude123 2013-04-05
  • 打赏
  • 举报
回复
引用 2 楼 wzs_xyz 的回复:
eval的作用是将字符串当做代码执行,作用那是非常非常强大啊 js数组模型也是集合,可以以任意下标添加成员 var items = []; items['a']='test'; 这种写法同样是合法的
① eval的作用是将字符串当做代码执行,这么有什么用,还不如直接写,何必用eval解析 ② var items = []; items['a']='test'; 这个可以理解给items数组中添加一个变量吗?
wohuifude123 2013-04-05
  • 打赏
  • 举报
回复
关于eval的实例,这个函数功能我真的很少见
var code1='"a" + 2'; //表达式
var code2='{a:2}'; //语句
alert(eval(code1)); //a2
alert(eval(code2)); //2 不知道为什么返回2
alert(eval('(' + code2 + ')')); //[object Object] 返回这东西干什么用也不知道
var s='global';//定义一个全局变量 
function demo1()
{ 
	eval('var s="local"'); 
} 
demo1(); 
alert(s); //global
var s='function test(){return 1;}';//一个函数定义语句 
function demo2()
{ 
	eval(s);
}
alert(demo2());
解析字符串的作用,功能强大,在代码第一次见到使用 因为功能强大,但是很少用,所以对他的理解确实不够
wohuifude123 2013-04-05
  • 打赏
  • 举报
回复
引用 1 楼 theforever 的回复:
eval干什么用的,查查语法手册不就知道了? 加不加是否一样,你多做几个不同情况测试不就知道了? “再问下这个函数 this.items[this.items.length] = newItem;是将一个数组赋给一个变量 例如this.items[3]这样的感觉不能成为一个数组” 这叫函数吗?这是对一个已有的数组增加新的元素而已。看看书上关于数组的使用就知道了。
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。 提示和注释 提示:虽然 eval() 的功能非常强大,但在实际使用中用到它的情况并不多。 w3school上就有一个功能,就是相加,我不知道怎么多做几个不同情况。看了其他的文章 也基本是相加什么的,所以这里直接一个eval(x)我就不懂了。
未知数 2013-04-05
  • 打赏
  • 举报
回复
eval的作用是将字符串当做代码执行,作用那是非常非常强大啊 js数组模型也是集合,可以以任意下标添加成员 var items = []; items['a']='test'; 这种写法同样是合法的
  • 打赏
  • 举报
回复
eval干什么用的,查查语法手册不就知道了? 加不加是否一样,你多做几个不同情况测试不就知道了? “再问下这个函数 this.items[this.items.length] = newItem;是将一个数组赋给一个变量 例如this.items[3]这样的感觉不能成为一个数组” 这叫函数吗?这是对一个已有的数组增加新的元素而已。看看书上关于数组的使用就知道了。

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧