搜尋
首頁web前端js教程JavaScript的資料型別有哪些? js資料型別的介紹

JavaScript的資料型別有哪些? js資料型別的介紹

Oct 19, 2018 pm 03:03 PM
csshtmlhtml5javascriptnode.js

這篇文章帶給大家的內容是關於JavaScript的資料型別有哪些? js資料類型的介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

一、JavaScript有幾種類型的值?

Javascript有兩種資料型,分別是基本資料型別和參考資料型別。其中基本資料類型包括Undefined、Null、Boolean、Number、String、Symbol (ES6新增,表示獨特的值),而引用資料型態統稱為Object對象,主要包含對象、陣列和函數。接下來我們分別看下兩者的特徵。

二、基本資料型別

1.值是不可變的

var name = 'java';
name.toUpperCase(); // 输出 'JAVA'
console.log(name); // 输出  'java'

由此可得,基本資料型別的值是無法改變的

2.存放在棧區

原始資料型別直接儲存在堆疊(stack)中的簡單資料段,佔據空間小、大小固定,屬於被頻繁使用數據,所以放入棧中存儲。

3.值的比較

var a = 1;
var b = true;
console.log(a == b);    // true
console.log(a === b);   // false

== : 只進行值的比較,會進行資料型別的轉換。
=== : 不僅進行值得比較,還要進行資料型別的比較。

三、引用資料型別

1.值是可變的

var a={age:20};
a.age=21;
console.log(a.age)//21

上面程式碼說明參考型別可以擁有屬性和方法,並且是可以動態改變的。

2.同時保存在堆疊記憶體和堆疊記憶體

引用資料型別儲存在堆疊(heap)中的物件,佔據空間大、大小不固定,如果儲存在堆疊中,將會影響程式運作的效能;引用資料類型在堆疊中儲存了指針,該指標指向堆中該實體的起始位址。當解釋器尋找引用值時,會先檢索其在堆疊中的位址,取得位址後會從堆疊中取得實體。

JavaScript的資料型別有哪些? js資料型別的介紹

3.比較是引用的比較

當從一個變數向另一個變數賦引用型別的值時,同樣也會將儲存在變數中的物件的值複製一份放到為新變數分配的空間。

var a={age:20};
var b=a;
b.age=21;
console.log(a.age==b.age)//true

上面我們講到基本類型和引用型別儲存在記憶體的位置不同,引用型別儲存在堆中的對象,同時,在堆疊中儲存了指針,而這個指標指向正是堆中實體的起始位置。變數a初始化時,a指標指向物件{age:20}的位址,a賦值給b後,b又指向該物件{age:20}的位址,這兩個變數指向了同一個物件。因此,改變其中任何一個變量,都會相互影響。

JavaScript的資料型別有哪些? js資料型別的介紹

此時,如果取消某一個變數對於原始物件的引用,不會影響到另一個變數。

var a={age:20};
var b=a;
a = 1;
b // {age:20}

上面程式碼中,a和b指向同一個對象,然後a的值變成1,這時不會對b產生影響,b還是指向原來的那個對象。

四、檢驗資料型別

1.typeof

typeof傳回一個表示資料型別的字串,傳回結果包括:number、boolean、 string、symbol、object、undefined、function等7種資料型別,但不能判斷null、array等

typeof Symbol(); // symbol 有效
typeof ''; // string 有效
typeof 1; // number 有效
typeof true; //boolean 有效
typeof undefined; //undefined 有效
typeof new Function(); // function 有效
typeof null; //object 无效
typeof [] ; //object 无效
typeof new Date(); //object 无效
typeof new RegExp(); //object 无效

陣列和物件回傳的都是object,這時就需要使用instanceof來判斷

2.instanceof

instanceof 是用來判斷A是否為B的實例,表達式為:A instanceof B,如果A是B的實例,則傳回true,否則傳回false。 instanceof 運算子用來測試一個物件在其原型鏈中是否存在一個建構函式的 prototype 屬性。

[] instanceof Array; //true
{} instanceof Object;//true
new Date() instanceof Date;//true
new RegExp() instanceof RegExp//true

關於陣列的型別判斷,也可以用ES6新增Array.isArray()

