复制代码 代码如下:

程序没有改动过运行一直正常,突然有一天同事告知出现错误了。经过检查发现传递的数据中出现了#等特殊字符,浏览器只取到#号前面的数据,后面的被截断。然后首先想到先把数据用
Server.UrlEncode方法编码一下,虽然可以看到特殊字符已经被编码,可是正确的数据依然没有传递过去,错误依旧。

与in操作符相比,for in 在循环对象的属性时也会遍历原型链,for in
不会读取不可枚举属性,如数组的length属性。 小结
当检测某个对象是否拥有某个属性时,hasOwnProperty
是唯一可以完成这一任务的方法,在 for in 循环时,建议增加 hasOwnProperty
进行判断,可以有效避免扩展本地原型而引起的错误。

<script src=”../js/jquery-1.4.2.min.js”
type=”text/javascript”></script>

复制代码 代码如下:

与in操作符相比,for in 在循环对象的属性时也会遍历原型链,for in
不会读取不可枚举属性,如数组的length属性。

<script type=”text/javascript”>      
        function AutoScroll(obj) {
            $(obj).find(“ul:first”).animate({
                marginTop: “-25px”
            }, 500, function () {
                $(this).css({ marginTop: “0px”
}).find(“li:first”).appendTo(this);
            });
        }
        $(document).ready(function () {
            var myar = setInterval(‘AutoScroll(“#con2_qhd_3”)’,
1000);
            //当鼠标放上去的时候,滚动停止,鼠标离开的时候滚动开始
            $(“#con2_qhd_3”).hover(function () { clearInterval(myar);
}, function () { myar = setInterval(‘AutoScroll(“#con2_qhd_3”)’,
1000) });
        });
</script>

“JavaScript:window.showModalDialog(‘Info.aspx?bh=” +
Server.UrlEncode(e.Row.Cells.FromKey(“编号”).Text.Trim()) +
“‘,null,’dialogWidth:750px;dialogHeight:500px;center:yes;status:no;resizable:yes;’);”

复制代码 代码如下:

<div id=”con2_qhd_3″>
        <ul>
             <li><a
href=”#”>欢迎111111111111</a></li>
            <li><a
href=”#”>欢迎22222222222</a></li>
            <li><a
href=”#”>欢迎333333333333</a></li>
            <li><a
href=”#”>欢迎4444444444444</a></li>
            <li><a
href=”#”>欢迎5555555555</a></li>
           <li><a
href=”#”>欢迎66666666666666</a></li>
        </ul>
    </div>

然后改用Escape方法后,参数传递正常:

// 扩展 Object.prototype
Object.prototype.bar = 1;
var foo = {moo: 2};
for(var i in foo) {
console.log(i); // 输出 bar 和 moo
}

代码如下: script
src=”../js/jquery-1.4.2.min.js” type=”text/javascript”/script script
type=”text/javascript” function AutoScroll(obj) {
$(obj).find(“ul:first”).ani…

复制代码 代码如下:

我们不可能改变 for in
循环的行为,当需要对循环体内某些属性进行过滤时,可以利用Object.prototype的hasOwnProperty方法来完成。

“JavaScript:window.showModalDialog(‘Info.aspx?bh=’+ escape(\”” +
e.Row.Cells.FromKey(“编号”).Text.Trim() +
“\”),null,’dialogWidth:750px;dialogHeight:500px;center:yes;status:no;resizable:yes;’);”

提示:因为 for in
循环总是遍历整个原型链,所以当遍历多继承的对象时效率较低。

但是如果不是用模态窗口而直接把链接地址打开的话用Server.UrlEncode就没有问题,很奇怪,哪位大湿能给指点一下

使用 hasOwnProperty 进行过滤

复制代码 代码如下:

// 仍旧针对上例的foo对象
for (var i in foo) {
if (foo.hasOwnProperty(i)) {
console.log(i);
}
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注