JS源碼(條件的判定,迴圈,數組,函數,對象)整理摘錄

来源:http://www.cnblogs.com/hoten/archive/2016/04/28/5444395.html
-Advertisement-
Play Games

title: JS學習筆記-從條件判斷語句到對象創建 date: 2016-04-28 21:31:13 tags: [javascript,front-end] JS學習筆記——整理自《JavaScript高級程式設計》 1)條件的判定 在if,swtich條件判斷語句,do-while,whil ...


 ---
title: JS學習筆記-從條件判斷語句到對象創建
date: 2016-04-28 21:31:13
tags: [javascript,front-end]
---
JS學習筆記——整理自《JavaScript高級程式設計》

1)條件的判定

在if,swtich條件判斷語句,do-while,while,for三種迴圈判斷語句中會用到條件的判斷,其目的是為了判定某種條件的達成與否來控制語句的執行。

e.g. 

 1     if(condition)
 2 
 3     do{} while(condition)
 4 
 5     for(initialization;condition;post-loop-expression){}
 6 
 7     switch(expression){
 8     case condition:
 9     break;
10     default:
11     break;
12     }

 



以上例子中的condition就是條件的判斷的語句。condition語句可以是任意表達式,ES會自動將表達式的結果轉為布爾值。

另外,switch的expression如寫成true,可以在之後的condition中寫入表達式,以此可以模仿if的判斷行為。
s.e.g.

1     switch(true){
2     case (i>0):
3         i++;
4     }

 


2)迴圈

一.do-while語句是一種後測試迴圈語句,迴圈體內的代碼至少會迴圈一次。
e.g.

1     var I =0;
2     do {
3         i+2;
4     }while(i<10);

 


二.While語句是前測試迴圈語句,迴圈體的代碼可能一次也不會執行。
e.g.

1     var I = 0;
2     while (i <10) {
3     i+2;
4     }

 


三.for語句也是前測試迴圈語句,但是它具備while所沒有的初始化變數和定義迴圈後要執行代碼的能力。for 和 while 的迴圈功能是一樣的,while 做不到for也做不到。
e.g.

1     var count=10;
2     for(var i=0;i<count;i++){
3         alert(i);
4         i++;
5     }

 



四.for-in 語句用來迴圈枚舉對象的屬性。迴圈會持續到對象的所有屬性都被枚舉一遍為止。單次迴圈時會將枚舉到的一個屬性名賦予in前的變數。
e.g.

1     for (var proName in window) {
2         document.write(propName);
3     }

 

3)數組

Array是數據的有序列表,數組的每一項可以保存任意類型的數據,而且數組的長度可以隨時變化。
創建數組的方法:
1.使用Array 構造函數:

    var colors = new Array(20);

 


聲明瞭一個擁有20長度的colors數組。

    var colors = new Array(“red”,”blue”,”green”);

 


聲明瞭一個擁有3長度的colors數組,並把三個顏色值寫入了數組的前三項。

2.使用數組字面量:

    var colors = [“red”,”blue”,”green”];

 


聲明瞭一個擁有3長度的colors數組,並把三個顏色值寫入了數組的前三項。

各種屬性值與方法:

    .length屬性可寫入。
    instance of Array 可判斷對象是否是數組。ES5之後的版本可用.is Array()判斷對象是否是數組。
    .toString(),toLocalString() 會返回逗號分隔的字元串,其中toLocalString()對每一項數值調用的是toLocalString()方法。
    .valueOf() 返回的是數組。
    .join()方法可以通過傳遞的指定的字元來分隔原數組,返回的是分隔後的字元串。

棧方法:
後進先出。

    .push()接受任意數量的參數,逐個添加到數組末尾,返回的是修改後數組的長度。
    .pop()不接受參數,每次調用pop()都會移除數組的最後一項並作為pop()的值返回。

