午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

JavaScript:數(shù)據(jù)類型

 樓梯下面的腳印 2021-02-02

JavaScript中有6種數(shù)據(jù)類型,其中包含了5種基本數(shù)據(jù)類型和1種復(fù)雜數(shù)據(jù)類型。

·       基本數(shù)據(jù)類型:undefined、null、boolean、number和String

·       復(fù)雜數(shù)據(jù)類型:Object。Object本質(zhì)是由一組無(wú)序的名值對(duì)組成的。

 

typeof操作符

JavaScript中的變量是松散類型的,所謂松散類型,就是可以用來(lái)保存任何數(shù)據(jù)。

var i = 17;
i = "hello";    // 這種做法是合法的

鑒于這種特性,因此需要一種手段來(lái)檢測(cè)變量的數(shù)據(jù)類型,typeof負(fù)責(zé)提供這種信息。對(duì)一個(gè)值使用typeof操作符將返回下列某個(gè)字符串:

·       "underfined" -- 這個(gè)值未定義

·       "boolean" -- 這個(gè)值是布爾值

·       "string" -- 這個(gè)值是字符串

·       "number" -- 這個(gè)值是數(shù)值

·       "object" -- 這個(gè)值是對(duì)象或null

·       "function" -- 這個(gè)值是函數(shù)

下面舉兩個(gè)例子,說(shuō)明typeof操作符的使用:

var m = "hello";
alert(typeof m);  // "string"
alert(typeof 17);   // "number"

 

undefined類型

undefined類型只有一個(gè)值,即特殊的undefined。在使用var聲明變量但未對(duì)其加以初始化時(shí),這個(gè)變量的值就是undefined,例如:

var msg;
alert(msg == undefined);    // true

不過(guò),包含undefined值的變量與未定義的變量是不一樣的。例如:

var msg;    // 聲明之后未初始化,默認(rèn)值為undefined
// var name;    // 沒(méi)有聲明
alert(msg); // "undefined"
alert(name);    // 產(chǎn)生錯(cuò)誤

然而,對(duì)未初始化的變量和未聲明的變量執(zhí)行typeof操作符都會(huì)返回undefined值。例如:

var msg;    // 聲明之后未初始化,默認(rèn)值為undefined
// var name;    // 沒(méi)有聲明
alert(typeof msg);  // undefined
alert(typeof name); // undefined

 

null類型

null類型也是只有一個(gè)值的數(shù)據(jù)類型,這個(gè)特殊的值是null。null值表示一個(gè)空對(duì)象指針,所以用typeof操作符檢測(cè)null值時(shí)會(huì)返回“object”。例如:

var human = null;
alert(typeof human);    // “object”

如果定義一個(gè)變量用于保存對(duì)象,最好將變量初始化為null,這樣可以直接檢測(cè)變量是否null來(lái)判斷是否保存了一個(gè)對(duì)象的引用,例如:

if (human != null) {
      // ...
}

實(shí)際上,undefined值是派生自null值的,它們的相等測(cè)試返回true.

alert(null == undefined) // true

 

boolean類型

boolean只有兩個(gè)值true和false。這兩個(gè)值與數(shù)字值不是一回事,true不等于1,false不等于0。
雖然boolean只有兩個(gè)值,但是JavaScript中所有的數(shù)據(jù)類型都有與這兩個(gè)值等價(jià)的值。通過(guò)轉(zhuǎn)型函數(shù)
Boolean()可以將一個(gè)值轉(zhuǎn)換為對(duì)應(yīng)的Boolean值。

var msg = "hello javascript";
var msgAsBoolean = Boolean(msg);
alert(msgAsBoolean);

下表為各種數(shù)據(jù)類型及其轉(zhuǎn)換規(guī)則:

數(shù)據(jù)類型

轉(zhuǎn)換為true的值

轉(zhuǎn)換為false的值

Boolean

true

false

Number

任何非零數(shù)字值(包括無(wú)窮大)

0和NaN(Not a Number)

Object

任何對(duì)象

null

undefined

不適用

undefined

