ITPub博客

首页 > 应用开发 > Javascript > 五个JavaScript 应用技巧

五个JavaScript 应用技巧

原创 Javascript 作者:松前卡气 时间:2025-04-29 13:24:48 0 删除 编辑

一、阻止别人在Iframe中加载你的页面

如果你的网站变得非常有人气的时候,就有很多网站想链接到你的网站,甚至想把你的网页通过IFrame嵌入它自己的网页。

这样就不好玩了,那么如何来阻止这样行为呢?

    if(top !== window) {
         top.location.href = window.location.href;
        }


二、函数中的预定义变量arguments并非一个真正的数组,而是一个类似数组的对象。

它具有length属性,但是没有slice, push, sort等函数,那么如何使arguments具有这些数组才有的函数呢?

也就是说如何使arguments变成一个真正的数组呢?

       function args() {
            return [].slice.call(arguments, 0);
        }
        args(2, 5, 8); // [2, 5, 8]




三、为IE添加console.log函数

在Firefox下并有Firebug的支持下,我们经常使用console.log来在控制台记录一些信息。

但是这种做法在IE下会阻止JavaScript的执行(在Firefox下没有启用Firebug情况下也是一样),因为此时根本没有console对象存在。

我们可以通过如下小技巧来防止这样情况的发生:

        if (typeof(console) === 'undefined') {
            window.console = {
                log: function(msg) {
                    alert(msg);
                }
            };
        }
        console.log('debug info.');




四、快速字符串连接

我们经常使用+将较短的字符串连接为一个长字符串,这在大部分的情况下是没问题的。

但是如果有大量的字符串需要连接,这种做法将会遇到性能问题,尤其是在IE下。

        var startTime = new Date();
        var str = '';
        for (var i = 0; i < 50000; i++) {
            str += i;
        }
        alert(new Date() - startTime);  // Firefox - 18ms, IE7 - 2060ms
        
        var startTime = new Date();
        var arr = [];
        for (var i = 0; i < 100000; i++) {
            arr.push(i);
        }
        var str = arr.join("");
        alert(new Date() - startTime); // Firefox - 38ms, IE7 - 280ms

可以看到Firefox似乎对+操作符进行了优化,而IE则表现的傻乎乎的。




五、闭包(closure)

闭包指的是函数内的局部变量,当函数返回时此变量依然可用。

当你在函数内部定义另外一个函数时,你就创建了一个闭包

        function add(i) {   
            return function() {   
                return ++i;   
            };   
        }   
        add(2).toString(); // "function () { return ++i; }"   
        add(2)(); // 3

add(2)是一个函数,它可能获取外部函数的局部变量i。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70044235/viewspace-3082885/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2025-03-11

  • 博文量
    36
  • 访问量
    41916