JavaScript中的一些特殊用法(四)

1. Date類型

  • 常見用例
var now = new Date();       //返回當前時間
    var sometime1 = new Date(1465999453000);  //1970年後的毫秒數 Wed Jun 15 2016 22:04:13 GMT+0800
    var sometime2 = new Date("5/5/2016");  //等價於 var sometime2 = new Date(Date.parse(""5/5/2016""));

    /* 
     * Date.UTC()的參數分別是年份,月份(0-11),日(1-31),小時(0-23),分鐘,秒,毫秒,而且爲GTM時間
     * 前兩個參數是必須的,沒有天則假的爲1,其餘假定爲0 
     *  
     */
    var sometime3 = new Date(Date.UTC(2016,0));      // Fri Jan 01 2016 08:00:00 GMT+0800 (中國標準時間) 轉換爲GTM+8
    var sometime4 = new Date(Date.UTC(2016,6,6,21,4,45));    //VM654:4 Thu Jul 07 2016 05:04:45 GMT+0800 (中國標準時間)

    //和上面兩個的區別就是,上面是GTM時間,下面是本地時間。
    var sometime3 = new Date(2016,0);
    var sometime4 = new Date(2016,6,6,21,4,45);
  • 當建立一個不存在的時間時,瀏覽器不會報錯。
var someDate1 = new Date("6/31/2016"); //Fri Jul 01 2016 00:00:00 GMT+0800  Chrome 51結果
    var someDate2 = new Date("Sat May 25 2016 15:20:45 GMT+0800");  //Wed May 25 2016 15:20:45 GMT+0800 (中國標準時間) chrome 51結果,星期錯誤

Date.parse()常看法析格式以下

  • 月/日/年
  • 英文月 日 年
  • 英文星期 英文月 日 年 時:分:秒 時區
  • YYYY-MM-DDTHH:mm:ss.sssZ
var someDate1 = new Date("5/5/2016");
    var someDate2 = new Date("May 12,2016");
    var someDate3 = new Date("Wed May 25 2016 15:20:45 GMT+0800");
    var someDate4 = new Date("2016-05-13T13:34:45");

2. JavaScript變量做用域

JavaScript中沒有塊級做用域,只有函數做用域。javascript

//函數做用域
    var color = "blue";

    function changeColor(){

        var anotherColor = "red";

        function swapColors(){
            var tempColor = anotherColor;
            var anotherColor = color;
            color = tempColor;
        }

        swapColors();
    }
    changeColor();

    //塊做用域不起做用
    if(true){
        var color = "blue";
    }
    alert(color);           //blue

改變做用域鏈html

  • with
  • catch

關於做用域鏈,有興趣能夠參考這篇博客java

3. 正則表達式

  • 字面量定義通常格式 var expression = / pattern / flags ;,flags常見的有g全局,i不區分大小寫,m多行模式,注意理解多行模式。
    多行模式
  • 元字符有( ) [ ] { } \ ^ $ | ? * + .
  • 注意字面量定義和構造函數定義的區別。例如/\[bc\]at/等於\\[bc\\]at,這兩個都匹配"[bc]at"

4. Function類型

  • 函數聲明式定義Function,函數表達式定義Function,構造函數定義Function
//聲明式
    function sum (num1,num2){
        return num1+num2;
    }

    //表達式
    var sum = function(num1,num2){
        return num1+num2;
    } 

    //使用構造函數
    var sum = new Function("num1","num2","return num1+num2");   //不推薦使用

JavaScript高級編程中提到聲明式和表達式定義是有區別的,聲明式會將函數定義提早,也就是說能夠在函數調用語句能夠寫在函數聲明語句前面,而表達式定義則否則。可是我經過Chrome 51測試時發現,二者均可以,並沒有不一樣。

此處更正一下,是我錯了。在控制檯調試時會保留前面的代碼,換句話說就是第二個sum調用的是第一次調用的函數,若是單獨測試你會發現TypeError: sayHi is not a function:pensive: 正確代碼

  • 若是函數重名,後一個聲明的會覆蓋前一個
  • 如上代碼,注意sum和sum()的區別
  • 函數中特別的關鍵字
    • this
    • arguments //函數內參數數組
      • callee //指向有arguments對象的函數
    • caller //指向調用當前函數的引用
    • apply()/call() //區別在於若是函數有參數,apply能夠直接傳遞數組,而call必須一個一個傳遞。
    window.color = "red";
        var o = { color:"blue" };
        function sayColor(){
            alert(this.color);
        }
        sayColor(this);         //red
        sayColor(window);       //red
        sayColor(o);            //blue
    • bind()
    window.color = "red";
        var o = { color:"blue" };
        function sayColor(){
            alert(this.color);
        }
        var objectSayColor = sayColor.bind(o);
        objectSayColor();           //blue

5. 基本包裝類型

  • 不能運行時爲基本類型值添加屬性和方法
  • 使用Object構造函數,返回的也是相應基本類型的包裝類型的實例
  • 不要使用Boolean對象
var falseObject = new Boolean(false);
     var result = falseObject && true;
     alert(result); //true
     alert(typeof falseObject); //object
  • 數值類型注意以下判斷
var numberObject = new Number(10);
    var numberValue = 10;
    alert(typeof numberObject); //"object"
    alert(typeof numberValue);  //'number"
    alert(numberObject instanceof Number);  //true
    alert(numberValue instanceof Number);   //false
相關文章
相關標籤/搜索