在if判斷中,將自動(dòng)執(zhí)行Boolean轉(zhuǎn)換。例:

var msg = "hello javascript";
if (msg) {  // msg會(huì)自動(dòng)執(zhí)行Boolean轉(zhuǎn)換為true
      alert("is true");
 }

number類型

number類型表示整數(shù)和浮點(diǎn)數(shù)。
為了支持各種數(shù)值類型,定義了不同的數(shù)值字面量格式,下面給出定義number類型數(shù)據(jù)的例子:

var intNum = 20;
var octalNum1 = 030;    // 八進(jìn)制的24
var hexNum = 0xA;   // 十六進(jìn)制的10

在進(jìn)行算數(shù)運(yùn)算時(shí),以八進(jìn)制和十六進(jìn)制表示的數(shù)值最終都會(huì)被轉(zhuǎn)換成十進(jìn)制數(shù)值。

1.浮點(diǎn)數(shù)值

所謂浮點(diǎn)數(shù)值,就是該數(shù)值中必須包含一個(gè)小數(shù)點(diǎn),并且小數(shù)點(diǎn)后面必須至少有一位數(shù)字。
定義浮點(diǎn)數(shù)的方式:

var floatNum1 = 1.2;
var floatNum2 = 0.3;
var floatNum3 = .4;         // 合法,但是不推薦

對(duì)于那些極大或極小的數(shù)值,可以用e表示法

var floatNum = 2.345e4; // 等于23450

在默認(rèn)情況下,JavaScript會(huì)將小數(shù)點(diǎn)后面帶有6個(gè)零以上的浮點(diǎn)數(shù)轉(zhuǎn)換為以e表示的數(shù)值。
浮點(diǎn)數(shù)的最高精確度是17位小數(shù),但在進(jìn)行算術(shù)計(jì)算時(shí)精確度不及整數(shù)。例如,0.2加0.3的結(jié)果不一定等于0.5:

if (a + b == 0.5) { // 不能做這樣的測(cè)試
     alert("等于0.5");
}

2.數(shù)值范圍

由于內(nèi)存的限制,JavaScript并不能表示所有的數(shù)值。

·       最小的數(shù)值:Number.MIN_VALUE,在多數(shù)瀏覽器中為5e-324

·       最大的數(shù)值:Number.MAX_VALUE,在多數(shù)瀏覽器中為1.7976931348623157e+308

如果某次計(jì)算的結(jié)果得出一個(gè)超過(guò)JavaScript數(shù)值范圍的值,那么這個(gè)值將被自動(dòng)轉(zhuǎn)換成Infinity值(正無(wú)窮)。如果是負(fù)數(shù),就會(huì)被轉(zhuǎn)換成-Infinity(負(fù)無(wú)窮);如果是正數(shù),就會(huì)被轉(zhuǎn)換成Infinity(正無(wú)窮)。Infinity不是能夠參與計(jì)算的數(shù)值。通過(guò)isFinite()函數(shù)可以確定一個(gè)數(shù)值是不是有窮的。如果是有窮的,則返回true。

var result = Number.MAX_VALUE + Number.MAX_VALUE;
alert(isFinite(result));    // false

3.NaN

NaN,即非數(shù)值(Not a Number)是一個(gè)特殊的值。用于表示一個(gè)本來(lái)要返回?cái)?shù)值的操作數(shù)未返回?cái)?shù)值的情況(這樣就不會(huì)拋出錯(cuò)誤了)。在JavaScript中,任何數(shù)值除以0會(huì)返回NaN。
NaN有兩個(gè)特點(diǎn):1.任何涉及NaN的操作都會(huì)返回NaN。2.NaN與任何值都不相等,包括本身。

alert(NaN == NaN);  // false

針對(duì)NaN的特點(diǎn),JavaScript定義了isNaN()函數(shù)。isNaN()函數(shù)在接收一個(gè)值后,會(huì)嘗試將這個(gè)值轉(zhuǎn)換為數(shù)值。某些不是數(shù)值的值會(huì)直接轉(zhuǎn)換為數(shù)值,如字符串"20"或Boolean值。不能轉(zhuǎn)換成數(shù)值的值都會(huì)返回true。

alert(isNaN(NaN));  //  true
alert(isNaN(10));   // false,
alert(isNaN("10")); // false(可以被轉(zhuǎn)換成數(shù)值10)
alert(isNaN("blue"));   // true,不能轉(zhuǎn)換
alert(isNaN(true)); // 可以被轉(zhuǎn)換成1

4.數(shù)值轉(zhuǎn)換

有三個(gè)可以將非數(shù)值轉(zhuǎn)換為數(shù)值的函數(shù):Number()、parseInt()、parseFloat()。Number()可以作用于任何類型,parseInt()和parseFloat()則專門用于把字符串轉(zhuǎn)換成數(shù)值。
Number()函數(shù)的轉(zhuǎn)換規(guī)則為:

o   如果是Boolean值,true和false分別轉(zhuǎn)換為1和0。

o   如果是數(shù)字值,簡(jiǎn)單地傳入和返回。

o   如果是null值,返回0

o   如果是undefined,返回NaN。

o   如果是字符串,遵循以下規(guī)則:

o   如果字符串中只包含數(shù)字,則將其轉(zhuǎn)換為十進(jìn)制數(shù)值,即“20”轉(zhuǎn)換為20,“011”會(huì)轉(zhuǎn)換為11;

o   如果字符串中包含有效的浮點(diǎn)格式,如“1.2”,則將其轉(zhuǎn)換為對(duì)應(yīng)的浮點(diǎn)數(shù);

o   如果字符串中包含有效的十六進(jìn)制格式,例如“0xf”,則將其轉(zhuǎn)換為對(duì)應(yīng)的十進(jìn)制整數(shù);

o   如果字符串是空的,則將其轉(zhuǎn)換為0;

o   如果字符串中包含上述格式之外的字符,則將其轉(zhuǎn)換為NaN。

o   如果是對(duì)象,則調(diào)用對(duì)象的valueOf()方法,然后依照前面的規(guī)則轉(zhuǎn)換,如果返回的結(jié)果是NaN,則調(diào)用對(duì)象的toString()方法,然后再次依照前述規(guī)則轉(zhuǎn)換返回的字符串值。

var num1 = Number("javascript");    // NaN
var num2 = Number("");  // 0
var num3 = Number("012");   // 12
var num4 = Number("0xa");   // 10
var num5 = Number(true);    // 1

實(shí)際開發(fā)中,處理整數(shù)時(shí)更多的使用parseInt()函數(shù)。parseInt()函數(shù)會(huì)忽略字符串前面的空格,直至找到第一個(gè)非空字符串。如果第一個(gè)字符不是數(shù)字或符號(hào),就會(huì)返回NaN。如果第一個(gè)字符是數(shù)字字符,parseInt()就會(huì)繼續(xù)解析第二個(gè)字符,直至最后一個(gè)字符源碼交易或遇到一個(gè)非數(shù)字字符。例 如:“123hello”會(huì)被轉(zhuǎn)換為123,類似地,“12.3”會(huì)被轉(zhuǎn)換為12。 而且parseInt()函數(shù)能夠識(shí)別出各種整數(shù)格式。

var num1 = parseInt("123hello");    // 123
var num2 = parseInt("");    // 0
var num3 = parseInt("070");     // 56
var num4 = parseInt("0xa");    // 10
var num5 = parseInt("12.3");    //12

為了消除進(jìn)制帶來(lái)的困惑,可以為parseInt()函數(shù)添加第二個(gè)參數(shù),表示轉(zhuǎn)換時(shí)使用多少進(jìn)制。

var num = parseInt("0xAF", 16); // 175

parseFloat()也是從第一個(gè)字符開始解析,而且一直解析到字符末尾,或者遇見(jiàn)一個(gè)無(wú)效的浮點(diǎn)數(shù)字符,例如,“12.34.5”將會(huì)轉(zhuǎn)換為12.34,除了第一個(gè)小數(shù)點(diǎn)之外,parseFloat()與parseInt()的另一個(gè)區(qū)別是會(huì)始終忽略前導(dǎo)0。

