Javascript中这句话有错吗?为什么调试的时候,总是提示缺少分号呢? obj = eval( pref + arr[1].split('.')[1]); 谁能告诉我这句话输出的结果是什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要看 pref的值和 arr[1].split('.')[1]的值是什么可能是变量的值,或语句的表达式值。 eval("obj = "+ pref + arr[1].split('.')[1]); try this pref以及 rr[1].split('.')[1] 指的是什么? 这样的话alert( eval("pref+arr[1].split('.')[1]")); 就不会有错了alert( eval(pref+arr[1].split('.')[1])); 这样就出错了因为pref+arr[1].split('.')[1]得到的是一个常量,如果你让它变成变量,就会出现没有没有定义如果你用我第一种方法得到的结果和直接pref+arr[1].split('.')[1]是一样的 pref以及 rr[1].split('.')[1] 的值到底是什么? 举个例子你看:<script>var pref="aa";var arr=["0.1","a.2"];alert( eval(pref+arr[1].split('.')[1])); </script>和<script>var pref="aa";var arr=["0.1","a.2"];alert( eval("pref+arr[1].split('.')[1])"); </script>第二个是正确的,其他的都是错误的,第一个提示aa2没有定义 其实pref + arr[1].split('.')[1]就等于“60c43dc4-52c8-49bd-918a-05c403b167a7(下划线)60c43dc4-52c8-49bd-918a-05c403b167a7” obj = eval('0,'+ pref + arr[1].split('.')[1]); 参见:JSLab ScopeChainAndClosure 部分/* eval不能直接得到一个直接量的对象 因為eval将{}当成了复合语句标识*/alert(eval('{name:"MyName"}'));//MyName/* 复合语句是用逗号运算符将几个语句联合起来,用花括号括起来,形成一个语句块(statement block)。 复合语句允许使用标签,但只允许出现一个,并且出现在整段语句的最开始位置*/name:{"MyName",alert('2'),alert('3')}/* 我们要做的是改变花括号{}在eval中的意义,使它成为一个表达式或值*///通过表达式运算符(),将{name:"MyName"}返回为一个值;alert(eval('({name:"MyName"})'));//我们也构造了一个复合语句,使得{name:"MyName"}成为这个复合语句里的一个表达式;alert(eval('{0,{name:"MyName"}}'));//可以进一步简化为连续表达式;alert(eval('0,{name:"MyName"}')); 对象命名规范中起始字符不能是数字的...改成obj= eval('document.getElementById("'+pref + arr[1].split('.')[1]+'")'); 试试 真是难呀,没法编译了,突然所有的东西都不见了,除了.SNK文件还在 Ext show方法为什么不管用 紧急求助:ff下的range怎样调用execcommand()???? 急!急!急 为什么我的JS只验证到一项 层拖动时脱离鼠标 怎样selcet和text之间的关联 大家好!希望大家给点意见 没调用到JS脚本,我该怎么办? 帮我写一个遇到错误后的提示!(很简单的一个问题) escape()编码后用asp如何解码? input框屏蔽中文 求助--动态添加的表格行绑定函数的问题? 谢谢!! 一段图片展示程序,要求当前图片能够自动放大,点击按钮图片滚动!
可能是变量的值,或语句的表达式值。
alert( eval("pref+arr[1].split('.')[1]"));
就不会有错了
alert( eval(pref+arr[1].split('.')[1]));
这样就出错了
因为pref+arr[1].split('.')[1]得到的是一个常量,如果你让它变成变量,就会出现没有没有定义如果你用我第一种方法得到的结果和直接pref+arr[1].split('.')[1]是一样的
<script>
var pref="aa";
var arr=["0.1","a.2"];
alert( eval(pref+arr[1].split('.')[1]));
</script>和
<script>
var pref="aa";
var arr=["0.1","a.2"];
alert( eval("pref+arr[1].split('.')[1])");
</script>第二个是正确的,其他的都是错误的,第一个提示aa2没有定义
obj = eval('0,'+ pref + arr[1].split('.')[1]);
参见:JSLab ScopeChainAndClosure 部分
/*
eval不能直接得到一个直接量的对象
因為eval将{}当成了复合语句标识
*/alert(eval('{name:"MyName"}'));//MyName/*
复合语句是用逗号运算符将几个语句联合起来,用花括号括起来,形成一个语句块(statement block)。
复合语句允许使用标签,但只允许出现一个,并且出现在整段语句的最开始位置
*/name:{"MyName",alert('2'),alert('3')}/*
我们要做的是改变花括号{}在eval中的意义,使它成为一个表达式或值
*///通过表达式运算符(),将{name:"MyName"}返回为一个值;
alert(eval('({name:"MyName"})'));//我们也构造了一个复合语句,使得{name:"MyName"}成为这个复合语句里的一个表达式;
alert(eval('{0,{name:"MyName"}}'));//可以进一步简化为连续表达式;
alert(eval('0,{name:"MyName"}'));
改成
obj= eval('document.getElementById("'+pref + arr[1].split('.')[1]+'")');
试试