您好,登錄后才能下訂單哦!
小編給大家分享一下javascript有幾種基本數據類型,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
javascript有5種基本數據類型,分別是:1、Undefined類型;2、Null類型;3、Boolean類型;4、Number類型;5、String類型。
本文操作環境:windows7系統、javascript1.8.5版,DELL G3電腦。
ECMAScript
中有5中簡單數據類型(也稱為基本數據類型): Undefined
、Null
、Boolean
、Number
和String
。還有1中復雜的數據類型————Object
,Object
本質上是由一組無序的名值對組成的。
其中Undefined
、Null
、Boolean
、Number
都屬于基本類型。Object
、Array
和Function
則屬于引用類型,String
有些特殊,具體的會在下面展開分析。
ECMAScript
中用var
關鍵字來定義變量,因為js
是弱類型的,所以無法確定變量一定會存儲什么值,也就不知道變量到底會是什么類型,而且變量的類型可以隨時改變。
這就是ECMAScript
是松散類型的來由,所謂松散類型就是可以用來保存任何類型的數據。
ps:es6
中新增了let
命令來聲明變量、const
命令聲明一個只讀的常量。
let
的用法類似于var
,但是所聲明的變量,只在let
命令所在的代碼塊內有效。
const
一旦聲明,常量的值就不能改變。
關于let
、const
這里不做展開討論。
由于js
中的變量是松散類型的,所以它提供了一種檢測當前變量的數據類型的方法,也就是typeof關鍵字.
通過typeof
關鍵字,對這5種數據類型會返回下面的值(以字符串形式顯示)undefined
---------- 如果值未定義 Undefined
boolean
---------- 如果這個值是布爾值 Boolean
string
---------- 如果這個值是字符串 String
number
---------- 如果這個值是數值類型 Number
object
---------- 如果這個值是對象或null
Object
需要注意的是typeof null
返回為object
,因為特殊值null
被認為是一個空的對象引用。
Undefined
類型只有一個值,即特殊的undefined
。在使用var
聲明變量但未對其加以初始化時,這個變量的值就是undefined
。不過,一般建議盡量給變量初始化,但是在早期的js
版本中是沒有規定undefined
這個值的,所以在有些框架中為了兼容舊版瀏覽器,會給window
對象添加undefined
值。
window['undefined'] = window['undefined']; //或者 window.undefined = window.undefined;
Null
類型是第二個只有一個值的數據類型,這個特殊的值是null
。從邏輯角度來看,null
值表示一個空對象指針,而這也正是使用typeof
操作符檢測null
時會返回object
的原因。
var car = null; console.log(typeof car); // "object"
如果定義的變量準備在將來用于保存對象,那么最好將該變量初始化為null
而不是其他值。這樣一來,只要直接檢測null
值就可以知道相應的變量是否已經保存了一個對象的引用了。
例如:
if(car != null){ //對car對象執行某些操作 }
實際上,undefined值是派生自null值的,因此ECMA-262規定對它們的相等性測試要返回true。
console.log(undefined == null); //true
盡管null和undefined有這樣的關系,但它們的用途完全不同。無論在什么情況下都沒有必要把一個變量的值顯式地設置為undefined,可是同樣的規則對null卻不適用。換句話說,只要意在保存對象的變量還沒有真正保存對象,就應該明確地讓該變量保存null值。這樣做不僅可以體現null作為空對象指針的慣例,而且也有助于進一步區分null和undefined。
該類型只有兩個字面值:true和false。這兩個值與數字值不是一回事,因此true不一定等于1,而false也不一定等于0。
雖然Boolean類型的字面值只有兩個,但JavaScript中所有類型的值都有與這兩個Boolean值等價的值。要將一個值轉換為其對應的Boolean值,可以調用類型轉換函數Boolean(),例如:
var message = 'Hello World'; var messageAsBoolean = Boolean(message);
在這個例子中,字符串message被轉換成了一個Boolean值,該值被保存在messageAsBoolean變量中。可以對任何數據類型的值調用Boolean()函數,而且總會返回一個Boolean值。至于返回的這個值是true還是false,取決于要轉換值的數據類型及其實際值。下表給出了各種數據類型及其對象的轉換規則。
數據類型 | 轉換為true的值 | 轉換為false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空的字符串 | ""(空字符串) |
Number | 任何非0數值(包括無窮大) | 0和NAN |
Object | 任何對象 | null |
Undefined | 不適用 | undefined |
var message = 'Hello World'; if(message) { alert("Value is true"); }
運行這個示例,就會顯示一個警告框,因為字符串message被自動轉換成了對應的Boolean值(true)。由于存在這種自動執行的Boolean轉換,因此確切地知道在流控制語句中使用的是什么變量至關重要。
ps:使用!!操作符轉換布爾值
!!一般用來將后面的表達式強制轉換為布爾類型的數據(boolean),也就是只能是true或者false;
對null與undefined等其他用隱式轉換的值,用!操作符時都會產生true的結果,所以用兩個感嘆號的作用就在于將這些值轉換為“等價”的布爾值;
var foo; alert(!foo);//undifined情況下,一個感嘆號返回的是true; alert(!goo);//null情況下,一個感嘆號返回的也是true; var o={flag:true}; var test=!!o.flag;//等效于var test=o.flag||false; alert(test);
這段例子,演示了在undifined和null時,用一個感嘆號返回的都是true,用兩個感嘆號返回的就是false,所以兩個感嘆號的作用就在于,如果明確設置了變量的值(非null/undifined/0/”“等值),結果就會根據變量的實際值來返回,如果沒有設置,結果就會返回false。
【推薦學習:javascript基礎教程】
這種類型用來表示整數和浮點數值,還有一種特殊的數值,即NaN(非數值 Not a Number)。這個數值用于表示一個本來要返回數值的操作數未返回數值的情況(這樣就不會拋出錯誤了)。例如,在其他編程語言中,任何數值除以0都會導致錯誤,從而停止代碼執行。但在JavaScript中,任何數值除以0會返回NaN,因此不會影響其他代碼的執行。
NaN本身有兩個非同尋常的特點。首先,任何涉及NaN的操作(例如NaN/10)都會返回NaN,這個特點在多步計算中有可能導致問題。其次,NaN與任何值都不相等,包括NaN本身。例如,下面的代碼會返回false。
alert(NaN == NaN); //false
String類型用于表示由零或多個16位Unicode字符組成的字符序列,即字符串。字符串可以由單引號(')或雙引號(")表示。
String類型的特殊性
string類型有些特殊,因為字符串具有可變的大小,所以顯然它不能被直接存儲在具有固定大小的變量中。由于效率的原因,我們希望JS只復制對字符串的引用,而不是字符串的內容。但是另一方面,字符串在許多方面都和基本類型的表現相似,而字符串是不可變的這一事實(即沒法改變一個字符串值的內容),因此可以將字符串看成行為與基本類型相似的不可變引用類型
Boolean、Number、String 這三個是Javascript中的基本包裝類型,也就是這三個其實是一個構造函數,他們是Function的實例,是引用類型,至于這里的String與以上說的String是同名,是因為其實上文說的String是指字符串,這里的String指的是String這個構造函數,上面那么寫,是為了更好的理解,因為Javascript是松散類型的。我們可以看下String實例化的例子:
var name = String("jwy"); alert(typeof name);//"string" var x=new String('12345') typeof x //object x='12345' typeof x //string var author = "Tom"; alert(typeof name);//"string"
至于author這個會有length,substring等等這些方法,其實string只是String的一個實例,類似于C#中的String,和string.
注意,typeof 變量 如果值是"string" 的話,也就是這個變量是字符串,在Javascript中,字符串是基本類型,而在C#或Java中,字符串是引用類型,但是Javascript中的String是引用類型,因為它是Javascript中定義好的基本包裝類型,在C#中,String跟string其實是一樣的。
本帖只是簡要的copy了一些JavaScript高級程序設計(第三版)內容,外加了自己側重的角度,看本帖的朋友還是要看書啊,這里只是做個參考。
以上是“javascript有幾種基本數據類型”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。