var num1 = parseFloat("123hello");  // 123,整數(shù)
var num2 = parseFloat("0xa");      // 0
var num3 = parseFloat("12.3);       // 12.3
var num4 = parseFloat("12.34.5);    // 12.34
var num5 = parseFloat("3.14e6");    // 3140000

String類型

String類型用于表示由零或多個(gè)16位Unicode字符組成的字符序列。字符串由雙引號(hào)(")或單引號(hào)(')表示。

var str1 = "san";
var str2 = 'zhang';

任何字符串的長(zhǎng)度都可以由length屬性取得,這個(gè)屬性返回的字符數(shù)包括16位字符的數(shù)目,而不是返回字符串的字符數(shù)目

var str1 = "hello";
var str2 = "中國(guó)";
alert(str1.length);     // 5
alert(str2.length);     // 2

字符串是不可變的,一旦創(chuàng)建,它們的值就不可改變。改變一個(gè)變量的值,首先需要銷毀原來(lái)的值,然后再用一個(gè)新值填充變量。

var str = "good";
str = str + "morning";

在上例中,第一行str包含了“good”,而第二行重新填充了“good”和“morning”的組合,即“goodmorning”。

要把一個(gè)值轉(zhuǎn)換為字符串有兩種方式:toString()函數(shù)和String()函數(shù)。
除了null和undefined,每一個(gè)值都有toString()方法,下面看幾個(gè)例子:

var age = 20;
var ageAsString = age.toString();    // "20"
var flag = true;
var flagAsString = flag.toString(); // "true"

toString()還可以傳入一個(gè)參數(shù),表示輸出數(shù)值的基數(shù)(多少進(jìn)制)。例:

var num = 10;
alert(num.toString());  // "10"
alert(num.toString(2)); // "1010"
alert(num.toString(8)); // "12",10的八進(jìn)制為形式為012,這里去掉了前導(dǎo)0
alert(num.toString(16));    // "a",去掉了前導(dǎo)0x

在不知道要轉(zhuǎn)換的是不是null或undefined的情況下,還可以使用String()函數(shù)。這個(gè)函數(shù)能夠?qū)⑷魏晤愋偷臄?shù)轉(zhuǎn)換為字符串。String()函數(shù)遵循以下規(guī)則:

·       如果值有toString()方法,則調(diào)用該方法并返回結(jié)果

·       如果值是null,則返回“null”

·       如果值是undefined,則返回“undefined”

var str1 = null;
var str2;
alert(String(str1));    // "null"
alert(String(str2));    // "undefined"

Object類型

JavaScript中的對(duì)象其實(shí)是一組數(shù)據(jù)和功能的集合。通過(guò)關(guān)鍵字new后跟對(duì)象類型名來(lái)創(chuàng)建對(duì)象。形式為:

var o = new Object();

類似于Java中的Object對(duì)象(Java中Object為所有類的基類),Object類是其他所有實(shí)例的基礎(chǔ)。也就是說(shuō),Object類型具有的任何屬性和方法也同樣存在于更具體的對(duì)象中。

每個(gè)Object實(shí)例都具有下列屬性和方法:

·       constructor:保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)。

·       hasOwnProperty(propertyName):用于檢查給定的屬性在當(dāng)前對(duì)象實(shí)例中是否存在。作為參數(shù)的屬性名必須以字符串的形式指定(例如:o.hasOwnProperty("name"))。

·       isPrototypeOf(object):用于檢查傳入的對(duì)象是否是傳入對(duì)象的原型。

·       propertyIsEnumerable(propertyName):用于檢測(cè)給定的屬性是否能夠使用for-in語(yǔ)句來(lái)枚舉。屬性名必須以字符串的形式傳入。

·       toLocalString():返回對(duì)象的字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)對(duì)應(yīng)。

·       toString():返回對(duì)象的字符串表示

·       valueOf():返回對(duì)象的字符串、數(shù)值或布爾值表示。通常與toString()方法的返回值相同。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多