當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
理顺 JavaScript (4) - 变量、常量与数据类型
生活随笔
收集整理的這篇文章主要介紹了
理顺 JavaScript (4) - 变量、常量与数据类型
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
var v1 = 123; /* 聲明變量、同時(shí)初始化為數(shù)字 */ var v2 = 'ABC'; /* 聲明變量、同時(shí)初始化為字符串 */ var v3,v4; /* 已聲明還沒(méi)有初始化的變量, 類(lèi)型未知(未知也是一種類(lèi)型: undefined) */x = 1; y = 2; /* 缺失 var(未聲明)的變量也可以使用, 但會(huì)讓編譯器在幕后補(bǔ)充聲明; 最好別這樣 */ alert(x + y); /* 3 */
JavaScript 到底有幾種數(shù)據(jù)類(lèi)型? 不如從例子中去解析:
var X; /* 先聲明一個(gè)變量 X */ alert(typeof X); /* 用 typeof 函數(shù)查看其類(lèi)型是: undefined */X = 123; /* 賦予數(shù)字值 */ alert(typeof X); /* 此時(shí)的類(lèi)型是: number */X = 'ABC'; /* 賦予字符串值 */ alert(typeof X); /* 此時(shí)的類(lèi)型是: string */X = true; /* 賦予布爾值(true 或 false) */ alert(typeof X); /* 此時(shí)的類(lèi)型是: boolean */X = function(){}; /* 賦予一個(gè)函數(shù) */ alert(typeof X); /* 此時(shí)的類(lèi)型是: function */X = new Array(1,2,3); /* 賦予一個(gè)數(shù)組 */ alert(typeof X); /* 此時(shí)的類(lèi)型是: object */X = new Date(); /* 賦予一個(gè)日期值 */ alert(typeof X); /* 此時(shí)的類(lèi)型是: object */X = new RegExp(); /* 賦予一個(gè)正則表達(dá)式對(duì)象 */ alert(typeof X); /* 此時(shí)的類(lèi)型是: object */X = new String(); /* 賦予一個(gè)字符串對(duì)象 */ alert(typeof X); /* 此時(shí)的類(lèi)型是: object */X = new Boolean(); /* 賦予一個(gè)布爾對(duì)象 */ alert(typeof X); /* 此時(shí)的類(lèi)型是: object */X = new Number(); /* 賦予一個(gè)數(shù)字對(duì)象 */ alert(typeof X); /* 此時(shí)的類(lèi)型是: object */X = new Error(); /* 賦予一個(gè) Error 對(duì)象 */ alert(typeof X); /* 此時(shí)的類(lèi)型是: object */X = new Object(); /* 賦予一個(gè) Object 對(duì)象 */ alert(typeof X); /* 此時(shí)的類(lèi)型是: object */
從例子中總結(jié)出 JavaScript 的數(shù)據(jù)類(lèi)型:
undefined /* 沒(méi)有賦值或不存在的變量的類(lèi)型 */ number /* 數(shù)字類(lèi)型 */ string /* 字符串類(lèi)型 */ boolean /* 布爾類(lèi)型 */ function /* 函數(shù)類(lèi)型 */ object /* 對(duì)象類(lèi)型, 其中數(shù)組等都屬于 object 類(lèi)型 */
可以從實(shí)踐中求證一下:
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 *//* 上面最后一個(gè)是 undefined, 這表示對(duì)象或?qū)傩圆淮嬖? 因?yàn)?JS 區(qū)分大小寫(xiě), document 對(duì)象不包含 Title 對(duì)象或?qū)傩? document 的標(biāo)題屬性應(yīng)該是 title */
從前面看到:
既有一個(gè) string 類(lèi)型, 又有一個(gè) String 對(duì)象;
既有一個(gè) number 類(lèi)型, 又有一個(gè) Number 對(duì)象;
既有一個(gè) boolean 類(lèi)型, 又有一個(gè) Bollean 對(duì)象...
這是 JS 為了簡(jiǎn)單而帶來(lái)的麻煩, 其實(shí)不用考慮那么多, 可以把 string 與 String 混起來(lái)使用, JS 編譯器會(huì)在幕后處理一切; 譬如:
var X = new String('ABC'); /* 此時(shí) X 是 String 對(duì)象 */ var Y = new String('123'); /* 此時(shí) Y 是 String 對(duì)象 */ var XY = X + Y; /* 此時(shí) XY 是 string 類(lèi)型 */ alert(XY); /* ABC123 */ alert(XY.length); /* 6 */var X = 'ABC'; /* 此時(shí) X 是 string 類(lèi)型 */ var Y = '123'; /* 此時(shí) Y 是 string 類(lèi)型 */ var XY = new String(X + Y); /* 此時(shí) XY 是 String 對(duì)象 */ alert(XY); /* ABC123 */ alert(XY.length); /* 6 *//* 上面的字符串長(zhǎng)度屬性(length) 本來(lái)是屬于 String 對(duì)象的, string 類(lèi)型的字符串照樣使用; 這有可能是編譯器迅速做了個(gè)轉(zhuǎn)換; 在 JS 中任何類(lèi)型的轉(zhuǎn)換都是方便自由的. */
說(shuō)到 JavaScript 類(lèi)型的簡(jiǎn)單化, 它的數(shù)值類(lèi)型只有一個(gè) number(類(lèi)似與 Delphi 的 Double);
也沒(méi)有單個(gè)字符類(lèi)型, 需要時(shí)給長(zhǎng)度是 1 的字符串就是了.
和 Delphi 的指針類(lèi)似, 可以給 JS 的變量賦空值: null; 這個(gè) null 和上面的 undefined 不好區(qū)別.
null 是已賦值, 但是空值;
undefined 是沒(méi)賦值或不存在.
alert(undefined == null); /* true ; 簡(jiǎn)單地看, 它們差不多 */ alert(undefined === null); /* false ; 仔細(xì)地看, 它們不一樣 *//* null 作為空值(相當(dāng)與 0)可以參與數(shù)值運(yùn)算 */ var X; X = 123 + null; alert(X); /* 123 */ X = 123 + undefined; alert(X); /* NaN *///JS 的理念應(yīng)該是這樣的: //未知類(lèi)型也是類(lèi)型, 沒(méi)有賦值也是值: undefined; //空值也是值: null.
再展示一個(gè)遭遇 null 和 undefined 的示例:
還有一個(gè) "常量" 的問(wèn)題.
JS 本來(lái)沒(méi)有常量, 所謂的常量不過(guò)是提前賦值的變量而已.
Infinity; /* 無(wú)窮大 */ NaN; /* 非數(shù)字值 */ Number.MAX_VALUE; /* 最大數(shù)值(JS 可以表示的) */ Number.MIN_VALUE; /* 最小數(shù)值(JS 可以表示的) */ Number.NaN; /* 非數(shù)字值 */ Number.NEGATIVE_INFINITY; /* 負(fù)無(wú)窮大 */ Number.POSITIVE_INFINITY; /* 無(wú)窮大 *//* 取值測(cè)試: */ 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 對(duì)象, 盡管常常省略這個(gè)前綴:
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 */
轉(zhuǎn)載于:https://my.oschina.net/hermer/blog/320652
總結(jié)
以上是生活随笔為你收集整理的理顺 JavaScript (4) - 变量、常量与数据类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: WinAPI: midiOutGetNu
- 下一篇: 关于ListView顶部和底部滚(拖)动