隊列方法:
先進先出。

    .shift()移除數組的第一項,並作為值返回,與pop()對應。
    .unshift()在數組開頭添加任意項,並返回修改後的數組長度,與push()相對應。

重排序方法:

    .sort():
        能將數組內的各項按順序重新排序,預設為按照ASCII碼進行升序排序。
        能接受一個比較函數作為參數,比較函數內的兩個參數進行比較:

        e.g.

1             function compare(value1,value2){
2                 if (value1 < value2){
3                 return 1;
4             }else if (value1 > value2){
5                 Return -1;
6             }else{
7                 Return 0;
8             }
9             }

 


用這個比較函數返回給.sort()的話,數組會按照數值的從小到大進行排序,將上述的return值互調的話,數組會按照數值的從大到小排序。
    
    .reverse():將數組所有項的順序取反並返回取反後的數組。


操作方法
    .concat():將接受的參數連接在原數組的後面。如果接受的參數是一個數組,將會把數組中的每一項提取後單獨加入到原數組中。

    .slice():接受一到兩個參數,創建一個新的數組,包含從第一個參數為止到第二個參數為止的所有數據項,不包含第二個參數位置的項。如果沒有第二個參數,則執行到數組最末尾。

    .splice():拼接方法,第一個參數表示起始位置,第二個參數表示要刪除的數組項數,之後的參數表示要從第一個參數的位置開始要插入的數據。通過第一第二個參數的變化,可以模擬push,pop,shift,unshift的四種方法達到同樣的效果,本身的意義在於在數組中插入數據。

位置方法
    .indexOf():查找指定的項,第一個參數表示要查找的數據項,第二個參數表示要開始查詢的位置。lastIndexOf()則是從數組的後面開始。

##4)函數
聲明式:

    function functionName(){  };

表達式:

    var functionName = function(){  }

聲明式會提升該段代碼的優先順序,解析器會在所有代碼之前讀取函數聲明。
表達式不會提升優先順序,函數名只是指向函數的指針,將函數名賦予一個變數只是賦予了引用類型。
JS中函數沒有重載的概念,後定義的函數會覆蓋之前的函數。
    arguments指代了函數的所有參數,是一個數組,arguments.callee方法指向arguments的調用函數。
    .caller方法指向了調用當前函數的函數。
    .apply() 和.call()兩個方法的作用是讓函數在特定的作用域中調用函數。
    this指代了當前執行環境的主體。
##5)對象
ES中的對象就是一組數據和功能的集合,創建Object類型的實例並給它添加屬性和方法,就可以自定義對象。
除Object外,Array,Date,RegExp,Function,Boolean,Number,String,Global,Math等這些也都是對象。
創建Object的兩鐘基礎方法:

e.g.
 

    var person = new Object();
    Person.name = “Peter”;

 


這種方法是使用new操作符加Object構造函數。

對象字面量:
e.g.

    Var person = {
    Name : ”Peter”,
    Age:29;
    };

 


使用對象字面量法定義對象,不會調用Object的構造函數,更常使用。

為瞭解決使用同一個介面創建很多對象,產生大量重覆代碼的問題,出現了後面幾種創建對象的方法:

·工廠模式

 1     function createPerson(name,age,job){
 2       var o =new Object();
 3       o.name = name;
 4       o.age = age;
 5       o.job = job;
 6       o.sayName = function(){
 7         alert(this.name);
 8       };
 9       return o;
10     }

 



解決了創建多個相似對象的問題,但沒有解決對象識別的問題。

·構造函數模式

1     function createPerson(name,age,job){
2       this.name = name;
3       this.age = age;
4       this.job = job;
5       this.sayName = function(){
6         alert(this.name);
7       };
8     }

 


構造函數模式可以將它的實例識別為一種特定的類型,解決了對象識別的問題。但是每個方法都要在每個實例上重新創建一邊。

·原型模式
通過調用每個函數都有的prototype原型屬性來創建共用屬性和方法的實例。

