1. 程式人生 > >JavaScript高級程序設計學習(二)之基本概念

JavaScript高級程序設計學習(二)之基本概念

參數調用 name btn 記得 mco 多說 body 運維 rstp



任何語言的核心都必然會描述這門語言基本的工作原理。而描述的內容通常都要涉及這門語 言的語法、操作符、數據類型、內置功能等用於構建復雜解決方案的基本概念。如前所述, ECMA-262通過叫做 ECMAScript的“偽語言”為我們描述了 JavaScript的所有這些基本概念

本篇文章主要講語法,類型,操作符,語句和函數。

任何編程,都是從基礎的語法開始,例如java,java也有基礎語法,操作符,數據類型,控制語句等。c++,php,python也同理。

js與java在變量上有其共同點,這也是很多編程語言也有的共性:

一、語法

變量命名:

1.區分大小寫,例如在js中給變量命名可以是var,也可以是let, var t和vat T是兩個變量,而並不是一個變量;

2.標識符,不能以數字開頭,第一個字符必須是一個字母,下劃線或$符號,建議命名駝峰命名法,首字母小寫,剩下的第二個單詞字母大寫;

3.不得以關鍵字和保留字進行命名,例如True命名可以,true則不行,因為true是js的基本數據類型boolean類型;

關鍵字:

技術分享圖片

保留字:

技術分享圖片

當然上述列出的只是一部分,還有其他,其他可以去w3school參考:http://www.w3school.com.cn/js/

變量有這麽幾種類型?

1.number

2.string

3.boolean

4.undefined

5.Object

上述js數據類型分別對應數字,字符串,布爾,未定義,對象等類型

typeof操作符可以得到該變量的類型

說到基本數據類型,不得不提一個類型轉換,類型轉換報錯是很常見的:

類型轉換應用:

比如字符串1,2,3,或者3.24,true等,我如何將其轉換為數字類型,可使用parseInt(),parseFloat(),parseDouble()等方法可以進行轉換

數字如何轉字符串,toString()方法即可解決

undefined,有的時候我們添加數據時,有那麽幾個非必填項,但在列表展示時,常常展示為undefined,為什麽會出現undefined,因為沒有初始值,在java中int類型可默認初始值為0,聲明尚未實現可以這樣,js就不能這樣,所以我們通常就要寫if判斷,當等於這個undefined時,我們給它賦個空串。

操作符也是開發中常用的,一元操作符,運算符,位操作符,布爾操作符,關系操作符,條件操作符,在這裏我只說關系和條件,因為這兩個用的比較多,當然還有布爾操作符,一元操作符,運算符等,位運算符,用的少,幾乎沒用過。

一元操作符類似於我們的if(condition){}else{},運算符,加減乘除,特別是關於購物車錢的計算及其日期的計算,例如下圖示例:

//本周    
    var date = new Date();
    // 本周一的日期
    date.setDate(date.getDate() - date.getDay() + 1);
    var begin = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " 00:00:00";
    // 本周日的日期
    date.setDate(date.getDate() + 6);
    var end = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " 23:59:59";
   
    

//當天
      var year = now.getFullYear();       //年
      var month = now.getMonth() + 1;     //月
      var day = now.getDate();  //日
      var current=year+"-"+month+"-"+day;

//最近一個月
 function timeForMat (count) {
       // 拼接時間
       let time1 = new Date()
    time1.setTime(time1.getTime() - (24 * 60 * 60 * 1000))
       let Y1 = time1.getFullYear()
       let M1 = ((time1.getMonth() + 1) > 10 ? (time1.getMonth() + 1) : ‘0‘ + (time1.getMonth() + 1))
       let D1 = (time1.getDate() > 10 ? time1.getDate() : ‘0‘ + time1.getDate())
       let timer1 = Y1 + ‘-‘ + M1 + ‘-‘ + D1 // 當前時間
       let time2 = new Date()
       time2.setTime(time2.getTime() - (24 * 60 * 60 * 1000 * count))
       let Y2 = time2.getFullYear()
       let M2 = ((time2.getMonth() + 1) > 10 ? (time2.getMonth() + 1) : ‘0‘ + (time2.getMonth() + 1))
       let D2 = (time2.getDate() > 10 ? time2.getDate() : ‘0‘ + time2.getDate())
    let timer2 = Y2 + ‘-‘ + M2 + ‘-‘ + D2 // 之前的7天或者30天
       return {
         t1: timer1,
      t2: timer2
        }
      }

 var timer = timeForMat(30)
    alert(timer.t1)

