標籤:code isnan eal 組織 函數運算式 obj 類對象 表達 構造
js中有六種資料類型,包括五種基礎資料型別 (Elementary Data Type)(Number,String,Boolean,Undefined,Null),和一種複雜資料類型(Object)。
typeof 操作符
由於js
中的變數是鬆散類型的,所以它提供了一種檢測當前變數的資料類型的方法,也就是typeof關鍵字.
type of 123 //Number
type of ‘abc‘ //String
type of true //Boolean
type of undefined //Undefined
type of null //Object
type of { } //Object
type of [ ] //Object
type of console.log() //Function
null類型進行typeof操作符後,結果是object,原因在於,null類型被當做一個Null 物件引用。
1.Number類型
Number類型包含整數和浮點數(浮點數數值必須包含一個小數點,且小數點後面至少有一位元字)兩種值。
NaN:非數字類型。特點:① 涉及到的 任何關於NaN的操作,都會返回NaN ② NaN不等於自身。
isNaN() 函數用於檢查其參數是否是非數字值。
isNaN(123) //false isNaN("hello") //true
2.String類型
字串有length屬性。
字串轉換:轉型函數String(),適用於任何資料類型(null,undefined 轉換後為null和undefined);toString()方法(null,defined沒有toString()方法)。
3.Boolean類型
該類型只有兩個值,true和false
4.Undefined類型
只有一個值,即undefined值。使用var聲明了變數,但未給變數初始化值,那麼這個變數的值就是undefined。
5.Null類型
null類型被看做Null 物件指標,前文說到null類型也是空的對象引用。
6.Object類型
js中對象是一組屬性與方法的集合。這裡就要說到參考型別了,參考型別是一種資料結構,用於將資料和功能組織在一起。參考型別有時候也被稱為對象定義,因為它們描述的是一類對象所具有的屬性和方法。
三大參考型別
1.Object類型
我們看到的大多數類型值都是Object類型的執行個體,建立Object執行個體的方式有兩種。
第一種是使用new操作符後跟Object建構函式,如下所示
var person = new Object();
person.name = "Micheal";
person.age = 24;
第二種方式是使用對象字面量標記法,如下所示
var person = {
name : "Micheal",
age : 24
};
2.Array類型
數組的每一項可以用來儲存任何類型的資料,也就是說,可以用數組的第一個位置來儲存字串,第二個位置儲存數值,第三個位置儲存對象....另外,數組的大小是可以動態調整的。
建立數組的基本方式有兩種
第一種是使用Array建構函式,如下所示
var colors = new Array("red","blue","yellow");
第二種是使用數組字面量標記法,如下所示
var colors = ["red","blue","yellow"];
3 Function類型
每個函數都是Function類型的執行個體,而且都與其他參考型別一樣具有屬性和方法。函數通常是使用函式宣告文法定義的,如下所示
function sum(num1,num2){
return num1 + num2;
};
這和使用函數運算式定義函數的方式相差無幾。
var sun = function (){
return sum1 + sum2;
};
也就是說,js按照儲存方式分為實值型別和參考型別。那麼他們的計算有什麼區別呢?
題目1: var a = 100;
var b = a;
a = 200;
console.log (b);
題目2: var a = {age : 20};
var b = a;
b.age = 21;
console.log (a.age);
題目1的答案是 100,題目2的答案是21,
題目1是簡單的實值型別,在從一個變數向另一個變數賦值基本類型時,會在該變數上建立一個新值,然後再把該值複製到為新變數分配的位置上。
此時,a中儲存的值為 100 ,當使用 a 來初始化 b 時,b 中儲存的值也為100,但b中的100與a中的是完全獨立的,該值只是a中的值的一個副本,此後,
這兩個變數可以參加任何操作而相互不受影響。也就是說基本類型在賦值操作後,兩個變數是相互不受影響的。
題目2是參考型別,當從一個變數向另一個變數賦值參考型別的值時,同樣也會將儲存在變數中的對象的值複製一份放到為新變數分配的空間中。
這時儲存在變數中的是對象在堆記憶體中的地址,所以,與簡單賦值不同,這個值的副本實際上是一個指標,而這個指標指向儲存在堆記憶體的一個對象。那麼賦值操作後,
兩個變數都儲存了同一個對象地址,則這兩個變數指向了同一個對象。因此,改變其中任何一個變數,都會相互影響。
因此,參考型別的賦值其實是對象儲存在棧區地址指標的賦值,因此兩個變數指向同一個對象,任何的操作都會相互影響。
本人正在學習和摸索中,如有錯誤,歡迎指正!
JS中的六大資料類型