javascript常用代码段搜集

  1.json转字符串

  

复制代码 代码如下:

  function json2str(o) {

  var arr = [];

  var fmt = function (s) {

  if (typeof s == 'object' && s != null) return json2str(s);

  return /^(string|number)$/.test(typeof s) ? "'" + s + "'" : s;

  };

  for (var i in o) arr.push("'" + i + "':" + fmt(o[i]));

  return '{' + arr.join(',') + '}';

  }

  2.时间戳转为Date

  

复制代码 代码如下:

  function fromUnixTime(timeStamp) {

  if (!timeStamp || timeStamp < 1000 || timeStamp == ' ') return "";

  var theDate = new Date(parseInt(timeStamp) * 1000);

  return theDate;

  }

  3.Data-format

  

复制代码 代码如下:

  // 作者: meizz

  // 对Date的扩展,将 Date 转化为指定格式的String

  // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,

  // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)

  // 例子:

  // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2012-12-02 08:12:04.423

  // (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2012-12-02 8:12:4.18

  Date.prototype.Format = function(fmt) {

  var o = {

  "M+": this.getMonth() + 1,                 //月份

  "d+": this.getDate(),                    //日

  "h+": this.getHours(),                   //小时

  "m+": this.getMinutes(),                 //分

  "s+": this.getSeconds(),                 //秒

  "q+": Math.floor((this.getMonth() + 3) / 3), //季度

  "S": this.getMilliseconds()             //毫秒

  };

  if (/(y+)/.test(fmt))

  fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));

  for (var k in o)

  if (new RegExp("(" + k + ")").test(fmt))

  fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));

  return fmt;

  };

  4.日期上增加n天

  

复制代码 代码如下:

  function addDay(number) {

  return fromUnixTime(new Date().getTime() / 1000 + 24 * 60 * 60 * number);

  }

  5. 使用 iframe 时,父窗体与子窗体之间的相互调用

  

复制代码 代码如下:

  // 父窗体调用子窗体内的函数

  window.frames['ifm_id'].valueChange("id_101");

  // 子窗体调用父窗体的函数

  parent.refreshTree("nodeId_202");

  6. 弹出窗体与返回值

  

复制代码 代码如下:

  // 弹出窗体

  var url = "http://www.baidu.com";

  win=window.showModalDialog(url,window,"dialogLeft:400;dialogTop:200;dialogWidth:560px;dialogHeight:380px;scroll:yes;menubar:no;toolbar:no;status:no;");

  // 在弹出窗体中设置返回值

  var result = new Array();

  result[0] = "id_101";

  result[1] = "name_202";

  window.returnValue = result;

  window.close();

  7. javascript 作用域[只有全局作用域和函数作用域,javascript没有块作用域]

  

复制代码 代码如下:

  // 1. 全局作用域

  var id = "global variable";    // 1.1 在函数外部定义的变量

  function showMsg(){

  message = "global message";// 1.2 未定义而直接赋值的变量

  //     在第一次使用时被定义为全局变量

  }

  // 2. 函数作用域

  function doCheck(){

  var data = "function data";// 2.1 在函数内部定义的变量

  }

  8. javascript 继承机制

  

复制代码 代码如下:

  // 1. 对象冒充继承

  function Person(strName){

  // private fields

  var name = strName;

  // public methods

  this.getName = function(){

  return name;

  };

  }

  function Student(strName,strSchool){

  // 定义父类的属性及方法

  this.parent = Person;

  this.parent(strName);

  delete this.parent;        // 删除临时变量 parent

  // 定义新属性及方法

  // private fields

  var school = strSchool;

  // public methods

  this.getSchool = function(){

  return school;

  };

  }

  // 2. Funtion 对象的 call(..) 或 apply(..) 继承

  //    call 和 apply 的区别在于:

  //      call  的第二个参数为可变参数;

  //      apply 的第二个参数为 Array;

  function Animal(strName,intAge){

  // private fields

  var name = strName;

  var age = intAge;

  // public methods

  this.getName = function(){

  return name;

  };

  this.getAge = function(){

  return age;

  };

  }

  function Cat(strName,intAge,strColor){

  // 定义父类的属性及方法

  Animal.call(this,strName,intAge);

  // Animal.apply(this,new Array(strName,intAge));

  // 定义新属性及方法

  // private fields

  var color = strColor;

  // public methods

  this.getInfo = function(){

  return "name:" + this.getName() + "\n"

  + "age:" + this.getAge() + "\n"

  + "color:" + color;

  };

  }

  // 3. prototype 继承

  //    prototype 声明的属性及方法被所有对象共享

  //    prototype 只有在读属性的时候会用到

  Function.prototype.extend = function(superClass){

  // 此处的 F 是为了避免子类访问父类中的属性 this.xxx

  function F(){};

  F.prototype = superClass.prototype;

  // 父类构造函数

  this.superConstructor = superClass;

  this.superClass = superClass.prototype;

  this.prototype = new F();

  this.prototype.constructor = this;

  };

  Function.prototype.mixin = function(props){

  for (var p in props){

  this.prototype[p] = props[p];

  }

  };

  function Box(){}

  Box.prototype = {

  getText : function(){

  return this.text;

  },

  setText : function(text){

  this.text = text;

  }

  };

  function CheckBox(){}

  CheckBox.extend(Box);

  CheckBox.mixin({

  isChecked : function(){

  return this.checked;

  },

  setChecked : function(checked){

  this.checked = checked;

  }

  });

  9. call , apply & bind

  

复制代码 代码如下:

  // thisArg 表示在 fun 内部时 this 所指示的对象

  // call & apply 将立即执行 fun 并返回结果

  var result = fun.call(thisArg,arg1,...);

  var result = fun.apply(thisArg,[argsArray]);

  // thisArg 表示在 fun 内部时 this 所指示的对象

  // bind 返回的是一个匿名函数

  var tmpfun = fun.bind(thisArg);

  var result = tmpfun(arg1,...);

  

复制代码 代码如下:

  <script type="text/javascript">

  /**

  * 扩展 Function 的功能

  */

  Function.prototype.bind = function(obj){

  var method = this;

  var tmpfun = function(){

  return method.apply(obj,arguments);

  };

  return tmpfun;

  }

  function Parent(){

  this.name = "parent";

  }

  function Child(){

  this.name = "child";

  this.getName = function(time){

  return time + " " + this.name;

  };

  }

  var parent = new Parent();

  var child = new Child();

  alert(child.getName(1));                // show 1 child

  alert(child.getName.call(parent,2));    // show 2 parent [call & apply 会立即执行]

  var tmpfun = child.getName.bind(parent);// bind 不会立即执行

  alert(tmpfun(3));                       // show 3 parent

  </script>

  10. js "==" Operator

  

复制代码 代码如下:

  转换规则

  如果一个操作数是 Boolean 值,则比较之前将其转成数字:false -> 0, true -> 1;

  如果一个操作数是数字,另一操作数是字符串,则比较之前将字符串转成数字;

  如果一个操作数是对象,另一操作数是数字或字符串,则比较之前会将对象转为基本类型,

  引擎会先尝试调用 valueOf(),如果 valueOf() 没有 override 或返回一个对象,

  则引擎会尝试调用 toString(),如果 toString() 没有 override 或返回一个对象,则抛出异常;

  如果是两个对象进行比较,则判断它们是否引用同一对象;

  如果一个操作数是 NaN, == 将返回 false, != 将返回 true;

  null 和 undefined 与其它值比较将返回 false,

  但 null == null, undefined == undefined, null == undefined;

  参与比较时 null 和 undefined 不能转为其它值;