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),即是01
双方中一个是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();
        }

本文转载:CSDN博客