2. JS 有哪些數據類型

總結

  • 基礎類型(7 種)number, string, boolean, null, undefined, symbol, bigint
  • 引用類型(對象及其子類)object, array, function, date, regexp, map, set

判斷方式推薦:

  • 基礎類型:使用 typeof
  • 引用類型:使用 instanceofObject.prototype.toString.call()

? 最佳實踐:使用 Object.prototype.toString.call(value) 實現最通用的類型判斷邏輯。


一、JavaScript 中的數據類型分類

JavaScript 的數據類型可以分為 基礎類型(Primitive Types)引用類型(Reference Types)

1. 基礎數據類型(Primitive Types)

類型描述
number表示數字,包括整數、浮點數,如 42, 3.14
string表示字符串,如 "hello"
boolean表示布爾值,只有 truefalse
null表示空值,常用于表示“無”或“空對象引用”
undefined表示未定義的值,變量聲明但未賦值時為 undefined
symbol表示唯一的、不可變的值,用于對象屬性的鍵
bigint表示任意精度的整數(ES2020 引入),如 123456789012345678901234567890n

?? 注意:typeof null 返回 "object",這是一個歷史遺留的 bug。

2. 引用數據類型(Reference Types)

引用類型是對象(object)的子類型,存儲的是對值的引用(內存地址)。

類型描述
object普通對象,如 { name: "Tom" }
array數組對象,如 [1, 2, 3]
function函數對象,如 function foo() {}
date日期對象,如 new Date()
regexp正則表達式對象,如 /^\d+/
map, set, weakmap, weaksetES6 引入的集合類型

二、如何判斷數據類型?

1. typeof 運算符

適用于判斷基礎類型(除 null 外):

typeof 42; // "number"
typeof "hello"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof Symbol(); // "symbol"
typeof 123n; // "bigint"
typeof null; // "object" ?(錯誤)

2. instanceof 運算符

用于判斷引用類型:

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

3. Object.prototype.toString.call()

適用于判斷所有類型,是最準確的方式:

Object.prototype.toString.call(42); // "[object Number]"
Object.prototype.toString.call("hello"); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(Symbol()); // "[object Symbol]"
Object.prototype.toString.call(123n); // "[object BigInt]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(new Date()); // "[object Date]"
Object.prototype.toString.call(function () {}); // "[object Function]"

三、常見誤區與注意事項

問題說明
typeof null === "object"歷史 bug,應使用 === null 判斷
typeof [1,2,3] === "object"無法區分數組和其他對象,應使用 Array.isArray()
NaN 的類型是 numbertypeof NaN === "number",但它是非數值的
function 是對象,但 typeof 返回 "function"特殊處理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917687.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917687.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917687.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pipeline方法關系抽取--課堂筆記

Pipeline方法課堂筆記 一、Pipeline方法原理 pipeline方法是指在實體識別已經完成的基礎上再進行實體之間關系的抽取. pipeline方法流程: 先對輸入的句子進行實體抽取,將識別出的實體分別組合;然后再進行關系分類. 注意:這兩個子過…

linux系統離線環境安裝clickhouse客戶端

1、下載離線安裝包: 方式1:網站直接下載 鏈接:https://packagecloud.io/altinity/clickhouse 注意要下載同一版本的四個包 方式2:夸克網盤分享 鏈接:https://pan.quark.cn/s/7e77e6a1bc5f 2、將本地下載的安裝包上傳…

GPT-5的誕生之痛:AI帝國的現實危機

目錄 前言 一、“俄里翁”的隕落:一場夢碎的代際飛躍 二、扎克伯格的“抄家式”突襲 三、天才的詛咒:當AI聰明到無法與我們對話 四、燒錢的無底洞與微軟的影子 結語:AI帝國的黃昏,還是黎明前的黑暗? &#x1f3a…

探索設計模式的寶庫:Java-Design-Patterns

在軟件開發領域,設計模式是解決常見問題的經典方案,它們如同建筑師的藍圖,為開發者提供了經過驗證的最佳實踐。今天我要向大家介紹一個GitHub上的明星項目——java-design-patterns,這是一個全面、實用且持續更新的設計模式寶藏項…

JavaScript中的作用域、閉包、定時器 由淺入深

1. JavaScript中的作用域是什么? 作用域(Scope)是程序中定義變量的區域,它決定了變量的可訪問性(可見性)。在JavaScript中,作用域主要分為三種:全局作用域、函數作用域和塊級作用域&…

倉庫管理系統-11-前端之頭部區域Header的用戶登錄和退出功能

文章目錄 1 登錄功能 1.1 登錄頁面(Login.vue) 1.1.1 頁面布局 1.1.2 初始化數據 1.1.3 confirm方法 1.1.4 UserController.java(登錄接口) 1.1.5 Login.vue 1.2 登錄頁面的路由 1.2.1 創建路由文件(router/index.js) 1.2.2 注冊路由器(main.js) 1.2.3 路由視圖(App.vue) 2 退出…

