五个JavaScript 应用技巧

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

如果你的网站变得非常有人气的时候,就有很多网站想链接到你的网站,甚至想把你的网页通过IFrame嵌入它自己的网页。 这样就不好玩了,那么如何来阻止这样行为呢?

ini 复制代码
    if(top !== window) {
     top.location.href = window.location.href;
    }

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

它具有length属性,但是没有slice, push, sort等函数,那么如何使arguments具有这些数组才有的函数呢? 也就是说如何使arguments变成一个真正的数组呢?

scss 复制代码
    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对象存在。 我们可以通过如下小技巧来防止这样情况的发生:

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

四、快速字符串连接

我们经常使用+将较短的字符串连接为一个长字符串,这在大部分的情况下是没问题的。 但是如果有大量的字符串需要连接,这种做法将会遇到性能问题,尤其是在IE下。

ini 复制代码
    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)

闭包指的是函数内的局部变量,当函数返回时此变量依然可用。 当你在函数内部定义另外一个函数时,你就创建了一个闭包

scss 复制代码
    function add(i) {   
        return function() {   
            return ++i;   
        };   
    }   
    add(2).toString(); // "function () { return ++i; }"   
    add(2)(); // 3

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

相关推荐
Cobyte2 分钟前
模板 DSL 解析器中的状态机设计
前端·javascript·vue.js
软件开发技术深度爱好者1 小时前
小学英语单词魔法学园HTML5实现
javascript·html5·英语学习
勉灬之1 小时前
Next.js + Prisma 跨平台部署踩坑记
开发语言·javascript·ecmascript
糖果店的幽灵1 小时前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph
这是个栗子2 小时前
前端开发中的常用工具函数(九)
开发语言·javascript·ecmascript·at
Revolution613 小时前
一段 JavaScript 代码执行时,到底发生了什么
前端·javascript
To_OC12 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
To_OC14 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
小林ixn14 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
এ慕ོ冬℘゜15 小时前
前端实战:jQuery 多条件联合搜索(标题模糊查询 + 日历时间段筛选)
前端·javascript·jquery