【JavaScript】包裝類

包裝類

JS 提供了三個主要的包裝類:StringNumberBoolean。如果嘗試把原始類型(stringnumberboolean)數據當成對象使用,JS 會自動將其轉換為對應包裝類的實例。

我們先來看一下 “基本類型數據” 及 “其包裝類的實例” 之間的異同:

const strPrimitive = "I am a string";
const strObject = new String("I am a string");console.log(strPrimitive); // 'I am a string'
console.log(strObject); // { String: 'I am a string' }

① typeof:

typeof strPrimitive; // "string"
typeof strObject; // "object"

② instanceof:

strPrimitive instanceof String; // false
strObject instanceof String; // true

③ Object.prototype.toString.call:

Object.prototype.toString.call(strPrimitive); // [object String]
Object.prototype.toString.call(strObject); // [object String]

④ 調用屬性/方法:

strPrimitive.name = "PrimitiveStr";
strObject.name = "ObjectStr";console.log(strPrimitive.name); // undefined
console.log(strObject.name); // 'ObjectStr'console.log(strPrimitive); // 'I am a string'
console.log(strObject); // { String: 'I am a string', name: 'ObjectStr' }console.log(strPrimitive.length); // 13
console.log(strObject.length); // 13

可以看到,strPrimitive.name 輸出的是 undefined,而沒有報錯,這就是因為 JS 會在必要的時候將原始類型數據轉換為對應包裝類的實例。我們看如下解析:

strPrimitive.name = "PrimitiveStr";
// 執行這一步時, 相當于執行 new String(strPrimitive).name = 'superman'
// 但是沒有變量接收 new String(strPrimitive) 這個實例, 所以該實例又會被垃圾回收機制處理掉console.log(strPrimitive.name);
// 執行這一步時, 相當于執行 console.log(new String(strPrimitive).name)
// 但是這個新建的 String 實例并沒有 name 屬性, 所以打印 undefinedconsole.log(strPrimitive.length);
// 執行這一步時, 相當于執行 console.log(new String(strPrimitive).length)
// 這個新建的 String 實例有 length 屬性, 所以打印 13

除了使用包裝類 Boolean、Number 和 String 創建對應實例。還能使用 Object 創建,它能根據參數的類型返回對應包裝類的實例:

const obj = new Object("some text");
console.log(obj instanceof String); // true

如果參數是字符串,則會創建 String 的實例;如果是數值,則會創建 Number 的實例;如果是布爾值,則會得到 Boolean 的實例。


原始類型數據中,undefinednull 沒有構造函數,所以它們沒有包裝類。沒有包裝類的原始類型數據被當成對象使用會直接報錯:

const a = null;
console.log(a.name); // TypeError: Cannot read properties of null



Boolean

創建一個 Boolean 實例:

const booleanObject = new Boolean(true); // 傳入 true / false 作為參數

valueOf 方法會被重寫,返回布爾值 true / false;toString 也會被重寫,返回字符串 “true” / “false”:

console.log(booleanObject.valueOf()); // true
console.log(booleanObject.toString()); // "true"

Boolean 實例在 ECMAScript 中用得很少。不僅如此,它們還很容易引起誤會,尤其是在布爾表達式中使用 Boolean 實例時:

const falseObject = new Boolean(false);
const result = falseObject && true;
console.log(result); // trueconst falseValue = false;
result = falseValue && true;
console.log(result); // false

在這段代碼中,我們創建一個值為 false 的 Boolean 實例。然后,在一個布爾表達式中通過 && 操作將這個實例與一個原始值 true 組合起來。在布爾算術中,false && true 等于 false。可是,這個表達式是對 falseObject 對象而不是對它的值(false)做 && 操作。因為所有對象在布爾表達式中都會自動轉換為 true,因此 falseObject 在這個表達式里實際上表示原始值 true 。那么 true && true 當然是 true。



Number

創建一個 Number 實例:

const numberObject = new Number(10); // 傳入一個數值作為參數

valueOf、toLocaleString 和 toString 方法會被重寫。valueOf 方法返回 Number 實例表示的原始數值,另外兩個方法返回數值字符串。

toString 方法可選地接收一個表示基數的參數,并返回對應基數形式的數值字符串:

