理順 JavaScript (4) – 變數、常量與資料類型

來源:互聯網
上載者:User
var v1 = 123;    /* 聲明變數、同時初始化為數字 */var v2 = 'ABC';  /* 聲明變數、同時初始化為字串 */var v3,v4;       /* 已聲明還沒有初始化的變數, 類型未知(未知也是一種類型: undefined) */x = 1; y = 2;    /* 缺失 var(未聲明)的變數也可以使用, 但會讓編譯器在幕後補充聲明; 最好別這樣 */alert(x + y);    /* 3 */

JavaScript 到底有幾種資料類型? 不如從例子中去解析:

var X;                /* 先聲明一個變數 X */alert(typeof X);      /* 用 typeof 函數查看其類型是: undefined */X = 123;              /* 賦予數字值 */alert(typeof X);      /* 此時的類型是: number */X = 'ABC';            /* 賦予字串值 */alert(typeof X);      /* 此時的類型是: string */X = true;             /* 賦予布爾值(true 或 false) */alert(typeof X);      /* 此時的類型是: boolean */X = function(){};     /* 賦予一個函數 */alert(typeof X);      /* 此時的類型是: function */X = new Array(1,2,3); /* 賦予一個數組 */alert(typeof X);      /* 此時的類型是: object */X = new Date();       /* 賦予一個日期值 */alert(typeof X);      /* 此時的類型是: object */X = new RegExp();     /* 賦予一個Regex對象 */alert(typeof X);      /* 此時的類型是: object */X = new String();     /* 賦予一個字串對象 */alert(typeof X);      /* 此時的類型是: object */X = new Boolean();    /* 賦予一個布爾對象 */alert(typeof X);      /* 此時的類型是: object */X = new Number();     /* 賦予一個數字對象 */alert(typeof X);      /* 此時的類型是: object */X = new Error();      /* 賦予一個 Error 對象 */alert(typeof X);      /* 此時的類型是: object */X = new Object();     /* 賦予一個 Object 對象 */ alert(typeof X);      /* 此時的類型是: object */

從例子中總結出 JavaScript 的資料類型:

undefined /* 沒有賦值或不存在的變數的類型 */number    /* 數字類型 */string    /* 字串類型 */boolean   /* 布爾類型 */function  /* 函數類型 */object    /* 物件類型, 其中數組等都屬於 object 類型 */

可以從實踐中求證一下:

alert(typeof window);                            /* object */alert(typeof window.screen);                     /* object */alert(typeof window.closed);                     /* boolean */alert(typeof window.document);                   /* object */alert(typeof window.document.body);              /* object */alert(typeof window.document.body.offsetWidth);  /* number */alert(typeof window.document.body.clientHeight); /* number */alert(typeof window.document.title);             /* string */alert(typeof window.document.Title);             /* undefined *//* 上面最後一個是 undefined, 這表示對象或屬性不存在; 因為 JS 區分大小寫, document 對象不包含 Title 對象或屬性, document 的標題屬性應該是 title */

從前面看到:
既有一個 string 類型, 又有一個 String 對象;
既有一個 number 類型, 又有一個 Number 對象;
既有一個 boolean 類型, 又有一個 Bollean 對象...

這是 JS 為了簡單而帶來的麻煩, 其實不用考慮那麼多, 可以把 string 與 String 混起來使用, JS 編譯器會在幕後處理一切; 譬如:

var X = new String('ABC');  /* 此時 X 是 String 對象 */var Y = new String('123');  /* 此時 Y 是 String 對象 */var XY = X + Y;             /* 此時 XY 是 string 類型 */alert(XY);                  /* ABC123 */alert(XY.length);           /* 6 */var X = 'ABC';              /* 此時 X 是 string 類型 */var Y = '123';              /* 此時 Y 是 string 類型 */var XY = new String(X + Y); /* 此時 XY 是 String 對象 */alert(XY);                  /* ABC123 */alert(XY.length);           /* 6 *//* 上面的字串長度屬性(length) 本來是屬於 String 對象的, string 類型的字串照樣使用; 這有可能是編譯器迅速做了個轉換; 在 JS 中任何類型的轉換都是方便自由的. */

說到 JavaScript 類型的簡單化, 它的數實值型別只有一個 number(類似與 Delphi 的 Double);
也沒有單個字元類型, 需要時給長度是 1 的字串就是了.

和 Delphi 的指標類似, 可以給 JS 的變數賦空值: null; 這個 null 和上面的 undefined 不好區別.
null 是已賦值, 但是空值;
undefined 是沒賦值或不存在.

alert(undefined == null);  /* true ; 簡單地看, 它們差不多 */alert(undefined === null); /* false ; 仔細地看, 它們不一樣 *//* null 作為空白值(相當與 0)可以參與數值運算 */var X;X = 123 + null;      alert(X); /* 123 */X = 123 + undefined; alert(X); /* NaN *///JS 的理念應該是這樣的://未知類型也是類型, 沒有賦值也是值: undefined;//空值也是值: null.

再展示一個遭遇 null 和 undefined 的樣本:

還有一個 "常量" 的問題.
JS 本來沒有常量, 所謂的常量不過是提前賦值的變數而已.
Infinity;                  /* 無窮大 */NaN;                       /* 非數字值 */Number.MAX_VALUE;          /* 最大數值(JS 可以表示的) */Number.MIN_VALUE;          /* 最小數值(JS 可以表示的) */Number.NaN;                /* 非數字值 */Number.NEGATIVE_INFINITY;  /* 負無窮大 */Number.POSITIVE_INFINITY;  /* 無窮大 *//* 取值測試: */alert(Number.MAX_VALUE);         /* 1.7976931348623157e+308 */alert(Number.MIN_VALUE);         /* 5e-324 */alert(Number.NaN);               /* NaN */alert(Number.NEGATIVE_INFINITY); /* -Infinity */alert(Number.POSITIVE_INFINITY); /* Infinity */alert(Infinity);                 /* Infinity */alert(NaN);                      /* NaN *//* 常量還有其它, 譬如(IE7): */alert(window.navigator.appCodeName); /* Mozilla - 瀏覽器代碼*/alert(window.navigator.appName);     /* Microsoft Internet Explorer - 瀏覽器名稱 */alert(window.navigator.appVersion);  /* 4.0 ... - 瀏覽器版本 */

另外, 瀏覽器中 JS 的全域變數都直屬瀏覽器的 window 對象, 儘管常常省略這個首碼:

var X = 111;alert(window.X); /* 111 */window.Y = 222;  alert(Y);        /* 222 */function MyFun(x, y) {  return x + y;}alert(MyFun(1, 2));        /* 3 */alert(window.MyFun(1, 2)); /* 3 */

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.