Array.isArray([]);   // true

instanceof 三大弊端:

對於基本資料型別來說,字面量方式創建出來的結果和實例方式創建的是有一定的區別的

console.log(1 instanceof Number)//false
console.log(new Number(1) instanceof Number)//true

從嚴格意義上來講,只有實例創建出來的結果才是標準的對象數據類型值,也是標準的Number這個類別的一個實例;對於字面量方式創建出來的結果是基本的資料類型值,不是嚴謹的實例,但是由於JS的鬆散特點,導致了可以使用Number.prototype上提供的方法。

只要在目前實例的原型鏈上,我們用其偵測出來的結果都是true。在類別的原型繼承中,我們最後檢測出來的結果未必準確。

var arr = [1, 2, 3];
console.log(arr instanceof Array) // true
console.log(arr instanceof Object);  // true
function fn(){}
console.log(fn instanceof Function)// true
console.log(fn instanceof Object)// true

不能偵測null 和undefined

對於特殊的資料類型null和undefined,他們的所屬類別是Null和Undefined,但是瀏覽器把這兩個類別保護起來了,不允許我們在外面訪問使用。

JavaScript的資料型別有哪些? js資料型別的介紹

3.嚴格運算子===

#

只能用于判断null和undefined,因为这两种类型的值都是唯一的。

var a = null
typeof a // "object"
a === null // true

undefined 还可以用typeof来判断

var b = undefined;
typeof b === "undefined" // true
b === undefined // true

4.constructor

constructor作用和instanceof非常相似。但constructor检测 Object与instanceof不一样,还可以处理基本数据类型的检测。

var aa=[1,2];
console.log(aa.constructor===Array);//true
console.log(aa.constructor===RegExp);//false
console.log((1).constructor===Number);//true
var reg=/^$/;
console.log(reg.constructor===RegExp);//true
console.log(reg.constructor===Object);//false

constructor 两大弊端:

null 和 undefined 是无效的对象,因此是不会有 constructor 存在的,这两种类型的数据需要通过其他方式来判断。

函数的 constructor 是不稳定的,这个主要体现在把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor给覆盖了,这样检测出来的结果就是不准确的

function Fn(){}
Fn.prototype = new Array()
var f = new Fn
console.log(f.constructor)//Array

5.Object.prototype.toString.call()

Object.prototype.toString.call() 最准确最常用的方式。首先获取Object原型上的toString方法,让方法执行,让toString方法中的this指向第一个参数的值。

关于toString重要补充说明:

本意是转换为字符串,但是某些toString方法不仅仅是转换为字符串

对于Number、String,Boolean,Array,RegExp、Date、Function原型上的toString方法都是把当前的数据类型转换为字符串的类型(它们的作用仅仅是用来转换为字符串的)

Object上的toString并不是用来转换为字符串的。

Object上的toString它的作用是返回当前方法执行的主体(方法中的this)所属类的详细信息即"[object Object]",其中第一个object代表当前实例是对象数据类型的(这个是固定死的),第二个Object代表的是this所属的类是Object。

Object.prototype.toString.call('') ;   // [object String]
Object.prototype.toString.call(1) ;    // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; //[object global] window是全局对象global的引用


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

陳述
本文轉載於:segmentfault思否。如有侵權,請聯絡admin@php.cn刪除
JavaScript的角色:使網絡交互和動態JavaScript的角色:使網絡交互和動態Apr 24, 2025 am 12:12 AM

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C和JavaScript:連接解釋C和JavaScript:連接解釋Apr 23, 2025 am 12:07 AM

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

從網站到應用程序:JavaScript的不同應用從網站到應用程序:JavaScript的不同應用Apr 22, 2025 am 12:02 AM

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python vs. JavaScript:比較用例和應用程序Python vs. JavaScript:比較用例和應用程序Apr 21, 2025 am 12:01 AM

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C/C在JavaScript口譯員和編譯器中的作用C/C在JavaScript口譯員和編譯器中的作用Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在行動中:現實世界中的示例和項目JavaScript在行動中:現實世界中的示例和項目Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

了解JavaScript引擎:實施詳細信息了解JavaScript引擎:實施詳細信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具