const num = 10;
console.log(num.toString()); // "10"
console.log(num.toString(2)); // "1010"
console.log(num.toString(8)); // "12"
console.log(num.toString(10)); // "10"
console.log(num.toString(16)); // "a"



String

創建一個 String 實例:

const stringObject = newString("hello world"); // 傳入一個字符串作為參數

3 個繼承的方法 valueOf、toLocaleString 和 toString 都返回實例表示的原始字符串值。

每個 String 對象都有一個 length 屬性,表示字符串中字符的數量。來看下面的例子:

const stringValue = "hello world";
console.log(stringValue.length); // "11"

這個例子輸出了字符串 “hello world” 中包含的字符數量:11。注意,即使字符串中包含雙字節字符(而不是單字節的 ASCII 字符),也仍然會按單字符來計數。


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

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

相關文章

個人倒計時頁面源碼,實用倒計時單頁源碼

一、源碼描述 這是一款非常實用的個人倒計時頁面,支持設置未來一年時間,支持設置背景音樂,支持自定義下拉頁面,點擊向下箭頭查看。 二、源碼截圖 三、源碼下載

docker 常用命令,后面不斷更新

1.從Docker容器中下載文件到本地的方法 使用 docker cp 命令:該命令可以將文件或目錄從容器復制到主機。該方法簡單快捷,適用于少量文件的下載。 # 將容器名為my_container中的 /data/file.txt文件復制到本地/path/to/save/file.txt docker cp my_container:/data/…

深入探討【C++容器適配器】:現代編程中的【Stack與Queue】的實現

目錄 一、Stack(棧) 1.1 Stack的介紹 1.2 Stack的使用 1.3 Stack的模擬實現 二、Queue(隊列) 2.1 Queue的介紹 2.2 Queue的使用 2.3 Queue的模擬實現 三、容器適配器 3.1 什么是適配器 3.2 為什么選擇deque作為stack和…

kylin入門教程

Apache Kylin的入門教程主要涵蓋以下幾個方面: 一、Apache Kylin簡介 Apache Kylin是一個開源的分布式分析引擎,提供Hadoop之上的SQL接口及多維分析(OLAP)能力以支持超大規模數據。最初由eBay Inc.開發并貢獻至開源社區&#xf…

基于Vue和UCharts的前端組件化開發:實現高效、可維護的詞云圖與進度條組件

基于Vue和UCharts的前端組件化開發:實現高效、可維護的詞云圖與進度條組件 摘要 隨著前端技術的迅速發展和業務場景的日益復雜,傳統的整塊應用開發方式已無法滿足現代開發的需求。組件化開發作為一種有效的解決方案,能夠將系統拆分為獨立、…

Shell基礎之函數和數組

目錄 函數 什么是函數 函數的語法 函數的調用 函數的返回值 函數的案例 函數變量的作用域 遞歸函數 函數庫文件 數組 定義數組語法 數組操作 獲取所有元素 獲取元素下標 獲取數組長度 獲取數組元素 數組添加元素 刪除數組元素 刪除數組 遍歷數組元素 數組案…

解決pycharm無法識別miniconda

解決pycharm無法識別miniconda 找到miniconda安裝目錄下condabin/conda.bat文件,點擊load即可識別codna環境 a環境

Spring Boot(七十九):SprngBoot整合Apache tika做文件類型檢測

之前有一個章節介紹了Apache tika實現文檔內容解析,地址如下:Spring Boot(六十八):SpringBoot 整合Apache tika 實現文檔內容解析_springboot tika pptx-CSDN博客 下面我們介紹Apache tika實現文件類型檢測 1 引入依賴 <dependency><groupId>org.apache.tika&…

Docker 掛載目錄空間占滿修改/var/lib/docker/overlay2 的路徑解決方案

本文詳細描述了在CentOS7系統中卸載舊版Docker、安裝依賴、添加Docker源、配置存儲路徑并啟動Docker&#xff0c;使其在/home目錄下運行的過程。 以下是在CentOS 7下重新安裝Docker并將其安裝在/home/下的完整步驟&#xff1a; 卸載舊版本的Docker。如果您之前已經安裝了Dock…

仕考網:沒有學位證能考公務員嗎?

