js基礎知識

劍未佩妥發表於2018-06-26

js獲取元素:

  • getElementById()----靜態方法,前面只能跟隨document
  • document.body,document.title ----頁面上只有一個的元素
  • getElementsByTagName()-----動態方法,前面可以是document也可以跟其他元素,返回的是一個類似陣列的集合
    (1)有類似陣列的length
    (2)有類似陣列的應用方式例如:ali[0]
    (3)再用TagName的時候必須要加上[]
    (4)所謂的動態方法,是指通過js動態新增的元素,getElementsByTagName()也可以找到
    但是document.getElementById是找不到的

js常用滑鼠事件:

  • onclick   點選
  • onmouseover  滑鼠移動到上面
  • onmouseleave 滑鼠移除
  • onmousedown 事件會在滑鼠按鍵被按下時發生。
  • onmouseout 事件會在滑鼠指標移出指定的物件時發生。
  • onmouseup 在使用者滑鼠按鍵被鬆開時執行
  • onmousemove 事件會在滑鼠指標移動時發生。

函式:

function abc(){ 

 /*要做的事情*/ 

}

  • 直接呼叫就是abc()
  • 事件呼叫: 元素.事件 = 函式名
  • 匿名函式

 元素.onmouseover = function(){} window.alert(1); window.alert("ok");

資料型別:

  • 物件
  • undefined
  • Boolean
  • String
  • number
(1)要是基礎型別可以用typeOf()來判斷
字串方法charAt(),獲取到字串第幾個charCodeAt()獲取到UniCode編碼。然後在計算。再利用fromCharCode()換算成字元
(2)要是引用型別可以用instanceOf Array;instanceOf Object 來判斷
Number()方法能轉化字串數字,空,空陣列,要是前面有0比如00100轉化的結果就是100
parseInt()相當於把前面的數字部分轉化為數字,後面的字元直接捨棄.他轉化不了空,真要是轉化空結果就是NaN
parseFloat()同上
isNaN()判斷是不是NaN

作用域:

(1)在JS找到變數前,他要做的就是先找到一些關鍵字 var function,引數然後在正是執行程式碼之前他把這些都提前付了一個值,undefined
遇到重名的只留一個
(2)逐行解讀程式碼。每讀一行就是到庫裡面去看看,要是有值就替換,改變表示式的值

alert(a); //彈出:function a(){alert(4);}
var a=1; //預解析中的a改為了1
alert(a);  //彈出1
function a(){alert(2);}//函式宣告,沒有改變a的值。什麼也沒發生。
alert(a); //繼續彈出1,因為a在預處理庫裡面的值沒有被改過。
var a=3; //預處理中a的值變為3
alert(a); //彈出3
function a(){alert(4);} //函式宣告,什麼也沒有發生
alert(a); //繼續彈出3
a(); //報錯 a is not a function
第一步:
       預編譯他會先找一些關鍵字儲存到記憶體中。 比如var function 引數等等
       他找到var a 先看左邊,不看右邊.上來都給他一個未定義 var a = undefined;要是function他就直接替換了
       比如上面a從undefined直接變成了方法
       他根本不考慮後面的值
第二步:
        在一步步執行程式碼
        要是遇見表示式(表示式就是 var a = xxx)他才會重新替換或者賦值複製程式碼

函式的作用域要區分全域性變數和區域性變數

在方法內部寫var的都是區域性。在方法外面的都是全域性變數。要是在方法裡面不加var,那他改變的就是全域性的值.

*特別注意的就是在JS裡面只有方法有作用域。for和if裡面都沒有作用域

函式返回值return:

alert fn1();
function fn1(){
    return function(){
        alert(1);
    }
}複製程式碼

返回的值就是function(){alert(1)}

alert fn1()();
function fn1(){
    return function(){
        alert(1);
    }
}


複製程式碼

返回的值就是1

arguments引數合集:

arguments表示所有的引數合集

lert(sum(1,2,3));
function sum(){
    var n=0;
    for(var i=0; i<arguments.length; i++){
        n += arguments[i];
    }
    return n;
}複製程式碼

陣列:

  • 可以通過修改陣列的length屬性來清空陣列。
  • 從後面新增陣列push() arr.push()往陣列最後一位加內容..push()方法是有返回值得。返回是陣列的新長度
  • 前面新增陣列unshift() arr.unshift()往陣列的最前面新增內容,返回值為陣列的新長度(IE6,7不支援)
  • 刪除pop() arr.pop()表示從後面刪除一個陣列元素。返回值就是要刪除的陣列
  • 刪除shift() arr.shift()刪除陣列的第一個返回值是被扔掉的值

    • splice()方法
      splice(a,b,c) a表示起始位置,b表示個數,c表示要替換的值
      b要是為0表示插入,c要是什麼也不寫表示刪除。

    var arr = ['TM', '鍾毅', '張森', '杜鵬', 'Leo'];
    //刪除
    //arr.splice(0, 1); //刪掉第0位,刪1個。兩個引數第一個是從第幾位開始,第二個是刪掉幾個。splice刪除的時候有返回值,返回的是被刪除的內容
    //替換
    //arr.splice(0, 1, '莫濤'); //替換第0位,替換1個,替換為'莫濤'。返回的還是刪除的東西
    //新增
    arr.splice(1, 0, '李賢'); //在第1位那裡,刪除0個,新增了一個'李賢'到了第1位,'鍾毅'就變成了arr[2]了。後面也可以新增多個。如果splice刪除了0個,那麼就沒有返回值。複製程式碼
    資料去重:

    var arr = [1, 2, 2, 4, 2];
    for ( var i=0; i<arr.length; i++ ) {
        for ( var j = i+1; j<arr.length; j++) {
            if( arr[i]==arr[j] ){
                arr.splice( j, 1 );
                j--;
            }
        }
    }
    也可以使用indexOf
    複製程式碼

    Sort排序:

    var arr = ['c', 'd', 'a', 'e'];
    arr.sort(); // 'a', 'c', 'd', 'e' 按照unicode編碼排序
    
    var arr2 = [4, 3, 5, 76, 2, 0, 8];
    // arr2.sort(); // 0, 2, 3, 4, 5, 76, 8 sort預設是將陣列中的每一個按照字串來排序的,因此出現了76排在8前面的情況
    
    // arr2. sort(function( a, b ){
        return a - b; //如果a-b返回正數,就a、b兩個數字換個序。如果a-b是負數,就不換序
    }) //返回數字從小到大 0, 2, 3, 4, 5, 8, 76
    
    // arr2. sort(function( a, b ){
        return b - a;
    }) //返回數字從大到小 76,, 8, 5, 4, 3, 2, 0複製程式碼

    js定時器

    setTimeout只在指定時間後執行一次,程式碼如下:

    1. <script>
    2. //定時器 非同步執行
    3. function hello(){
    4. alert("hello");
    5. }
    6. //使用方法名字執行方法
    7. var t1 = window.setTimeout(hello,1000);
    8. var t2 = window.setTimeout("hello()",3000);//使用字串執行方法
    9. window.clearTimeout(t1);//去掉定時器
    10. </script>  

    setInterval以指定時間為週期迴圈執行,程式碼如下:

    1. //實時重新整理時間單位為毫秒
    2. setInterval('refreshQuery()',8000);
    3. /* 重新整理查詢 */
    4. function refreshQuery(){
    5. $("#mainTable").datagrid('reload',null);
    6. }