js中‘0’到底是true还是false
if ('0') alert("'0' is true");
if ('0' == false) alert("'0' is false");
结果是,两次都 alert
了!那么 ‘0’ 到底是 true
还是 false
呢?
答案是:在js做比较的时候,有这样的三条规则:
- 如果比较的两者中有
boolean
,会把boolean
先转换为对应的number
,即 0 和 1(false是0,1是true) - 如果比较的双方中有一方为
number
一方为string
,会把string
转换为数字
把string
直接转换为boolean
的时候,空字符串‘’转换为false
,除此外的一切字符串转换为true
如果比较的两者中有(boolean
布尔类型 有道词典bool
),先把bool
转换成对应的number
(false
为0,true
为1),即是0
和1
双方中一个是number
一个是string
,会把string
转成对应的数字再做比较
把string
直接转成bool
的之后,空字符串的’'转成false
,除此外其他的字符串转成true
JavaScript高级技巧
惰性载入函数
因为浏览器之间行为的差异,多数JavaScript代码包含了大量的if语句,将执行引导到正确的代码中。例如Ajax 创建XHR对象的过程。
如果if语句不必每次执行,那么代码可以运行地更快些。解决方案就是惰性载入的技巧。
惰性载入表示函数执行的分支仅会执行一次。有两种实现的方式:
(1)在函数被调用时再处理函数,在第一次调用的过程中,该函数会被覆盖为另外一个按合适方式执行的函数,
这样任何对原函数的调用都不用再经过执行的分支了。(重写函数)
(2)在声明函数时就指定适当的函数。这样,第一次调用函数时就不会损失性能了,而在代码首次加载时会损失一点性能。(自执行的匿名函数返回正确函数)
函数级联化
JavaScript级联函数,级联函数也叫链式函数,方法链一般适合对一个对象进行连续操作(集中在一句代码)。
一定程度上可以减少代码量,缺点是它占用了函数的返回值。
JQuery里一个很大的亮点就是它支持链式写法,调用起来非常方便:
其实实现起来非常简单 —— 确保每个调用的方法尾部均返回自身即可。
function Person(){
this.face="";
this.mouth="";
this.eyes="";
}
Person.prototype={
setFace:function(){
this.face="红扑扑";
return this;
},
setMouth:function(){
this.mouth="大嘴";
return this;
},
setEyes:function(){
this.eyes="小眼";
return this;
}
};
var person=new Person();
person.setFace().setMouth().setEyes();
console.log(person);
函数柯里化
函数柯里化用于创建已经设置好了一个或多个参数的函数,基本方法:使用一个闭包返回一个函数,当函数被调用时,返回的函数还要设置一些传入的参数。
柯里化函数通常由以下步骤动态创建:调用另一个函数并为它传入要柯里化的函数和必要的参数。
function curry(fn){
var args=Array.prototype.slice.call(arguments,1);//将arguments转为真正的数组,并传入参数1表示返回的数组包含从第二个参数开始的所有参数
return function(){
var innerArgs=Array.prototype.slice.call(arguments);
var finalArgs=args.concat(innerArgs);
return fn.apply(null,finnalArgs);//使用apply传递参数给函数
}
}
js中return;、return true、return false;区别
一、返回控制与函数结果,
语法为:return 表达式;
语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果
二、返回控制,
无函数结果,语法为:return;
在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个元素,页面会跳转到该元素href属性指定的页.
Return False 就相当于终止符,Return True 就相当于执行符。
在js中return false的作用一般是用来取消默认动作的。比如你单击一个链接除了触发你的
onclick事件(如果你指定的话)以外还要触发一个默认事件就是执行页面的跳转。所以如果
你想取消对象的默认动作就可以return false。
首先在js中,我们常用return false来阻止提交表单或者继续执行下面的代码,通俗的来说就是阻止执行默认的行为。
function a(){
if(True)
return false;
}
,这是没有任何问题的。
如果我改成这种
function Test(){
a();
b();
c();
}
即使a函数返回return false
阻止提交了,但是不影响 b()以及 c()函数的执行。在Test()函数里调用a()函数,那面里面
return false
对于Test()函数来说,只是相当于返回值。而不能阻止Test()函数执行。
总之:return false 只在当前函数有效,不会影响其他外部函数的执行。
三:总结
retrun true; 返回正确的处理结果。
return false;分会错误的处理结果,终止处理。
return;把控制权返回给页面。
Js实现web页面一段时间没操作,退出或关闭页面
1. 思路
js
设置一个倒计时,当监听到keydown mousemove mousedown
等事件时,重置倒计时。若倒计时为0
时,触发相应事件。
2. 实现
注:需要引入JQuery
<script src="http://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script>
核心代码段
/* if 5 minutes no operation then logout --liaotuo@2017.8.20 */
var maxTime = 300; // seconds
var time = maxTime;
$('body').on('keydown mousemove mousedown', function(e) {
time = maxTime; // reset
});
var intervalId = setInterval(function() {
time--;
if (time <= 0) {
ShowInvalidLoginMessage();
clearInterval(intervalId);
}
}, 1000)
function ShowInvalidLoginMessage() {
alert("您已经长时间没操作了,即将退出系统");
//TODO 做需要做的操作
//exp:关闭页面
window.close();
}