首頁 >web前端 >js教程 >js資料型別有哪些? js的資料類型總結

js資料型別有哪些? js的資料類型總結

不言
不言原創
2018-08-07 15:27:113605瀏覽

js中資料型別有哪些? js的資料型別分為基本型別和參考型別,其中js的基本資料型別有五種,分別為:Number、String、Boolean、Undefined、Null;js的引用資料型別有三種,分別為:Object、Function、 Array;本文就來為大家總結一下js的資料型態。

先來看看typeof 運算子:

由於js中的變數是鬆散類型的,所以它提供了一個偵測目前變數的資料類型的方法,也就是typeof關鍵字.

typeof   123   //Number
typeof   'abc'  //String
typeof    true       //Boolean
typeof    undefined   //Undefined
typeof    null        //Object
typeof    { }           //Object
typeof    [ ]           //Object
typeof    console.log()       //Function

null型別進行typeof運算子後,結果是object,原因在於,null型別被當作一個空物件參考。

一、js基本資料型別

#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型別也是空的物件參考。

6、Object型別

js中物件是一組屬性與方法的集合。這裡就要說到引用類型了,引用類型是一種資料結構,用於將資料和功能組織在一起。引用型別有時也被稱為物件定義,因為它們描述的是一類物件所具有的屬性和方法。

二、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、值型別

佔用空間固定,保存在堆疊中(當一個方法執行時,每個方法都會建立自己的記憶體棧,在這個方法內定義的變數將會逐一放入這塊棧記憶體裡,隨著方法的執行結束,這個方法的記憶體堆疊也將自然銷毀了。因此,所有在方法中定義的變數都是放在堆疊記憶體中的;堆疊中儲存的是基礎變數以及一些物件的引用變量,基礎變數的值儲存在堆疊中,而引用變數儲存在堆疊中的是指向堆中的陣列或物件位址,這就是為何修改引用類型總是會影響到其他指向這個位址的引用變數。)

保存與複製的是值本身

使用typeof檢測資料的型別

基本型別資料是值型別

2、引用型別

占用空间不固定,保存在堆中(当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(方法的参数传递时很常见),则这个对象依然不会被销毁,只有当一个对象没有任何引用变量引用它时,系统的垃圾回收机制才会在核实的时候回收它。)

保存与复制的是指向对象的一个指针

使用instanceof检测数据类型

使用new()方法构造出的对象是引用型

计算区别:

题目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的数据类型及JS基本数据类型具体有哪几种

JS数据类型怎样转换

JS的数据类型+引用类型深浅拷贝与内存分配问题


以上是js資料型別有哪些? js的資料類型總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn