本章没有深奥的讲解js一些底层原理,比如this指针、作用域、原型啦,涉及的都是一些有利于平时开发时简化代码,提高执行效率,或者说可以当做一种经验方法来使用,篇幅都不长,小步快跑的让你阅读完整篇文章,体验编程的快乐。
获取两个区间之内随机数
代码如下:
Max)
Max = [Min,Min = Max][0]; // 快速交换两个变量值
var Range = Max - Min + 1;
var Rand = Math.random();
return Min + Math.floor(Rand * Range);
};
随机返回一个 正/负参数
代码如下:
随机返回一个 正/负参数
num = new Number(num);
if (Math.random() <= 0.5)
num = -num;
return num;
}
setInterval()或setTimeOut()计时器函数传参
代码如下:
setInterval()或setTimeOut()计时器递归调用
代码如下:
字符串转换为数字
代码如下:
空值判断
代码如下:
IE浏览器parseInt()方法
代码如下:
Firebug便捷调试js代码
代码如下:
方法,用来显示信息
/**
* 1:console.log(),可以用来取代alert()或document.write(),支持占位符输出,字符(%s)、整数(%d或%i)、浮点数(%f)和对象(%o)。如:console.log("%d年%d月%d日",2011,3,26)
* 2:如果信息太多,可以分组显示,用到的方法是console.group()和console.groupEnd()
* 3:console.dir()可以显示一个对象所有的属性和方法
* 4:console.dirxml()用来显示网页的某个节点(node)所包含的html/xml代码
* 5:console.assert()断言,用来判断一个表达式或变量是否为真
* 6:console.trace()用来追踪函数的调用轨迹
* 7:console.time()和console.timeEnd(),用来显示代码的运行时间
* 8:性能分析(Profiler)就是分析程序各个部分的运行时间,找出瓶颈所在,使用的方法是console.profile()....fn....console.profileEnd()
*/
快速取当前时间毫秒数
代码如下:
调用Date的valueOf()方法。
var t = +new Date();
快速取小数整数位
代码如下:
两个变量值互换(不用中间量
) 代码如下:
逻辑或'||'运算符
代码如下:
只有方法对象才有prototype原型属性
代码如下:
方法有对象原型prototype属性,而原始数据没有该属性,如 var a = 1, a没有prototype属性
function Person() {} // 人的构造函数
Person.prototype.run = function() { alert('run...'); } // 原型run方法
Person.run(); // error
var p1 = new Person(); // 只有在new操作符时,此时才会把原型run方法赋值给p1
p1.run(); // run...
快速获取当天为星期几
代码如下:
闭包偏见
代码如下:
方法体都可以称为一个闭包,并非什么只有内嵌函数来引用了外部函数的某个参数或属性才会发生。
* 它有一个独立作用域,在该作用域内可存在若干的子作用域(就是方法嵌套方法),最终该闭包作用域为最外层方法的作用域
* 它包含了本身方法参数和所有内嵌函数的方法参数,所以当一个内嵌函数在外部有引用时,该引用的作用域为引用函数所在的(顶级)方法作用域
*/
function a(x) {
function b(){
alert(x); // 引用外部函数参数
}
return b;
}
var run = a('run...');
// 由于作用域的扩大,可以引用到外部函数a的变量并显示
run(); // alert(): run..
获取地址参数字符串和定时刷新
代码如下:
获取问号?后面的内容,包括问号
var x = window.location.search
// 获取警号#后面的内容,包括#号
var y = window.location.hash
// 配合定时器可实现网页自动刷新
window.location.reload();
Null和Undefined
代码如下:
函数企图返回一个不存在的对象。
* ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的。
* 但是,如果在一些情况下,我们一定要区分这两个值,那应该怎么办呢?可以使用下面的两种方法
* 在进行判断时根据需要,判断对象是否有值时最好用‘==='强类型判断。
*/
var a;
alert(a === null); // false,因为a不是一个空对象
alert(a === undefined); // true,因为a未初始化,值为undefined
// 引申
alert(null == undefined); // true,因为‘=='运算符会进行类型转换,
// 同理
alert(1 == '1'); // true
alert(0 == false); // true,false转换为Number类型为0
给方法动态添加参数
代码如下:
方法a多了一个参数2
function a(x){
var arg = Array.prototype.push.call(arguments,2);
alert(arguments[0]+'__'+arguments[1]);
}
自定义SELECT边框样式
代码如下:
最简单的调色盘
代码如下:
函数、对象 is 数组?
代码如下:
属性
anObject.aMethod = function(){alert(“Method of object”)}; //对象的一个方法
//主要看下面:
alert(anObject[“aProperty”]); //可以将对象当数组以属性名作为下标来访问属性
anObject[“aMethod”](); //可以将对象当数组以方法名作为下标来调用方法
for( var s in anObject) //遍历对象的所有属性和方法进行迭代化处理
alert(s + ” is a ” + typeof(anObject[s]));
// 同样对于function类型的对象也是一样:
var aFunction = function() {}; //一个函数
aFunction.aProperty = “Property of function”; //函数的一个属性
aFunction.aMethod = function(){alert(“Method of function”)}; //函数的一个方法
//主要看下面:
alert(aFunction[“aProperty”]); //可以将函数当数组以属性名作为下标来访问属性
aFunction[“aMethod”](); //可以将函数当数组以方法名作为下标来调用方法
for( var s in aFunction) //遍历函数的所有属性和方法进行迭代化处理
alert(s + ” is a ” + typeof(aFunction[s]));
代码如下:
函数可以象数组一样,用属性名或方法名作为下标来访问并处理。
* 那么,它到底应该算是数组呢,还是算对象?我们知道,数组应该算是线性数据结构,线性数据结构一般有一定的规律,适合进行统一的批量迭代操作等,有点像波。
* 而对象是离散数据结构,适合描述分散的和个性化的东西,有点像粒子。
* 因此,我们也可以这样问:JavaScript 里的对象到底是波还是粒子?如果存在对象量子论,那么答案一定是:波粒二象性!
* 因此,JavaScript里的函数和对象既有对象的特征也有数组的特征。这里的数组被称为“字典”,一种可以任意伸缩的名称值对儿的集合。其实, object和function的内部实现就是一个字典结构,但这种字典结构却通过严谨而精巧的语法表现出了丰富的外观。正如量子力学在一些地方用粒子来 解释和处理问题,而在另一些地方却用波来解释和处理问题。你也可以在需要的时候,自由选择用对象还是数组来解释和处理问题。只要善于把握 JavaScript 的这些奇妙特性,就可以编写出很多简洁而强大的代码来。
*/
点击空白处能触发某一元素关闭/隐藏
代码如下:
页面有个下拉菜单或者什么的效果,需要用户点击空白处或者点击其他元素时将其隐藏
* 可用一个全局document点击事件来触发
* @param {Object} "目标对象"
*/
$(document).click(function(e){
$("目标对象").hide();
});
/**
* 但是有一个缺点就是当你点击该元素又想让他显示
* 如果你不及时阻止事件冒泡至全局出发document对象点击时,上面方法就会执行
*/
$("目标对象").click(function(event){
event = event || window.event;
event.stopPropagation(); // 当点击目标对象时,及时阻止事件冒泡
$("目标对象").toggle();
});
以上都是个人整理的一些常用的javascript小方法,记录下来方便自己开发时直接拿来使用,这里也推荐给有需要的小伙伴。