布爾操作符,也比較常用,與(&),或(||),非(!)

關系操作符 小於(<)、大於(>)、小於等於(<=)和大於等於(>=)這幾個關系操作符用於對兩個值進行比 較,比較的規則與我們在數學課上所學的一樣。

條件操作符類似我們的if..else


(1)var max = (num1 > num2) ? num1 : num2;

(2)if(num1>num2){

alert(num1)

}else{

alert(num2)

}

(1)和(2)實際上是一樣的,沒多大區別。不過註意的是寫if時,連else也寫了吧,這樣邏輯清晰,還有if(){},這個{}可以省略,但建議不要省略。

二、語句

1.if語句

這個常用,就不多說了,總而言之,寫if,要寫就寫全套,不要省略else

if的話表單驗證用的挺多的,我開發用的js驗證全部用if

例如:

常見的密碼一致性問題

    if(password==null||password==""){
            alert("密碼不能為空");
            return false;
        }else if(password2==null||password2==""){
            alert("確認密碼不能為空");
            return false;
        }else if(password!=password2){
            alert("兩次輸入密碼不一致");
            return false;
                 }else{
        //ajax請求,這裏省略
        }                

2.do..while(condition)

註意:do..while和java中的一樣,至少執行一次

不會出現當條件不滿足時,不執行。先執行再判斷,用這句話形容do..while非常合適

開發中的話,我個人不常用,當然應用場景的話,可以用作於數據初始化

3.while(conditioini)

先判斷再執行,有可能一次都不執行

while的話,用的不多,應用場景當滿足條件時,進行函數調用。不過註意,如果代碼存在邏輯問題又或者其他原因,可能導致死循環或者瀏覽器崩潰。

4.for循環

這個玩意好啊,用的最多,不過用之不慎的話,也會導致死循環。記得某個幽默的大牛對我說,十年前,初次做開發,別人問他,你會什麽,他回答說,我就會for循環。

for循環,我應用的地方是:

// 數據展示
var loadData3 = function(list) {

    $("#s10_tbody tr[value != ‘‘]").remove();

    var rows = "";
    var comuStatus = "";
    // 數據遍歷
    for (var i = 0; i < list.length; i++) {
        var comuStatus = list[i].comuStatus
        if (comuStatus == 1) {
            comuStatus = "正常";
        } else {
            comuStatus = "異常";
        }

        rows = rows + ‘<tr>‘;
        rows = rows + ‘  <td>‘ + list[i].id + ‘</td>‘;
        rows = rows + ‘  <td>‘ + comuStatus + ‘</td>‘;
        rows = rows + ‘  <td>‘ + list[i].time + ‘</td>‘;
        rows = rows + ‘</tr>‘;

    }

    $("#s10_tbody").append(rows);

}

5.for in

