国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript--變量與基本數(shù)據(jù)類型

XanaHopper / 1422人閱讀

摘要:中變量可能包含兩種不同的數(shù)據(jù)類型的值基本類型和引用類型。本文主要介紹基本數(shù)據(jù)類型及其特點。操作符在介紹基本類型值之前,先說下操作符,操作符會返回數(shù)據(jù)類型的字符串表示。所有未初始化的變量均會保存該值。

前言
JavaScript中的變量為松散類型,所謂松散類型就是指當一個變量被申明出來就可以保存任意類型的值,就是不像SQL一樣申明某個鍵值為int就只能保存整型數(shù)值,申明varchar只能保存字符串。一個變量所保存值的類型也可以改變,這在JavaScript中是完全有效的,只是不推薦。相比較于將變量理解為“盒子“,《JavaScript編程精解》中提到應該將變量理解為“觸手”,它不保存值,而是抓取值。這一點在當變量保存引用類型值時更加明顯。

JavaScript中變量可能包含兩種不同的數(shù)據(jù)類型的值:基本類型和引用類型。基本類型是指簡單的數(shù)據(jù)段,而引用類型指那些可能包含多個值的對象。本文主要介紹基本數(shù)據(jù)類型及其特點。

基本類型包括:Null、Undefined、Number、String、Boolean。引用類型主要包括:Object、Array、Date、RegExp、Function。

申明
JavaScript中申明變量通過var操作符,申明的變量會成為其所在作用域內(nèi)的局部變量,意思就是在全局申明的變量就是通常所說的全局變量,在函數(shù)內(nèi)申明的變量就是以該函數(shù)為作用域的局部變量,局部變量會在函數(shù)執(zhí)行完畢后被銷毀,未通過var操作符申明的變量會默認為全局變量。需要一次申明多個變量時可以通過單var操作符的方式,代碼會更加簡潔。

var name = "susan",
    age = "23",
    sex = "female";

typeof操作符
在介紹基本類型值之前,先說下typeof操作符,typeof操作符會返回數(shù)據(jù)類型的字符串表示。用它來檢測基本數(shù)據(jù)類型比較有效率,而檢測引用類型時通常用instanceof操作符。

typeof undefined; //undefined
typeof 2015; //number
typeof false; //boolean
typeof null; //object
typeof "abc"; //string
typeof {a:1}; //object

這里有一點不同的是,typeof在對null進行檢測時會返回字符串“object”,因為在JavaScript中null被當作空對象指針,這一點在Douglas的《JavaScript語言精粹》也被吐槽過,不過了解下就可以了。

Undefined類型
Undefined類型只有一個特殊值即undefiend。所有未初始化的變量均會保存該值。

var aa;
alert(aa); //undefined

這里要注意一點,undefined與未定義的變量不同,如果在代碼中調(diào)用某個未定義(申明)的變量,解析器會提示如下信息。

意為這個變量沒有被申明過,查找的方式是通過沿作用域鏈向上搜索,如果在全局環(huán)境中都沒有找到該變量的申明則拋出錯誤,這部分內(nèi)容本菜以后和大家討論。

Null類型
Null類型同樣也只包含一個值即null,從邏輯上看它被當作空對象指針,正是由于這個特性,如果你定義某個變量時不確定當前賦何值,但未來需要賦某個object類型值時,正確的方式就是將該變量初始化為null。

這里提一句,在對null與undefined進行==比較時,會返回true,據(jù)《JavaScript高級程序設(shè)計》說,undefined派生自null,所以ECMA-262規(guī)定它倆相等性操作為true。

Boolean類型
Boolean俗稱布爾,僅包括兩個值:true和false。這里有一個Boolean()轉(zhuǎn)型函數(shù),它可以對任意類型的值使用,作用就是將其它類型值轉(zhuǎn)換為布爾型。轉(zhuǎn)換規(guī)則主要如下。

String型:非空字符串-true,空字符串("")-false

Number型:任何非0數(shù)-true,0與NaN-false

Object型:任何對象-true,null-false

Undefined型:false

但并非使用該轉(zhuǎn)型函數(shù)才會使數(shù)據(jù)類型轉(zhuǎn)換,當遇到if語句時會對數(shù)據(jù)進行自動的類型轉(zhuǎn)換。自動類型轉(zhuǎn)換有其優(yōu)點也有弊端,這里不再擴展。重要的是通過Boolean轉(zhuǎn)型函數(shù)理解轉(zhuǎn)換規(guī)則,以便在編碼中使用。

這里舉個非常簡單的例子:在某個app中需要通過檢測本地是否緩存了用戶ID來判斷需不需要登錄操作。

if (!localStorage["memberId"]) {
   //登陸操作    
}

這里當本地沒有用戶ID時,localStorage值為undefined,轉(zhuǎn)換后為false值,非運算后為true,執(zhí)行登錄操作。而不需要寫成localStorage["memberId"] === undefined等等。

