JavaScript 原始數據類型和對應的對象類型(內置對象)之間的關系

JavaScript?原始數據類型和對應的對象類型(內置對象)之間的關系

JavaScript 的原始(primitive)數據類型包括包括數字(Number)、字符串(String)、布爾值(Boolean)、null、undefined、符號(Symbol,ES6 引入)和 BigInt(ES2020 引入)。這些原始數據類型是不可變的,沒有屬性或方法。

在 JavaScript 中,原始數據類型和內置對象(也稱為對象類型或包裝器對象)之間存在一種特殊的關系。

原始數據類型和對應的對象類型之間的關系:

  • 原始類型是簡單的數據類型,沒有屬性或方法。
  • 對應的對象類型是通過構造函數創建的復雜對象,具有屬性和方法。
  • JavaScript 會在需要時自動將原始類型的值包裝成對應的對象類型,以便可以調用方法。
  • 這個自動包裝過程通常是透明的,開發者不需要手動進行裝箱或拆箱操作。
  • 通常情況下,我們在編程時使用原始數據類型,因為它們更簡單、更快。只有在需要利用對象的屬性和方法時,JavaScript 引擎才會臨時將它們轉換為對象。

理解原始數據類型和對象類型之間的關系需要注意的幾個方面:

  • 自動裝箱(Autoboxing:當你對一個原始數據類型的值使用屬性或方法時,JavaScript 會自動將其轉換(裝箱)為對應的對象類型,這樣就可以使用對象提供的方法和屬性。例如,當你對一個字符串原始值調用?.length?屬性時,JavaScript 會臨時將其轉換為?String?對象,然后訪問其?length?屬性。
  • 原始值的不可變性:原始數據類型的值是不可變的,這意味著一旦創建,它們的值就不能改變。相反,對象是可變的,你可以改變其屬性和方法。
  • 性能考慮:使用原始數據類型通常比使用對象類型更高效,因為原始類型占用的內存更少,且沒有對象的額外開銷。
  • 類型轉換:你可以通過調用對象類型的方法來顯式地將原始類型轉換為對象類型,反之亦然。例如,String(123)?會將數字轉換為字符串,而?Number("123")?會將字符串轉換為數字。

JavaScript 提供了一些內置的構造函數,如 Number 和 String,這些構造函數可以用來創建對應原始類型的包裝對象。這些包裝對象是可以包含屬性和方法的復雜數據類型。當你對一個原始類型的值調用方法時,JavaScript 會臨時將其包裝成一個對象,以便你可以調用這些方法。

原始類型的數字是不可變的值。當你對一個原始類型的數字進行操作時,實際上是在創建一個新的數字值。例如:

let num = 10;

num.toFixed(2); // "10.00"

在上面的例子中,toFixed 是一個方法,看起來像是直接被數字字面量 10 調用的。但實際上,JavaScript 在幕后將 10 臨時轉換成了一個 Number 對象,然后在這個對象上調用了 toFixed 方法。這個過程稱為 “裝箱”(boxing)。

Number 對象是通過 Number 構造函數創建的,它包含了數字的屬性和方法。例如:

let numObject = new Number(10);

numObject.toFixed(2); // "10.00"

在這個例子中,numObject 是一個 Number 對象,它是一個包含原始數字值的復雜對象。

原始類型的字符串也是不可變的值。字符串有很多方法,比如 toUpperCase 和 charAt,這些方法可以被字符串字面量直接調用:

let str = "hello";

str.toUpperCase(); // "HELLO"

當調用 str.toUpperCase() 時,原始字符串 "hello" 被臨時包裝成一個 String 對象,然后在這個對象上調用 toUpperCase 方法。完成方法調用后,這個臨時對象就被丟棄了。

String 對象是通過 String 構造函數創建的,它同樣包含了字符串的屬性和方法:

let strObject = new String("hello");

strObject.toUpperCase(); // "HELLO"

在這個例子中,strObject 是一個 String 對象。

需要注意的是,在實際編程中,我們通常直接使用原始數據類型,而不是顯式創建對象類型,因為 JavaScript 引擎會根據需要自動進行裝箱和拆箱操作。

換句話說,在實際編程中,我們通常直接使用原始數據類型,因為它們更簡單、更高效。JavaScript 引擎會在需要時自動進行原始數據類型到對象類型的臨時轉換(裝箱),以便我們可以利用對象上的方法和屬性,這個過程對開發者來說是透明的,通常不需要手動創建這些對象。

并不是每個原始數據類型都有一個直接對應的對象類型,具體情況如下:

Number: 有一個對應的對象類型,即 Number 對象。

String: 有一個對應的對象類型,即 String 對象。

Boolean: 有一個對應的對象類型,即 Boolean 對象。

Symbol: 有一個對應的對象類型,即 Symbol 對象。

BigInt: 有一個對應的對象類型,即 BigInt 對象。

然而,對于 null 和 undefined,情況就不同了:

null: 沒有對應的對象類型。null 表示“沒有值”或“空值”,它通常用于指示變量未指向任何對象。

undefined: 同樣沒有對應的對象類型。undefined 表示變量已聲明但未被初始化。

內置構造函數和它們創建的對象包裝器:

Number: 這個構造函數用于創建數字的對象包裝器。例如,new Number(123) 會創建一個包裝了數字 123 的 Number 對象。

String: 這個構造函數用于創建字符串的對象包裝器。例如,new String("text") 會創建一個包裝了字符串 “text” 的 String 對象。

Boolean: 這個構造函數用于創建布爾值的對象包裝器。例如,new Boolean(true) 會創建一個包裝了布爾值 true 的 Boolean 對象。

Symbol: 用于創建符號的構造函數,它是 ES6 中引入的。例如,Symbol('description') 會創建一個具有描述的新符號。

BigInt: 用于創建大整數的構造函數,它是在 ES2020 中引入的。例如,BigInt(12345678901234567890) 會創建一個 BigInt 對象。

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

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

相關文章

【數據結構】E : 貨幣套匯(圖路徑)

E : 貨幣套匯(圖路徑) Description 套匯是指利用貨幣匯兌率的差異將一個單位的某種貨幣轉換為大于一個單位的同種貨幣。例如,假定1 美元可以買0.7 英鎊,1 英鎊可以買9.5 法郎,1法郎可以買到0.16美元。通過貨幣兌換&a…

ELK企業級日志分析平臺——ES集群監控

啟用xpack認證 官網:https://www.elastic.co/guide/en/elasticsearch/reference/7.6/configuring-tls.html#node-certificates 在elk1上生成證書 [rootelk1 ~]# cd /usr/share/elasticsearch/[rootelk1 elasticsearch]# bin/elasticsearch-certutil ca[rootelk1 ela…

GB/T 29498-2013 木門窗檢測

木門窗是指以木材、木質復合材料為主要材料制作框和扇的門窗。 GB/T 29498-2013 木門窗檢測項目 測試項目 測試標準 外觀質量 GB/T 29498 尺寸 GB/T 29498 裝配質量 GB/T 29498 含水率 GB/T 17657 附著力 GB/T 4893.4 外門窗耐冷熱循環 GB/T 4893.7 耐劃痕 GB/…

Volcano3D繪制3D火山圖

一邊學習,一邊總結,一邊分享! 本期教程內容 **注:**本教程詳細內容 Volcano3D繪制3D火山圖 一、前言 火山圖是做差異分析中最常用到的圖形,在前面的推文中,我們也推出了好幾期火山圖的繪制教程&#xff0…

【代數學習題4.2】從零理解范數與跡 —— 求數域元素的范數與跡

從零理解范數與跡 —— 求數域元素的范數與跡 寫在最前面題目解答 2. 范數 N N N思路求解過程python求解 3. 數域 K K K 的范數 N K N_K NK?思路求解過程Python求解分析解題步驟 4. 跡 T T T求解過程共軛元素計算跡 python求解分析解題步驟 5. 數域 K K K 的跡 T K T_K …

讀書筆記——《黑猩猩的政治》

前言 弗朗斯德瓦爾(Frans de Waal)的代表作《黑猩猩政治》成書于1982年,是它的首部書籍作品,也是美國國會新任議員的被推薦讀物。之前看的他另一部作品的《萬智有靈》是2016年的作品,時間跨度居然這么大。《萬智有靈》介紹了許多…

代碼隨想錄 135. 分發糖果

題目 n 個孩子站成一排。給你一個整數數組 ratings 表示每個孩子的評分。 你需要按照以下要求,給這些孩子分發糖果: 每個孩子至少分配到 1 個糖果。 相鄰兩個孩子評分更高的孩子會獲得更多的糖果。 請你給每個孩子分發糖果,計算并返回需要準…

SDK廣告類型及其作用與收益分析

在移動應用開發領域,軟件開發工具包(SDK)廣告已經成為應用開發者們獲取收益的一種重要途徑。不同類型的SDK廣告提供了多樣化的選擇,以滿足開發者的需求。本文將介紹幾種常見的SDK廣告類型,并深入探討它們的作用及對開發…

SPASS-信度分析

信度分析概述 效度 效度指的是量表是否真正反映了我們希望測量的東西。一般來說,有4種類型的效度:內容效度、標準效度、結構效度和區分效度。內容效度是一種基于概念的評價指標,其他三種效度是基于經驗的評價指標。如果一個量表實際上是有效…

【亞太杯前兩問論文】2023年第十三屆APMCM亞太地區大學生數學建模競賽——(文末領取方式)

2023年第十三屆APMCM亞太地區大學生數學建模競賽——論文無償分享!!! C題前兩問論文代碼已出,其他賽題及后續論文代碼會持續更新。 祝各位小伙伴都能在比賽中發揮出色,取得心儀的成績呦!一起加油&#xff…

vscode在運行c語言時,無法scanf輸入

問題: 在學習c語言中,我在使用scanf和cin時無法在終端進行輸入(運行了但是無法輸入),在網上尋找答案,并寫下筆記 解決方法 選擇左上角 文件->首選項(preferences)->設置(settings&#xf…

網關和鏈路追蹤

Spring Cloud的網關 在Spring Cloud中,網關(Gateway)是一種用于管理和路由微服務請求的中間層服務。它充當了整個微服務架構的入口點,負責將來自外部的請求轉發到相應的微服務上。常見的網關包括Spring Cloud Gateway和Netflix Zu…

Java類加載那些事

Java源文件(.java文件)被編譯器編譯后變為字節碼形式的類文件(.class文件),Java類加載的過程就是JVM加載.class的二進制文件并且放到內存中,將數據放到方法區,并且在堆區構造一個java.lang.clas…

動態規劃從入門到精通

目錄 動態規劃的詳解 動態規劃的應用 機器人到達指定位置數 換錢的最少貨幣數 排成一條線的紙牌博弈問題 象棋中馬的跳法 Bob的生存概率 換錢的方法數 動態規劃的總結 動態規劃的詳解 暴力嘗試遞歸操作中有很多重復計算的操作,浪費時間。動態規劃就是減少暴力…

大模型增量預訓練參數說明

在增量預訓練過程中通常需要設置三類或四類參數,模型參數,數據參數,訓練參數,額外參數。 下面分別針對這四種參數進行說明。 歡迎關注公眾號 模型參數 model_type模型類型,例如bloom,llama,baichuan,qwen等。 model_name_or_path模型名稱或者路徑。 tokenizer_name_or…

JS數組常用的20種方法詳解(每一個方法都有例子,超全面,超好理解的教程,干貨滿滿)

目錄 1.會改變原數組的方法(7種) 1.push() 2.pop() 3.unshift() 4.shift() 5.reverse() 6.sort() 7.splice() 2.不改變原數組的方法(13種,返回的新數組是從原數組淺拷貝來的) 1.concat() 2.join() 3.slice…

12個最佳WordPress投票插件

您是否正在為您的網站尋找WordPress投票插件? WordPress投票插件可讓您輕松地在您的網站上進行民意調查,用戶可以投票。這是在收集見解的同時建立用戶參與度的有效策略。 在本文中,我們精心挑選了最好的WordPress投票插件,可幫助…

代碼隨想錄算法訓練營第五十二天|300.最長遞增子序列 674. 最長連續遞增序列 718. 最長重復子數組

文檔講解:代碼隨想錄 視頻講解:代碼隨想錄B站賬號 狀態:看了視頻題解和文章解析后做出來了 300.最長遞增子序列 class Solution: # 2516 ms, faster than 64.96%def lengthOfLIS(self, nums: List[int]) -> int:n len(nums)dp [1] * n…

從Discord的做法中學習 — 使用Golang進行請求合并

正如你可能之前看到的,Discord去年發布了一篇有價值的文章,討論了他們成功存儲了數萬億條消息。雖然有很多關于這篇文章的YouTube視頻和文章,但我認為這篇文章中一個名為“數據服務為數據服務”的部分沒有得到足夠的關注。在這篇文章中&#…

QT項目移植到VS+QT(RTI-DDS)

QT中.pro文件中include(./xxx.pri) pri文件如下定義 unset(FILENAMES)for(FILENAME, FILENAMES) {HEADERFILE $$PWD/$${FILENAME}.hif(exists($$HEADERFILE)) {HEADERS * $$HEADERFILE}SOURCEFILE $$PWD/$${FILENAME}.cppif(exists($$SOURCEFILE)) {SOURCES * $$SOURCEFILE}…