JavaScript知识点汇总

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 truereturn 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();
        }

用JS获取两个数之间的随机数

用JS获取1-100的随机数

function sum (m,n){
  var num = Math.floor(Math.random()*(m - n) + n);
  alert(num)
}
sum(1,100)

万能 公式,不管多少范围的随机数都可以取到


window.location.hrefreplace方法的区别

  1. window.location.href=“url”:改变url地址;

  2. window.location.replace(“url”):将地址替换成新url,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,你不能通过“前进”和“后 退”来访问已经被替换的URL,这个特点对于做一些过渡页面非常有用!


Polyfill释义

Polyfill 是一块代码(通常是 Web 上的 JavaScript),用来为旧浏览器提供它没有原生支持的较新的功能。

比如说 polyfill 可以让 IE7 使用 Silverlight 插件来模拟 HTML Canvas 元素的功能,或模拟 CSS 实现 rem 单位的支持,或 text-shadow,或其他任何你想要的功能。


padStart()padEnd()自定义

如果原生环境不支持该方法,在其他代码之前先运行下面的代码,将创建 String.prototype.padStart() 方法。

if (!String.prototype.padStart) {
    String.prototype.padStart = function padStart(targetLength,padString) {
        targetLength = targetLength>>0;
        padString = String((typeof padString !== 'undefined' ? padString : ' '));
        if (this.length > targetLength) {
            return String(this);
        }
        else {
            targetLength = targetLength-this.length;
            if (targetLength > padString.length) {
                padString += padString.repeat(targetLength/padString.length); 
            }
            return padString.slice(0,targetLength) + String(this);
        }
    };
}
if (!String.prototype.padEnd) {
    String.prototype.padEnd = function padEnd(targetLength,padString) {
        targetLength = targetLength>>0; 
        padString = String((typeof padString !== 'undefined' ? padString: ''));
        if (this.length > targetLength) {
            return String(this);
        }
        else {
            targetLength = targetLength-this.length;
            if (targetLength > padString.length) {
                padString += padString.repeat(targetLength/padString.length); 
            }
            return String(this) + padString.slice(0,targetLength);
        }
    };
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值