js中有六種數據類型,包括五種基本數據類型(Number,String,Boolean,Undefined,Null),和一種複雜數據類型(Object)。數組
因爲js
中的變量是鬆散類型的,因此它提供了一種檢測當前變量的數據類型的方法,也就是typeof關鍵字.數據結構
typeof 123 //Number函數
typeof 'abc' //String學習
typeof true //Boolean指針
typeof undefined //Undefinedcode
typeof null //Object對象
typeof { } //Object內存
typeof [ ] //Object字符串
typeof console.log() //Functionio
null類型進行typeof操做符後,結果是object,緣由在於,null類型被當作一個空對象引用。
Number類型包含整數和浮點數(浮點數數值必須包含一個小數點,且小數點後面至少有一位數字)兩種值。
NaN:非數字類型。特色:① 涉及到的 任何關於NaN的操做,都會返回NaN ② NaN不等於自身。
isNaN() 函數用於檢查其參數是不是非數字值。
isNaN(123) //false isNaN("hello") //true
字符串有length屬性。
字符串轉換:轉型函數String(),適用於任何數據類型(null,undefined 轉換後爲null和undefined);toString()方法(null,defined沒有toString()方法)。
該類型只有兩個值,true和false
只有一個值,即undefined值。使用var聲明瞭變量,但未給變量初始化值,那麼這個變量的值就是undefined。
null類型被看作空對象指針,前文說到null類型也是空的對象引用。
js中對象是一組屬性與方法的集合。這裏就要說到引用類型了,引用類型是一種數據結構,用於將數據和功能組織在一塊兒。引用類型有時候也被稱爲對象定義,由於它們描述的是一類對象所具備的屬性和方法。
咱們看到的大多數類型值都是Object類型的實例,建立Object實例的方式有兩種。
第一種是使用new操做符後跟Object構造函數,以下所示
var person = new Object();
person.name = "Micheal";
person.age = 24;
第二種方式是使用對象字面量表示法,以下所示
var person = {
name : "Micheal",
age : 24
};
數組的每一項能夠用來保存任何類型的數據,也就是說,能夠用數組的第一個位置來保存字符串,第二個位置保存數值,第三個位置保存對象....另外,數組的大小是能夠動態調整的。
建立數組的基本方式有兩種
第一種是使用Array構造函數,以下所示
var colors = new Array("red","blue","yellow");
第二種是使用數組字面量表示法,以下所示
var colors = ["red","blue","yellow"];
每一個函數都是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是引用類型,當從一個變量向另外一個變量賦值引用類型的值時,一樣也會將存儲在變量中的對象的值複製一份放到爲新變量分配的空間中。
這時保存在變量中的是對象在堆內存中的地址,因此,與簡單賦值不一樣,這個值的副本其實是一個指針,而這個指針指向存儲在堆內存的一個對象。那麼賦值操做後,
兩個變量都保存了同一個對象地址,則這兩個變量指向了同一個對象。所以,改變其中任何一個變量,都會相互影響。
所以,引用類型的賦值實際上是對象保存在棧區地址指針的賦值,所以兩個變量指向同一個對象,任何的操做都會相互影響。
本人正在學習和摸索中,若有錯誤,歡迎指正!