Number類型
JavaScript中的Number類型支持十進制、八進制以及十六進制的數(shù)值。關(guān)于浮點型的數(shù)值這里有幾點要注意,在JavaScript中,0.1與.1相同,但是這種省略的寫法是不推薦的。由于保存浮點型所需的內(nèi)存是整型的兩倍,所以JavaScript會在適當?shù)臅r候?qū)⒉槐匾母↑c型轉(zhuǎn)換為整型,比如浮點型的10.0會自動保存為整型的10。特別需要注意的一點是,浮點型運算精度遠不如整型,例子如下:

console.log(0.1 + 0.2);

可以看到,運算并沒有得到預期的結(jié)果,所以在實際運算中要注意這一點,同時這個例子也反映出了JavaScript中浮點型的最高精度即為顯示的17位小數(shù)。過大或過小的數(shù)可以使用科學計數(shù)法e來表示,這一點就不再贅述。

Infinity
JavaScript能夠保存的數(shù)值并不是無限大小的,當大于或小于某個界限時,該值會被自動轉(zhuǎn)換為特殊值——Infinity,Infinity也包括正負兩種。檢測一個數(shù)值是否為Infinity可以通過isFinite()函數(shù)。

NaN
在Number類型中還有個很特殊的值,那就是NaN,即非數(shù)值(Not a Number)。這個特殊值的存在是為了避免在某些需要返回數(shù)值時因為運算問題未返回數(shù)值報錯,影響程序運行。比如一個數(shù)除以0,在其他編程語言中會拋出錯誤,而在JavaScript中會返回NaN。

NaN有兩個特點:1.任何涉及NaN的操作均會返回NaN,2.NaN不與任何值相等,包括他自己=.=,即做NaN == NaN的相等性驗證時會返回false。

檢測一個值是否為NaN可以用isNaN()函數(shù),它會嘗試將接收的參數(shù)轉(zhuǎn)換為數(shù)值,意思就是字符串“10”可以被轉(zhuǎn)換成數(shù)值10,而字符串“color”不行。轉(zhuǎn)換成功返回false,反之為true。

數(shù)值轉(zhuǎn)換
Number類型的數(shù)值轉(zhuǎn)換方式可能通過三個函數(shù):Number()、parseInt()、parseFloat()。由于Number()轉(zhuǎn)換函數(shù)轉(zhuǎn)換規(guī)則奇葩(復雜且不合理),所以這里主要介紹parseInt()與parseFloat()。

首先申明一點,parseInt()與parseFloat()函數(shù)是專門用于把字符串轉(zhuǎn)換成數(shù)字的。這一點可能會導致困惑,明明是用來轉(zhuǎn)換數(shù)值的,為什么要接收字符串。舉個簡單的例子,parseInt()在接收3.14這個浮點型數(shù)值時,會自動轉(zhuǎn)換成該值的字符串表示——“3.14”,它會把3.14轉(zhuǎn)換為3從邏輯上來看并不是它真的能對數(shù)值取整,而是在解析“3.14”這個字符串時遇到小數(shù)點“.”這個不能轉(zhuǎn)換為數(shù)值的字符時會自動省略后面的東西。

有了以上的認識,我們來了解這兩個函數(shù)具體的轉(zhuǎn)換規(guī)則:

parseInt()函數(shù)在轉(zhuǎn)換字符串時,會忽略前面的空格,直到找到第一個非空字符。如果第一個非空字符不是數(shù)字字符或者負號則返回NaN。如果第一個字符是數(shù)值字符會繼續(xù)解析第二個,直到解析完整個字符串或者遇到了一個非數(shù)值字符(如上面3.14的例子)。

parseInt(""); //NaN
parseInt(3.14); //3
parseInt("4.12"); //4
parseInt("xyx123"); //NaN
parseInt("123xyx"); //123

parseInt()同樣可以解析二進制、八進制與十六進制的數(shù)值,由于ECMAScript版本不同對非十進制數(shù)解析時會出現(xiàn)分歧,所以最好傳入第二個參數(shù)作為基數(shù)。

parseInt(100111,2); //39
parseInt(123,8); //83
parseInt("0xBC",16); //188

與parseInt()函數(shù)類似,parseFloat()也是從第一個字符開始解析,直到字符串末尾或者遇到一個無效的浮點數(shù)字字符為止。比如,第一個小數(shù)點是有效的,第二個是無效的,因此后面的字符會被忽略。與parseInt()不同的是它始終會忽略開頭的0,且不具備傳入基數(shù)的能力,即只能解析十進制數(shù)值。

parseFloat("123xyx"); //123
parseFloat("xyx123"); //NaN
parseFloat("012.3"); //12.3
parseFloat("34.5"); //34.5
parseFloat("34.5.6"); //34.5

String類型
在JavaScript中字符串使用單、雙引號沒有區(qū)別,只是要注意起始與結(jié)束保持一致即可。JavaScript中也有轉(zhuǎn)義字符,與其他語言基本一致,這里就不再贅述了。任何字符串都可以通過length屬性來獲取其長度。