公務員考試需要滿足報名條件才能參加&#xff0c;沒有學位證能考公嗎? 沒有學位證書的考生也有機會參與公務員考試雖然可以選擇的崗位比較少&#xff0c;但可以報考參加那些不設定學位要求的崗位。當發布的公務員招錄信息中某一職位的學位要求標注為“無要求”時&#xff0c;…

【C++】:繼承[下篇](友元靜態成員菱形繼承菱形虛擬繼承)

目錄 一&#xff0c;繼承與友元二&#xff0c;繼承與靜態成員三&#xff0c;復雜的菱形繼承及菱形虛擬繼承四&#xff0c;繼承的總結和反思 點擊跳轉上一篇文章&#xff1a; 【C】&#xff1a;繼承(定義&&賦值兼容轉換&&作用域&&派生類的默認成員函數…

MATLAB Gazebo聯合仿真

準備仿真環境&#xff1a;在Gazebo中設置仿真場景&#xff0c;包括機器人模型、環境布局、傳感器和執行器等。編寫MATLAB腳本&#xff1a;在MATLAB中編寫控制算法和數據處理腳本&#xff0c;用于接收Gazebo中的傳感器數據&#xff0c;并生成控制命令。建立通信&#xff1a;通過…

DEBUG:jeston卡 遠程ssh編程

問題 jeston 打開網頁 gpt都不方便 而且只需要敲命令就行 解決 下載MobaXterm(window執行) liunx需要虛擬機 軟件 遠程快速復制命令

PHP文字ocr識別接口示例、人工智能的發展

全球在人工智能升級的大背景下&#xff0c;有一定規模的制造商開始大量部署人工智能機器人、系統&#xff0c;以此取代危險、簡單和重復性的工作。各種人工智能技術的迅猛發展&#xff0c;正在驅動各行業就業市場發現變革。 京東物流大家并不陌生&#xff0c;京東快遞機器人在…

vue中table內容和lable對不齊解決方案

問題&#xff1a; 代碼片段&#xff1a; <template><el-table :data"tableData" stripe style"width: 100%"><el-table-column prop"title" label"標題" width"80px" /><el-table-column prop"n…

Windows安全日志導致環境內存占用過高

Windows 環境內存占用高不釋放&#xff0c;目前遇到的常見情況如下&#xff1a; 情況一&#xff1a;JVM內存泄漏 這種網上的排查方式有很多&#xff0c;自行查閱即可 情況二&#xff1a;SQLserver內存配置過大 這種也是&#xff0c;從網上查找修改方式然后修改即可 情況三…

python的面向對象編程

為什么要面向對象編程&#xff1f; 偉大的領袖毛澤東曾說過&#xff1a;編程最大的敵人是重復。 最開始&#xff0c;在程序中寫的一條條語句&#xff0c;在執行的時候會變成一條條指令交給CPU執行。這就是**“程序是指令的集合”** 。為了簡化程序的設計&#xff0c;引入了函數…

WebPages 全局:深入解析現代網頁設計與開發

WebPages 全局:深入解析現代網頁設計與開發 引言 隨著互聯網技術的飛速發展,網頁設計與開發已經成為了數字化時代的重要組成部分。從簡單的文本和圖像展示,到如今復雜的多媒體交互體驗,網頁設計經歷了翻天覆地的變化。本文將深入探討WebPages全局,包括網頁設計的基本概念…

Defensor 4.5:構建數據資產為中心的安全運營體系

5月31日“向星力”未來數據技術峰會上&#xff0c;星環科技重磅發布數據安全管理平臺 Defensor 4.5版本。新版本引入了以數據資產為中心的數據安全運營體系&#xff0c;通過智能化大模型技術&#xff0c;幫助企業快速、精準地識別核心重要資產&#xff1b;建設全局的數據安全策…

pytorch GPU cuda 使用 報錯 整理

GPU 使用、報錯整理 1. 使用指定GPU&#xff08;單卡&#xff09;1.1 方法1&#xff1a;os.environ[CUDA_VISIBLE_DEVICES]1.2 方法2&#xff1a;torch.device(cuda:2)1.3 報錯1&#xff1a;RuntimeError: CUDA error: invalid device ordinal CUDA kernel errors might be asy…