欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

javascript常用代码段搜集_javascript技巧

程序员文章站 2022-04-30 11:50:40
...
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 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,...);

复制代码 代码如下:


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 不能转为其它值;