js基本數據類型


ECMAScript 中有5種簡單數據類型(也稱為基本數據類型):Undefined,Null,Boolean,Number和String。一種復雜數據類型:object。

typeof操作符

由於js中的變量是松散類型的,所以它提供了一種檢測當前變量的數據類型的方法,也就是typeof關鍵字.
通過typeof關鍵字,對這5種數據類型會返回下面的值(以字符串形式顯示)
undefined ---------- 如果值未定義 Undefined

boolean ---------- 如果這個值是布爾值 Boolean

string ---------- 如果這個值是字符串 String

number ---------- 如果這個值是數值類型 Number

object ---------- 如果這個值是對象或null Object

需要注意的是typeof null返回為object,因為特殊值null被認為是一個空的對象引用。

typeof是一個操作符而不是函數,圓括號可以使用但不是必須

Undefined類型

Undefined類型只有一個值,即特殊的undefined

在使用var聲明變量但未對其加以初始化時,這個變量的值就是undefined

聲明但未初始化與尚未定義的變量還是不一樣:

var message;     //age未聲明

alert(message);    //"undefined"

alert(age);   //產生錯誤

alert(typeof(message));     //"undefined"

alert(typeof(age));     //"undefined"

 

 Null類型

Null類型也只有一個值,這個值是特殊的null,從邏輯角度來看,null值表示一個空對象指針,而這也正是使用typeof操作符檢測null時會返回object的原因。

如果定義的變量將來准備用於保存對象,那么最好將該變量初始化為null,而不是其他值。這樣一來,只要直接檢測null值就可以知道相應的變量是否已經保存了一個對象的引用了。

實際上,undefined值是派生自null值的,因此ECMA-262規定對它們的相等性測試要返回true。

console.log(undefined == null); //true

Boolean類型

此類型只有兩個值:true和false

注意:boolean類型的字面值true和false是區分大小寫的。

avaScript中所有類型的值都有與這兩個Boolean值等價的值。要將一個值轉換為其對應的Boolean值,可以調用類型轉換函數Boolean(),例如:

    var message = 'Hello World';
    var messageAsBoolean = Boolean(message);

下表列出了各種數據類型對應的轉換規則

數據類型 轉換為true 轉換為false
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 任何非零數字值 0和NaN
Object 任何對象 null
Undefined 不適用 undefined

 

 

 

 

 

 

Number類型

最基本的數值字面量格式是十進制整數,十進制可以在代碼中直接輸入。

除了十進制,還可以用八進制和十六進制。

八進制字面值的第一位必須是零(0),然后八進制數字序列為(0~7),如果數字超出了0~7這個范圍,那么前導0將被忽略,后面的數值按十進制解析。

var a = 070;   //八進制狀態下的56
var b = 079;   //無效的八進制,解析為79
var c = 08;    //無效的八進制,解析為8

八進制字面量在嚴格模式下是無效的

十六進制字面值前兩位必須是0x,后跟任何十六進制數字(0~9及A~F),字母不區分大小寫。

在算術運算時,八進制和十六進制都會被轉換成十進制數值。

 1.浮點數

所謂浮點數值,就是該數值中必須包括一個小數點,並且小數點后面必須至少有一個數字。

由於保存浮點數所占用內存是整數的兩倍,所以ECMAScript會盡可能將浮點數轉換為整數。

如果小數點后沒有任何數字或浮點數本身就表示一個整數,就會被轉換為整數。

console.log(1.)    //1
console.log(10.00)   //10

默認情況下,ECMAScript會將小數點后面帶6個零以上的浮點數值轉換為以e表示法表示的數值。(例:0.0000003會被轉換為3e-7).

浮點數值的最高精度為17位。但算術計算精度遠不如整數。例:0.1+0.2不是0.3,而是0.30000000000000004,這個小小的舍入誤差會導致無法測試特定的浮點數值。

永遠不要測試某個特定的浮點數值。

關於浮點數值計算產生舍入誤差的問題:這是使用基於IEEE754數值的浮點計算的通病,ECMAScript並非獨此一家,其他使用相同數值語言的也存在這個問題。

2.NaN

NaN(Not a Number),即非數值是一個特殊的數值,這個數值用於表示一個本來要返回數值的操作數未返回數值的情況。

NaN本身有兩個特點:

1.任何涉及NaN的操作(例如NaN*10,NaN/10)都會返會NaN。

2.NaN與任何數值都不相等,包括NaN本身。

console.log(NaN == NaN);    //false

isNaN(),判斷是否“不是數值”,這個函數接受一個參數,該參數可以是任何類型,isNaN()在接收到一個值之后,會嘗試將值轉換為數值,可以轉換的將返回false,不能轉換為數值的將會返回true。

3.數值轉換

有3個函數可以把非數值轉換為數值:number(),parseInt()和parseFloat()。

number()可以用於任何數據類型,而另外兩個函數則專門用於把字符串轉換為數值。

  • 如果是Boolean,true和false將分別被轉換為1和0。
  • 如果是數字值,只是簡單傳入和返回。
  • 如果是null值,返會0。
  • 如果是undefined,返回NaN。
  • 如果是字符串則較為復雜。

parseInt()在轉換字符串的時會忽略字符串前的空格,直至找到第一個非空格字符。如果第一個字符不是數字字符或者是負號,返回NaN。

parseInt()可以接受兩個參數,第一個為要轉換的參數,第二個為基數(進制)。如果不指定基數意味着讓parseInt()自己決定如何解析,因此為了避免錯誤的解析,建議指定基數。
parseFloat()用於轉換浮點數。

String類型

String類型用於表示由零或多個16位Unicode字符組成的字符序列,即字符串。字符串可以由單引號(')或雙引號(")表示。

字符串的長度可以通過其length屬性取得。

var text = "this string length is 24";
console.log(text.length);         //24

轉換字符串可以通過幾乎每個值都有的toString()方法。

var a = 11;
console.log(a,typeof a);   //11 "number"
var b = a.toString();
console.log(b,typeof b);   //11 string

object類型

ECMAScript中的對象其實就是一組數據和功能的集合。可以通過以下方式創建一個對象:

var obj = new object();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM