JavaScript知識點彙總

風靈使發表於2018-05-09

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

相關文章