var str = "Hello World";
alert(str.length); //11

這里簡要說一個特點,ECMAScript中字符串一旦創(chuàng)建了就不能被改變,例如拼接某兩個字符串,首先是創(chuàng)建一個新的字符串,將原有的字符串組合后裝入其中,最后銷毀原來的兩個字符串。所以并不是像看上去那樣進行簡單的拼接。

字符串轉(zhuǎn)換
要將一個值轉(zhuǎn)換為字符串類型有兩個方式:1.toString()方法,2.String()轉(zhuǎn)型函數(shù)。這兩個方法的區(qū)別就是null,undefined值沒有toString()方法,而任何類型值都可以使用String()函數(shù)。

var num = 123;
num.toString(); //"123"
var boo = false;
boo.toString(); //"false"

多數(shù)情況下,調(diào)用toString()方法不必傳遞參數(shù)。當要確定輸出數(shù)值的不同進制時,可以傳入一個基數(shù)。

var num = 10;
num.toString(); //"10"
num.toString(2); //"1010"
num.toString(8); //"12"
num.toString(10); //"10"
num.toString(16); //"a"

在不知道要轉(zhuǎn)換的值是不是null或undefined時,可以使用String()方法。其規(guī)則為:如果該值有toString()方法則調(diào)用該方法,如果是null或undefined則返回其字符串表示.....好吧,總之用String()轉(zhuǎn)型函數(shù)就不會錯。

String(10); //"10"
String(true); //"true"
String(null); //"null"
String(undefined); //"undefined"

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/102819.html

相關(guān)文章

  • JavaScript中的基本數(shù)據(jù)類型

    摘要:中有種基本數(shù)據(jù)類型和。在介紹的基本數(shù)據(jù)類型前,有必要提到兩個關(guān)鍵字和。由于中的變量是松散類型的,所以它提供了一種檢測當前變量的數(shù)據(jù)類型的方法,也就是關(guān)鍵字。輸出的結(jié)果為用于表示由零數(shù)字或字符組成的字符序列,即字符串。 如果你是一名IT前端人員,怎么會不懂JavaScript的美?如果你是一名前端在學人員,接觸JavaScript后,怎么會不明白JavaScript中基本數(shù)據(jù)類型?大家都...

    ispring 評論0 收藏0
  • JavaScript學習總結(jié)(一)基礎(chǔ)部分

    摘要:前綴規(guī)范每個局部變量都需要有一個類型前綴,按照類型可以分為表示字符串。例如,表示以上未涉及到的其他對象,例如,表示全局變量,例如,是一種區(qū)分大小寫的語言。布爾值與字符串相加將布爾值強制轉(zhuǎn)換為字符串。 基本概念 javascript是一門解釋型的語言,瀏覽器充當解釋器。js執(zhí)行時,在同一個作用域內(nèi)是先解釋再執(zhí)行。解釋的時候會編譯function和var這兩個關(guān)鍵詞定義的變量,編譯完成后從...

    AlanKeene 評論0 收藏0
  • JavaScript 深入了解基本類型和引用類型的值

    摘要:原文鏈接一個變量可以存放兩種類型的值,基本類型的值和引用類型的值。引入了一種新的原始數(shù)據(jù)類型,表示獨一無二的值。 原文鏈接 一個變量可以存放兩種類型的值,基本類型的值(primitive values)和引用類型的值(reference values)。 ES6 引入了一種新的原始數(shù)據(jù)類型 Symbol,表示獨一無二的值。它是 JavaScript 語言的第七種數(shù)據(jù)類型,前六種是:Un...

    Mr_houzi 評論0 收藏0
  • JavaScript數(shù)據(jù)類型----原始類型引用類型(object)詳談

    摘要:做個小小的延伸在這個栗子中,兩個對象都有一條相同的值,但這兩個對象卻不相等,為什么呢因為兩個對象分別引用的是存放在堆內(nèi)存中的個不同的對象,故變量和的值引用地址也是不一樣的。 JavaScript中,有七種內(nèi)置類型:6種原始類型和引用類型,他們分別是: 6種原始類型(基本類型): 空值(null) 未定義(undefined) 布爾值(boolean) 數(shù)字(number) 字符串(s...

    tomlingtm 評論0 收藏0
  • JavaScript基本語法(一)

    摘要:目錄語句變量小結(jié)基本語法一是核心知識點的基本語法的第一部分,主要介紹了語句表達式變量和數(shù)據(jù)類型不包括函數(shù)類型的基本知識點,函數(shù)類型將在下一章函數(shù)二中詳細探討語句程序的執(zhí)行是由一條條語句組成的每一條語句是為完成特定任務而執(zhí)行的操作語句當中可以 目錄 1. 語句 2. 變量 3. 小結(jié) JavaScript基本語法(一)是JavaScript核心知識點(ECMAScript)的基本語法的...

    shiina 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<