本文主要介绍JavaScript中的基本包装类型以及使用注意点。

一、基本包装类型介绍

基本(简单)数据类型 字符串 + 数值 + null + undefined + 布尔值

为了便于操作基本类型,ECMAScript提供了三个特殊的引用类型:BooleanNumber以及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包装类型的更多相关文章

  1. 前端开发【第4篇:JavaScript基础】

    JavaScript简述 上一篇文章已经聊过JavaScript的历史了这里不再复述了直接切入正题,JavaScript是一门解释型.动态类型.弱类型语言. 解释型语言和编译型语言就类似看一本书,编译 ...

  2. 前端开发【第3篇:JavaScript序】

    JavaScript历史 聊聊JavaScript的诞生 JavaScirpt鼻祖:Bremdan Eich(布兰登·艾奇),JavaScript的诞生于浏览器的鼻祖网景公司(Netscape),发布 ...

  3. 前端开发【第6篇:JavaScript客户端(浏览器)】

    Web浏览器中的JavaScript 客户端JavaScript时间线 1.Web浏览器创建Document对象,并且开始解析web页面,解析HTML元素和它门的文本内容后添加Element对象和Te ...

  4. 前端开发【第5篇:JavaScript进阶】

    语句 复合表达式和空语句 复合表达式意思是把多条表达式连接在一起形成一个表达式 { let a = 100; let b = 200; let c = a + b; } 注意这里不能再块级后面加分号, ...

  5. 从0到1用react+antd+redux搭建一个开箱即用的企业级管理后台系列(基础篇)

    背景 ​ 最近因为要做一个新的管理后台项目,新公司大部分是用vue写的,技术栈这块也是想切到react上面来,所以,这次从0到1重新搭建一个react项目架子,需要考虑的东西的很多,包括目录结构.代码 ...

  6. 前端开发:css基础知识之盒模型以及浮动布局。

    前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把 ...

  7. ESP8266开发之旅 基础篇① 走进ESP8266的世界

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  8. ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  9. ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  10. openlayers5-webpack 入门开发系列一初探篇(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

随机推荐

  1. python爬虫,beatifulsop获取标签属性值(取值)案例

    前面的案例里,均采用正则匹配的方式取值 title = re.findall('">(.*?)</a>', i, re.S)[0]#标题 url = re.findall( ...

  2. jwt的个人理解

    概念: jwt全名json web token,是一种web登录验证和授权技术 官网debug:#debug 应用场景: 授权这是使用JWT最常见的场景.一旦用户登录,每个后续请求将包括JWT,允许用 ...

  3. 【深入解析AQS】从设计模式到ReentrantLock实现再到自定义锁

    深入解析AQS:设计模式.ReentrantLock实现与自定义锁开发 一.模板方法模式:AQS的架构基石 1.1 模式核心思想 模板方法模式通过固定算法骨架+可变实现细节的设计,实现了代码复用与扩展 ...

  4. 【工具】秘塔AI搜索|推荐一个现在还免费的AI聚合搜索工具

    网址:https://metaso.cn/ 使用时间:2024/03/27 . 2024/04/10 以前其实用过它家的秘塔写作猫,当时感觉非常不错. 这次看到它出AI搜索,感觉开发者挺有野心和实力的 ...

  5. 鸿蒙Next开发实战教程:实现抖音长按快速评论特效

    开篇点题,今天玩点花的. 不知道大家有没有发现,抖音上的评论键长按会弹出一排表情框用于快速评论,不过现在鸿蒙原生版的抖音还没有这个功能,今天幽蓝君就小试牛刀,在鸿蒙上做一下这个功能,也是应一位友友的私 ...

  6. vue3 基础-CompositionAPI - setup

    之前介绍的是一些关于代码复用的问题, 如 mixin, plugin 等. 从本篇开始呢, 就将来学习一波 vue3 的新特性, 即 Composition API 咱之前的写法, 即把各种逻辑, 方 ...

  7. vue3 基础-列表渲染

    本篇讲列表渲染, 主要是对 v-on 指令配合 v-if 和一些数组相关的方法来体验 vue 的模板渲染方法. 数组元素的渲染 <!DOCTYPE html> <html lang= ...

  8. 高性能深度学习推理引擎 -- OpenPPL

    OpenPPL OpenPPL是商汤基于自研高性能算字库的开源深度学习推理平台,能够让人工智能应用高效可靠地运行在现有的CPU/GPU等计算平台上,为云端场景提供人工智能推理服务 OpenPPL基于全 ...

  9. WPF 由TreeView想到的 DataTemplate,HierarchicalDataTemplate

    DataTemplate简而言之,解决的就是后台代码中的类以怎么样的形式展现在xaml前台代码中的问题. 所以DataTemplate一般都要指定DataType,一般放在resource中,而Hie ...

  10. RocketMQ源码详解(消息存储、Consumer)

    消息存储 消息存储核心类 private final MessageStoreConfig messageStoreConfig; //消息配置属性 private final CommitLog c ...