标签 javascript 下的文章

刚才在做日期格式化时需要将汉字进行编码再解码输出,所以就查了一下,只有字母和数字 [0-9a-zA-Z]、一些特殊符号 $-_.+!*'(),,以及某些保留字,才可以不经过编码直接用于 URL;一共有2对编/解码函数:

// 前后一一对应关系:编码和解码
encodeURI 和 decodeURI();
encodeURIComponent() 和 decodeURIComponent();
••••••

/**
 * 对Date的扩展,将 Date 转化为指定格式的String
 * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q)可以用 1-2 个占位符
 * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
 * eg:
 * (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S")==> 2006-07-02 08:09:04.423
 * (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04
 * (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04
 * (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04
 * (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
 */

Date.prototype.format = function(format) {
    var date = {
            "M+": this.getMonth() + 1, //月份
            "d+": this.getDate(), //日
            "h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, //小时
            "H+": this.getHours(), //小时
            "m+": this.getMinutes(), //分
            "s+": this.getSeconds(), //秒
            "q+": Math.floor((this.getMonth() + 3) / 3), //季度
            "S": this.getMilliseconds() //毫秒
        },
        week = {
            "0": "日",
            "1": "一",
            "2": "二",
            "3": "三",
            "4": "四",
            "5": "五",
            "6": "六"
        };

    // 年(y)的占位符
    if(/(y+)/.test(format)){
        format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    // 周(E)的占位符
    if(/(E+)/.test(format)){
        format = format.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length>2 ? "星期" : "周") : "") + week[this.getDay() + ""]);
    }
    // 其他各元素占位符
    for(var k in date){
        if(new RegExp("(" + k + ")").test(format)){
            format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? date[k] : ("00" + date[k]).substr(("" + date[k]).length));
        }
    }

    return format;
}

var newDate = new Date(),
    time = Date.parse(new Date("2015/12/12 00:00:00"));
newDate.setTime(time);
console.log(newDate.format("yyyy-MM-dd EE HH:mm:ss"));

因为公司的业务是做教育的,所以页面上有关于考试时间的倒计时特效,这些考试时间都是定死的,每月都有几场,每次需要人工手动去修改,太麻烦,所以需求来了:


小二儿,上代码~

••••••

常见格式:(function() { / code / })();

  • 解释:包围函数 (function(){}) 的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数,括号内为匿名函数的参数。
  • 作用:可以用它创建命名空间,只要把自己所有的代码都写在这个特殊的函数包装内,那么外部就不能访问,除非你允许(变量前加上 window,这样该函数或变量就成为全局)。各 JavaScript 库的代码也基本是这种组织形式。
  • 总结一下,执行函数的作用主要为 匿名 和 自动执行,代码在被解释时就已经在运行了。

其他写法

(function () { /* code */ } ()); 
!function () { /* code */ } ();
~function () { /* code */ } ();
-function () { /* code */ } ();
+function () { /* code */ } ();

推荐阅读:http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html

面向对象技术是目前流行的系统设计开发技术,它包括面向对象分析和面向对象程序设计。面向对象程序设计技术的提出,主要是为了解决传统程序设计方法——结构化程序设计所不能解决的代码重用问题。

••••••

!function a(){
    console.log('1');
}
a(); // a is not defined

为什么是 a is not defined
首先,我要说 !function a(){ console.log('1'); } 这个写法,! 是让后面的函数变为函数表达式,但是你并没有执行它,!function a(){ console.log('1'); } 的实际意思是对这一堆字符串取非,结果就是 false 咯~