對於這個玩意,我應用的場景如圖所示:通常for in是針對數組或集合

      
    //按條件查找鎖
    function searchLock(index,size) { 
        $(".list [value != ‘‘]").remove();

        //用戶ID
        var userId=$("#userId").val();
        //門鎖編碼
        var lockNo = $("#lock_no_search").val();
        //房間編碼
        var roomCode = $("#room_no_search").val();
        //房源編碼
        var houseCode = $("#house_bm_search").val();
        
        //省市區
        var province = $("#province").find("option:selected").text();
        var city = $("#city").find("option:selected").text();
        var district = $("#district").find("option:selected").text();
        //安裝地址
        var region = province+"_"+city+"_"+district;
        //地址
        var address = $("#address").val();
    
        
        $.ajax({  
            type : "POST",  
            url : "lock/list",  
            data : {  
                userId : userId,
                lockNo:lockNo,
                roomCode:roomCode,
                houseCode:houseCode,
                region:region,
                address:address,
                pageIndex:index,  
                pageSize:size  
            },
            dataType : ‘json‘,
            success : function(data) {  
                
            var json = eval("("+data+")");
            
            //總數
            lockCount=json.lines;
           
           $("#locknum").html(lockCount);
        
           if(lockCount!=0){
               //將後臺集合裝載入list
               var list = json.lockList;
               for (i in list){
                var lockNo = list[i].lock_no;
                var houseCode = list[i].houseCode;
                var roomCode = list[i].roomCode;
                var type = list[i].type;                
                var doorsensor = list[i].doorsensor;
                var comuStatus = list[i].comuStatus;
                var power = list[i].power;
                var region = list[i].region;
                var address = list[i].address;
                var installTime = list[i].installTime;
                var name = list[i].name;
                var nodeNo = list[i].nodeNo;
                if(type==1){
                    type="二代433門鎖";
                }
                
                if(doorsensor==1){
                    doorsensor="是";
                }else{
                    doorsensor="否";
                }
                if(comuStatus==1){
                    comuStatus="強";
                }             
                var rows=""
                    +"<span class=‘fl lockinfo lockcheck‘ style=‘width:7%;‘>  <a class=‘checks‘ href=‘javascript:;‘ data-id=‘162235c895b065‘ data-node-comu=‘00‘ data-node-type=‘3‘ checks=‘false‘></a> </span>"
                    +"  <span class=‘fl ip-p lockinfo‘><a target=‘_blank‘ href=‘lockPassword.html?lockNo="+lockNo+"‘ class=‘listss-l‘>"+lockNo+"</a></span>"
                       +"<span class=‘fl code-p lockinfo‘>"+houseCode+"</span>"
                       +"<span class=‘fl room-p lockinfo‘>"+roomCode+"</span>"
                       +"<span class=‘fl lock-p lockinfo‘>"+type+"</span>"
                       +"<span class=‘fl magnetic-p lockinfo‘>"+doorsensor+"</span>"
                       +"<div class=‘fl commit-p lockinfo‘><span class=‘ico ico-cmt-s4‘></span><p class=‘green‘>"+comuStatus+"</div>"
                    +"<span class=‘fl qua-p lockinfo‘><div class=‘iconfont icon-icon-test20 green‘></div><div>"+power+"%</div></span>"
                    +"<span class=‘fl add address lockinfo‘><span style=‘display:none‘>"+region+"</span>"+address+"</span>"
                    +"<span class=‘fl time-p lockinfo‘>"+installTime+"</span>"
                    +"<span class=‘fl ope-p lockinfo‘>"+name+"</span>"
                    +"<span class=‘fl gate-p lockinfo‘>"+nodeNo+"</span>"
                    +"<span class=‘fl lockinfo lockope‘><a class=‘opebtn opechange‘ href=‘lockPassword.html?lockNo="+lockNo+"‘ data-node=‘3‘ style=‘display: inline;‘>編輯</a></span>";            
                    $(".list").append(rows); 
            }


           var page=‘<div id="userPage" align="center" ><font size="2">共‘  
                (lockCount+pageSize-1)/pageSize+‘頁</font> <font size="2">第‘  
                +(pageIndex+1)+‘頁</font> <a href="javascript:void" onclick="GoToFirstPage()" id="aFirstPage" >首頁</a> ‘  
                +‘<a href="javascript:void" onclick="GoToPrePage()" id="aPrePage"  >上一頁</a>  ‘  
                +‘<a href="javascript:void" onclick="GoToNextPage()" id="aNextPage" >下一頁</a>  ‘  
                +‘<a href="javascript:void" onclick="GoToEndPage()" id="aEndPage" >尾頁</a>  ‘;  
                page+=‘</div>‘;  
                $("#lockPage").html(page);  
              //  document.getElementById("dltitle").innerHTML = "查找結果如下";  
           }       
            },error:function(){
                alert("有異常");
            }  
            
        });  
    }  

6.switch

這個switch的話,我覺得也很有用,可以針對不同的條件和參數調用不同的函數,挺有用的,不過我用的不多,可能是因為沒有領會它的真諦吧,說到底就是用的太少不熟練。

應用場景的話,前後端分離,用的展示層就是html,如何進行權限控制呢?就通過switch,通過全局js函數獲得用戶角色,根據該角色,進行訪問資源判斷。例如,

不過這裏的角色是有限的,基本定義為普通人員,安裝人員,運維,admin或者root等四到五個角色,如果想crm或erp之類的,角色很多,萬不可通過這種形式來定義對資源的訪問。

三、函數

這個不能不提啊,現在我寫的最多的就是js函數

突然讓我想起了Linux,linux中的shell,shell腳本的基礎就是linux的命令的集合體,記得在上家公司一位同事寫監控服務器腳本就是用的函數,函數方便復用和模塊化,什麽是模塊化呢?我個人的理解是,比如我寫的一個用戶管理界面,引用的js文件主要是用戶管理相關js,該js文件專心於用戶管理界面上的一切操作。

JavaScript高級程序設計學習(二)之基本概念