zoukankan      html  css  js  c++  java
  • 30 段 JavaScript 代码

    1. 前端人员经常遇到的问题就是如何区分IE及非IE浏览器,JavaScript代码是:

    if(!+[1,]) { //IE11不支持
        alert('这是IE浏览器');
    }else{
        alert('这不是IE浏览器');
    }

    2. 将日期直接转换为数值:

    alert(+new Date());

    3. 非IE浏览器下将类数组对象 "arguments" 转换为数组:

    Array.prototype.slice.call(arguments);

    arguments不是Array的实例,因此不是真正的数组,也就没有slice(),那为什么使用“Array.prototype.slice”而不是“Array().slice”或“[].slice”呢?因为这两种方法效率比较低,故使用代码中的写法访问Array的内置函数。

    4. 最简单的选择运算符||:

    var a = 0 || 3;
    console.log(a); //结果3

    如果=后面的第1个值计算结果为布尔值“真”,则a的值取第1个,否则取第2个。

    5. 单链式运算(如:a++ -1):

    var a = 10;
    console.log(a++ -1);

    先执行“a-1”,在执行“a=a+1”。

    6. 有趣的void操作符:

    <a href="javascript:void(0)">我是一个死链接</a>

    void是一种操作符,用来计算一个表达式但不返回值。用法:javascript:void(expression),expression是一个要计算的JavaScript标准表达式。

    7. 跳转至新页面,并且保证浏览器不会再回退:

    location.replace("http://www.baidu.com"); //跳转到百度

    location的replace()方法可以用一个新的文档替换当前文档,并且该方法还会覆盖History对象中的记录。

    8. 几秒钟之后返回上一页:

    <meta http-equiv="refresh" content="3; url=javascript:window.history.go(-1);">

    其中content为设置的时间。

    9. 在打开的子窗口中刷新父窗口:

    window.opener.location.reload();

    10. 验证是否为负数的正则表达式:

    /^-d+$/.test(str);

    11. 用JavaScript打印页面:

    window.print();

    window.print()属于浏览器内置的API,可以直接打印页面。

    12. 显示/隐藏一个DOM元素:

    el.style.display = '';

    el.style.display = 'none';

    13. 实现alert()中的文本换行:

    alert('jiangxiao bo');

    “ ”代表换行符。

    14. 实现ECMAScript5中的Object.create()函数:

    复制代码
    function clone(proto){
        function _clone(){}
        _clone.prototype = proto;
        _clone.prototype.constructor = _clone;
        return new _clone();  // 等价于 Object.create(Person);
    }
    var me = clone(Person);
    复制代码

    用原型链形式继承,构造函数重新指向新创建的对象。

    15. 理解JavaScript中的闭包:

    例如,以下代码会输出5次,结果都是5,如何输出0、 1 、 2、 3、 4?

    for ( var i=0;i<5;i++ ){
        setTimeout(function(){
            console.log(i);
        },1000);
    }

    利用闭包的原理实现,代码如下:

    复制代码
    for ( var i=0;i<5;i++ ){
        (function(e){
            setTimeout(function(){
                console.log(e);
            },1000);
        })(i);
    }
    复制代码

    16. 检测Shift、 Alt、 Ctrl 键:

    // 以下是浏览器内置的检测方法
    event.shiftKey; //检测Shift
    event.altKey; //检测Alt
    event.ctrlKey; //检测Ctrl

    17. 获取屏幕分辨率的宽、 高:

    window.screen.height; //获取屏幕的高
    window.screen.width; //获取屏幕的宽

    window.screen这个对象包含了有关用户屏幕的信息。

    18. 脚本永不出错的方式:

    window.onerror = function(m,f,l){
        return true;
    };

    19. 让JavaScript处理字符和ASCII码之间的转换:

    console.log("a".charCodeAt(0)); //97
    console.log(String.fromCharCode(75)); //K

    charCodeAt()返回指定位置字符的Unicode编码;fromCharCode()接收一个指定的Unicode值,然后返回一个字符串。

    20. 访问对象属性的代码:

    var demo = {name:'ki'};
    demo.name; //ki
    demo['name']; //ki

    访问对象属性一般存在两种方式,通过“.”或“[]”。一般情况下两种方式等效,但是“[]”还可以动态设置属性,如:

    var get = 'name';
    demo[get]; //ki

    21. 把一个值转换为布尔型的最简单方式:

    复制代码
    !!'demo'; //true
    !!''; //false
    !!'0'; //true
    !!'1'; //true
    !!{}; //true
    !!true; //true
    复制代码

    使用“!”操作符两次,可以把一个值转换为布尔型。

    22. 判断浏览器是否支持HTML5:

    !!navigator.geolocation;

    在HTML5中,navigator.geolocation可以获取设备的当前位置,通过双“!”就可以判断是否支持此API,即是否支持HTML5。

    23. 判断浏览器是否支持Canvas:

    function isCanvas(){
        return !!document.createElement('canvas').getContext;
    }

    24. 判断IE版本:

    window.navigator.appVersion

    上述代码返回一个字符串,表示所使用浏览器的版本号。它可能只包含一个数字,比如5.0,还可能包含一些其他的相关信息。

    25. 声明变量的缩略写法与复杂写法:

    复制代码
    /*复杂写法*/
    var x;
    var y;
    var z=3;
    
    /*缩略写法*/
    var x,y,z=3;
    复制代码

    JavaScript是比较灵活的语言,编程时尽量采用缩略写法,这样会提高JavaScript的性能。

    26. 采取惰性载入的方案提高函数代码的性能:

    复制代码
    function addEvents(type,element,fun){
        if(element.addEventListener){
            element.addEventListener(type,fun,false);
        }
        else if(element.attachEvent){
            element.attachEvent('on'+type,fun);
        }
        else{
            element['on'+type] = fun;
        }
    }
    复制代码

    所谓惰性载入就是在第一次执行代码后,用函数代码内部的方法覆盖原有代码,代码如下:

    复制代码
    var addEvents = (function(){
        if(document.addEventListener){
            return function(type,element,fun){
                element.addEventListener(type,fun,false);
            }
        }
        else if(document.attachEvent){
            return function(type,element,fun){
                element.attachEvent('on'+type,fun);
            }
        }
        else{
            return function(type,element,fun){
                element['on'+type] = fun;
            }
        }
    })();
    复制代码

    27. 捕捉Ctrl+Enter按键:

    if(event.ctrlKey && event.keyCode==13){
        console.log('You pressed the Ctrl + Enter');
    }

    event.ctrlKey检测Ctrl键,event.keyCode==13检测Enter键。

    28. 获取浏览器插件的数目:

    navigator.plugins.length;

    navigator用来检测浏览器的版本、所支持的MIME类型、已安装的外挂程序(plugin)。

    29. 实现对Windows、 Mac、 Linux、 UNIX操作系统的判断:

    复制代码
    var osType = "",
        windows = (navigator.userAgent.indexOf('Windows',0)!=-1)?1:0,
        mac = (navigator.userAgent.toLowerCase().indexOf('mac',0)!=-1)?1:0,
        linux = (navigator.userAgent.indexOf('Linux',0)!=-1)?1:0,
        unix = (navigator.userAgent.indexOf('X11',0)!=-1)?1:0;
    
        if(windows) osType = 'Windows';
        else if(mac) osType = 'Mac';
        else if(linux) osType = 'Linux';
        else if(unix) osType = 'Unix';
        console.log(osType);
    复制代码

    navigator.userAgent表示用户代理。

    30. 使用原生JavaScript判断是否是移动设备浏览器:

    复制代码
    var mobileReg = /iphone|ipod|android.*mobile|windows.*phone|blackberry.*mobile/i;
    if((mobileReg.test(window.navigator.userAgent.toLowerCase()))){
        alert('移动设备!');
    }else{
        alert('非移动设备!');
    }
    复制代码
  • 相关阅读:
    当程序员的那些狗日日子
    程序员常犯的几个错误
    我没有帮你的义务,却有拒绝你的权力
    并发 并行 同步 异步 多线程的区别
    cookie的存取
    sqlserver 处理百万级以上的数据处理与优化
    为什么 jmeter 分布式测试,一定要设置 java.rmi.server.hostname
    详细解析 nginx uri 如何匹配 location 规则
    mysql innodb 从 ibd 文件恢复表数据
    mysql 从 frm 文件恢复 table 表结构的3种方法
  • 原文地址:https://www.cnblogs.com/airen123/p/11772207.html
Copyright © 2011-2022 走看看