1     function Person(){
2     }
3     Person.prototype.name ="Peter";
4     Person.prototype.age = 20;
5     Person.prototype.sayName =function(){
6         alert(this.name);
7     }
8 
9     var person1 = new Person();

 


原型模式下,實例中創建的屬性會屏蔽原型中的屬性,而對原型對象所做的任何修改都能立即從實例上反應出來。

·組合使用構造函數和原型模式

 1     function Person(name,age){
 2       this.name =name;
 3       this.age = age;
 4     }
 5     Person.prototype = {
 6       constructor:Person,
 7       sayName : function(){
 8         alert(this.name);
 9       }
10     }
11 
12     var person1 = new Person("Peter",20);

 


實例屬性在構造函數中定義,實例共用的屬性和方法在原型中定義,這種方法可能最適合。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 依賴倒轉原則: A.高層模塊不應該依賴底層模塊,兩個都應該依賴抽象。 B.抽象不應該依賴細節,細節應該依賴抽象。 里氏代換原則: 子類型必須能夠替換掉他們的父類型。只有當子類可以替換掉父類,軟體單位的功能不受到影響時,父類才能真正被覆用,而子類也能過在父類的基礎上增加新的行為。只有子類型的可替換性才 ...
  • 開放-封閉原則,是說軟體實體(類,模塊,函數等)應該可以擴展,但是不可以修改的。換句話說就是,這個原則有兩大特征,對於擴展是開放的(Open for extension),另一個就是對於更改是封閉的(close for modification)。 但是,無論模塊多麼封閉都會存在一些無法對之封閉得到 ...
  • 在前面一篇博客中介紹了“命令模式”(Command Pattern),今天博客的主題是“適配器模式”(Adapter Pattern)。適配器模式用處還是比較多的,如果你對“適配器模式”理解呢,那麼自然而然的就會知道其使用場景。今天這篇博客我們就舉一個生活中的使用適配器模式的示例,然後將該示例使用代 ...
  • 單一職責原則(SRP):就一個類而言,應該僅有一個引起它變化的原因。 如果一個類承擔的職責過多,就等於把這些職責耦合在一起,一個職責的變化可能會小若或則抑制這個類完成其他職責的能力。這種耦合會當值脆弱的設計,當發生變化時,設計會發生意想不到的破壞。 軟體設計真正要做到許多內容,就是發現職責,並把那些 ...
  • 聲明: 一、nodejs是什麼 前段時間,偶然得到了一次跟幾個大牛學長學習的機會,他們正在做一個startup的項目,構建網站所使用的就是nodejs;對這個最近牛哄哄的東西,自己也只是略有耳聞,從何下手呢,打開百度,google一下。 首先,nodejs不是一種什麼編程語言,而是一個可以讓java ...
  • 在PC版開發中由於IE原因,我們很少用到css3,但隨著平板和智能手機進入我們的生活,以及現在越來越流行,在手機版和平板版開發中我們就可以大膽的使用了,下麵我們探討常用幾個css3屬性: 1.css3首碼使用介紹,我們直接看個例子: -webkit-transform:rotate(-3deg);  ...
  • 這是我讀的第一本關於JS的書,剛開始我為了選擇合適的學習JS的書,看了網上許多人的意見,基本上都是推薦先讀這本書。書的內容挺簡單的,確實很適合初學者看,閱讀的過程中不會產生什麼障礙。內容雖然簡單,但我覺得還是挺有收穫的,之前我主要是通過看視頻學習JS的,看了好些視頻,瞭解了好些概念,但對好多概念都是 ...
  • 柯理化函數思想:一個js預先處理的思想;利用函數執行可以形成一個不銷毀的作用域的原理,把需要預先處理的內容都儲存在這個不銷毀的作用域中,並且返回一個小函數,以後我們執行的都是小函數,在小函數中把之前預先存儲的值進行相關的操作處理即可; 柯里化函數主要起到預處理的作用; bind方法的作用:把傳遞進來 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...