【VLNs篇】07:NavRL—在動態環境中學習安全飛行

項目內容論文標題NavRL: 在動態環境中學習安全飛行 (NavRL: Learning Safe Flight in Dynamic Environments)核心問題解決無人機在包含靜態和動態障礙物的復雜環境中進行安全、高效自主導航的挑戰,克服傳統方法和現有強化學習方法的局限性。核心算法基于近端策略優化…

飛算科技:以自主創新引領數字科技浪潮,飛算JavaAI賦能產業智能化升級

技術創新已成為企業突破瓶頸、實現跨越式發展的核心驅動力。作為國家級高新技術企業,飛算數智科技(深圳)有限公司(簡稱“飛算科技”)憑借其深厚的互聯網科技、大數據與人工智能技術積淀,以及在民生產業、中…

51單片機按鍵復位電路電壓隨著電容放電升高的分析

一、引言在單片機系統中,復位電路是一個至關重要的組成部分,它確保了單片機在特定情況下能夠恢復到初始狀態,從而避免程序運行錯誤或系統崩潰。對于51單片機而言,按鍵復位電路是一種常用的復位方式,它通過手動按下復位…

JVM學習日記(十五)Day15——性能監控與調優(二)

好了我們這一篇繼續來說命令行監控指令,上一篇說了4個比較重要的指令,其中用的比較多的也就是jstat和jmap了。 jhat:堆轉儲分析工具 他是JDK自帶的分析工具,分析我們上一篇說的jmap轉存的內存快照,??內置了一個微型…

Docker國內鏡像列表

Docker 鏡像源列表(8月3日更新-長期&免費)_docker國內鏡像源-CSDN博客

Orange AI 管理平臺單體版安裝教程(Docker Compose 部署)

Orange AI 管理平臺單體版安裝教程(Docker Compose 部署) 本文介紹如何通過 Docker Compose 快速安裝 Orange AI 管理平臺單體版,適用于本地開發和測試環境。步驟簡單,適合初學者和有一定運維經驗的用戶。 一、環境準備 已安裝 …

PHP的魔術方法

一、介紹 ?PHP魔術方法是以雙下劃線__開頭的一組特殊方法,用于在對象生命周期、屬性訪問、方法調用等場景中實現自動化操作。?簡化面向對象編程。 二、17個現有的魔術方法 (一)、對象生命周期相關 1、__construct() 類的構造函數方法&a…

vue2實現類似chatgpt和deepseek的AI對話流打字機效果,實現多模型同時對話

實現多模型同時對話功能特點:1、抽離對話框成單獨組件ChatBox.vue,在新增模型對比窗口時可重復利用2、通過sse與后臺實時數據流,通過定時器實現打字效果3、適應深度思考內容輸出,可點擊展開與閉合4、可配置模型參數,本…

電腦上不了網怎么辦?【圖文詳解】wifi有網絡但是電腦連不上網?網絡設置

一、問題背景 你有沒有遇到過這種情況:電腦右下角的網絡圖標明明顯示連接正常,可打開瀏覽器就是加載不出網頁,聊天軟件也刷不出新消息? 這種 "網絡已連接但無法上網" 的問題特別常見,既不是沒插網線&#xf…

思途Spring學習 0804

SpringBoot 核心概念與開發實踐SpringBoot 是一個基于 Spring 框架的快速開發腳手架,通過約定大于配置的原則簡化了傳統 Spring 應用的初始化配置。其核心目標是整合 Spring 生態(如 SSM)并支持微服務架構開發。控制反轉(IoC&…

Hutool工具類:Java開發必備神器

Hutool工具類使用說明Hutool是一個Java工具類庫,提供了豐富的功能模塊,包括字符串處理、日期時間操作、IO流、加密解密、HTTP客戶端等。以下是一些常用模塊的具體使用方法。字符串工具(StrUtil)字符串處理是開發中的常見需求&…

Node.js中Buffer的用法

// Buffer 與字符串的轉換示例 // Buffer 是 Node.js 中用于處理二進制數據的類,字符串與 Buffer 之間的轉換是常見操作// 1. 從字節數組創建 Buffer 并轉換為字符串 // Buffer.from(array) 接收一個字節數值數組,創建對應的 Buffer let buf_4 Buffer.f…

【Java 基礎】Java 源代碼加密工具有哪些?

??博主介紹: 博主從事應用安全和大數據領域,有8年研發經驗,5年面試官經驗,Java技術專家,WEB架構師,阿里云專家博主,華為云云享專家,51CTO 專家博主 ?? 個人社區:個人社區 ?? 個人主頁:個人主頁 ?? 專欄地址: ? Java 中級 ??八股文專題:劍指大廠,手撕 J…

es的histogram直方圖聚合和terms分組聚合

你提到的這兩個 Elasticsearch aggs 聚合語句:第一種:histogram 直方圖聚合 "aggs": {"DayDiagram": {"histogram": {"field": "${FiledName}","interval": ${TimeInterval},"extende…