前端开发系列008-基础篇之JavaScript包装类型
一、基本包装类型介绍
基本(简单)数据类型
字符串 + 数值 + null + undefined + 布尔值
为了便于操作基本类型,ECMAScript提供了三个特殊的引用类型:Boolean、Number以及String类型,它们的结构与其他的引用类型(譬如 Array Object)类似。它们具备与各自的基本类型相应的特殊行为,每当我们读取一个基本类型的值的时候,后台就会创建一个对应的基本包装类型对象,从而让我们能够调用一些方法来操作这些数据。
var str = '测试字符串';
console.log(str.length); //5
console.log(str.substring(2)); //字符串
在这里我们需要思考一个非常严肃而重要的问题 ,那就是属性和方法本是对象的特征,字符串如何能够拥有 length 属性以及其他类似 subString等方法,内部怎么实现的?

我们知道基本类型值它们本身并不是对象,因此从逻辑上讨论他们不应该有属性和方法。
它们能够访问属性和方法的原理是在执行相关代码的时候,内部会执行下面的操作:
(1)创建String类型的一个实例对象
(2)在实例对象上面读取指定的属性(length),调用指定的方法(subString)
(3)销毁该对象
二、基本包装类型的成员
/*01-创建Number类型的对象*/
var num = new Number(10);
/*02-创建String类型的对象*/
var str = new String('hello World');
/*03-创建Boolean类型的对象*/
var bool = new Boolean(true);
String String 是与字符串(string)相对应的对象类型。
Number Number 是与数字值(number)相对应的对象类型。
Boolean Boolean 是与布尔值(boolean)相对应的对象类型。
//001 String
var str = '测试字符串';
console.log(str.length); //5
console.log(str.substring(2)); //字符串
//002 Number
var num = new Number(10);
console.log(num); //Number {[[PrimitiveValue]]: 10}
console.log(typeof num); //object
console.log(typeof 10); //number
//003 Boolean
var bool = new Boolean(true);
console.log(bool); //Boolean {[[PrimitiveValue]]: true}
console.log(typeof bool); //object
console.log(typeof true); //boolean
三、基本包装类型的注意点
① 区分对象和基本值
对象 通过 new 调用构造函数(String、Boolean和Number)创建出来的是对象。
基本值 直接通过字面量方式赋值 或者 通过省略new关键字直接调用构造函数方式创建的基本值。
var str1 = new String('hello');
var str2 = 'hello';
var str3 = String('hello');
/*说明:str1是对象,而str2和str3是字符串(基本数据类型值)*/
② 相等问题
var str1 = '这是一个字符串'; //基本数据类型
var str2 = String('这是一个字符串'); //基本数据类型
console.log(str1 == str2); //true 相等
var str3 = new String('这是一个字符串'); //引用类型-对象
console.log(str1 == str3); //true //值相等
console.log(str2 == str3); //true //值相等
console.log(str1 === str3); //false //值相等,但是引用不相等
console.log(str2 === str3); //false //值相等,但是引用不相等
/*判断下面的变量是否相等*/
var num1 = 10; //基本数据类型
var num2 = new Number(10); //对象
console.log(num1 == num2); //true
console.log(num1 === num2); //false
var bool1 = true;
var bool2 = new Boolean(true);
console.log(bool1 == bool2); //true
console.log(bool1 === bool2); //false
基本类型值相等 => 值相等
引用类型值相等 => 值相等且引用相等
对象是引用类型,因此在判断相等的时候有诸多的注意点和容易出错的地方。
前端开发系列008-基础篇之JavaScript包装类型的更多相关文章
- 前端开发【第4篇:JavaScript基础】
JavaScript简述 上一篇文章已经聊过JavaScript的历史了这里不再复述了直接切入正题,JavaScript是一门解释型.动态类型.弱类型语言. 解释型语言和编译型语言就类似看一本书,编译 ...
- 前端开发【第3篇:JavaScript序】
JavaScript历史 聊聊JavaScript的诞生 JavaScirpt鼻祖:Bremdan Eich(布兰登·艾奇),JavaScript的诞生于浏览器的鼻祖网景公司(Netscape),发布 ...
- 前端开发【第6篇:JavaScript客户端(浏览器)】
Web浏览器中的JavaScript 客户端JavaScript时间线 1.Web浏览器创建Document对象,并且开始解析web页面,解析HTML元素和它门的文本内容后添加Element对象和Te ...
- 前端开发【第5篇:JavaScript进阶】
语句 复合表达式和空语句 复合表达式意思是把多条表达式连接在一起形成一个表达式 { let a = 100; let b = 200; let c = a + b; } 注意这里不能再块级后面加分号, ...
- 从0到1用react+antd+redux搭建一个开箱即用的企业级管理后台系列(基础篇)
背景 最近因为要做一个新的管理后台项目,新公司大部分是用vue写的,技术栈这块也是想切到react上面来,所以,这次从0到1重新搭建一个react项目架子,需要考虑的东西的很多,包括目录结构.代码 ...
- 前端开发:css基础知识之盒模型以及浮动布局。
前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西? 为什么这个浮动没有效果? 这个问题楼主已经回答了n遍.今天则是把 ...
- ESP8266开发之旅 基础篇① 走进ESP8266的世界
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- openlayers5-webpack 入门开发系列一初探篇(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
随机推荐
- python爬虫,beatifulsop获取标签属性值(取值)案例
前面的案例里,均采用正则匹配的方式取值 title = re.findall('">(.*?)</a>', i, re.S)[0]#标题 url = re.findall( ...
- jwt的个人理解
概念: jwt全名json web token,是一种web登录验证和授权技术 官网debug:#debug 应用场景: 授权这是使用JWT最常见的场景.一旦用户登录,每个后续请求将包括JWT,允许用 ...
- 【深入解析AQS】从设计模式到ReentrantLock实现再到自定义锁
深入解析AQS:设计模式.ReentrantLock实现与自定义锁开发 一.模板方法模式:AQS的架构基石 1.1 模式核心思想 模板方法模式通过固定算法骨架+可变实现细节的设计,实现了代码复用与扩展 ...
- 【工具】秘塔AI搜索|推荐一个现在还免费的AI聚合搜索工具
网址:https://metaso.cn/ 使用时间:2024/03/27 . 2024/04/10 以前其实用过它家的秘塔写作猫,当时感觉非常不错. 这次看到它出AI搜索,感觉开发者挺有野心和实力的 ...
- 鸿蒙Next开发实战教程:实现抖音长按快速评论特效
开篇点题,今天玩点花的. 不知道大家有没有发现,抖音上的评论键长按会弹出一排表情框用于快速评论,不过现在鸿蒙原生版的抖音还没有这个功能,今天幽蓝君就小试牛刀,在鸿蒙上做一下这个功能,也是应一位友友的私 ...
- vue3 基础-CompositionAPI - setup
之前介绍的是一些关于代码复用的问题, 如 mixin, plugin 等. 从本篇开始呢, 就将来学习一波 vue3 的新特性, 即 Composition API 咱之前的写法, 即把各种逻辑, 方 ...
- vue3 基础-列表渲染
本篇讲列表渲染, 主要是对 v-on 指令配合 v-if 和一些数组相关的方法来体验 vue 的模板渲染方法. 数组元素的渲染 <!DOCTYPE html> <html lang= ...
- 高性能深度学习推理引擎 -- OpenPPL
OpenPPL OpenPPL是商汤基于自研高性能算字库的开源深度学习推理平台,能够让人工智能应用高效可靠地运行在现有的CPU/GPU等计算平台上,为云端场景提供人工智能推理服务 OpenPPL基于全 ...
- WPF 由TreeView想到的 DataTemplate,HierarchicalDataTemplate
DataTemplate简而言之,解决的就是后台代码中的类以怎么样的形式展现在xaml前台代码中的问题. 所以DataTemplate一般都要指定DataType,一般放在resource中,而Hie ...
- RocketMQ源码详解(消息存储、Consumer)
消息存储 消息存储核心类 private final MessageStoreConfig messageStoreConfig; //消息配置属性 private final CommitLog c ...