[JS高程] 特殊的原始值类型
原始值包装类型 (特殊引用类型)
在ES6 时,ECMAScript 数据类型是这样去分类的:
原始值(基本数据类型)
- Number
- String
- Boolean
- Undefined
- Null
- Symbol
引用值(复杂数据类型)
Object
函数也是一种引用类型
且我们知道,通常情况下,只有对象才有方法。但是我们知道,实际上,字符串有字符串方法,如:
indexOf(),lastIndexOf()search()slice(),substring(),substr()replace()toUpperCase(),toLowerCase()concat()trim()- 等等...
Number 有Number 方法,如:
toExponential()toFixed()toPrecision()- 等等...
Boolean 有 Boolean 方法,如:
toString()valueOf()
这些都是基本的数据类型, 但是却有着对象的方法。
实际上,ECMAScript 为了方便的操作原始值,提供了3中 特殊的引用类型 :
- Boolean
- Number
- String
let s1 = "some text";
let s2 = s1.substring(2);
这里,第二行在访问s1 的时候,是以读模式访问的。 也就是要从内存中读取变量保存的值, 以读模式访问字符串值的任何时候,后台都会执行以下3个步骤:
- 创建一个String类型的实例;
- 调用实例上的特定方法;
- 销毁实例。
let s1 = new String("some text");
let s2 = s1.substring(2);
s1 = null;
布尔值和数值也是一样的, 以上3步也会在后台发生,不过使用的是Boolean 和 Number 包装类型而已 。
这三种特殊的引用类型,也叫做原始值包装类型。
原始值包装类型和应用类型的区别
引用类型与原始包装类型的主要区别在于对象的生命周期。 在通过new 实例化引用类型后。 得到的实例会在离开作用域时被销毁,而自创建的原始值包装对象则只存在于访问它的那行代码执行期间。 这也为之不能在运行时给原始值添加属性和方法。
let s1 = "some text";
s1.color = "red"; // 创建临时String 对象,并在执行完该行后立即被销毁。
console.log(s1.color);// undefined
不过如果真的期望达到给一个原始值添加属性。 可以显式的去调用
new Boolean()、new Number()、new String()这些构造函数以创建原始值包装对象。有几点值得注意:
不推荐使用, 因为会让开发者容易疑惑。
在原始值包装类型的实例上使用
typeof会返回 "object"let objNumb = new Number(100);
let objStr = new String("some text");
let objBool = new Boolean(true); typeof objNumb; //'object'
typeof objStr; //'object'
typeof objBool; //'object'
通过原始值包装类型构造函数显式的实例化对象 都是 对应原始值包装类型的实例
objNumb instanceof Number; // true
objStr instanceof String; // true
objBool instanceof Boolean; // true
通过工厂方法
Object构造函数,也能够根据传入值的类型返回相应原始值包装类型的实例let Ostr = new Object("some text");
let Onum = new Object(100);
let Obool = new Object(false); Ostr instanceof String; // true
Onum instanceof Number; // true
Obool instanceof Boolean; // true
[JS高程] 特殊的原始值类型的更多相关文章
- js 不可变的原始值和可变的对象引用
javascript中的原始值(undefined.null.布尔值.数字和字符串)与对象(包括数组和函数)有着根本区别.原始值是不可更改的:任何方法都无法更改(或“突变”)一个原始值.对数字和布尔值 ...
- 【js高程学习笔记】Object类型
创建一组Object的实例的方式有两种: 方法一: var person = new Object(); person.name = '团子'; person.race = '猫'; person.s ...
- JS面向对象特性和值类型与复合类型
JS面向对象之特性已经值类型与复合类型 一些属性 空对象 空对象也是对象, 只是有存变量的变量名, 没有对象属性 var o ={}; 参数传递 值类型: 函数内外两个变量, 两个数据, 都不相同 ...
- 匹夫细说C#:可以为null的值类型,详解可空值类型
首先祝大家中秋佳节快乐~ 0x00 前言 众所周知的一点是C#语言是一种强调类型的语言,而C#作为Unity3D中的游戏脚本主流语言,在我们的开发工作中能够驾驭好它的这个特点便十分重要.事实上,怎么强 ...
- C# 值类型和引用类型
一.基本概念 C#只有两种数据类型:值类型和引用类型 值类型在线程栈分配空间,引用类型在托管堆分配空间 值类型转为引用类型称成为装箱,引用类型转为值类型称为拆箱 以下是值类型和引用类型对照表 从上图可 ...
- C#的is和as操作符来进行强制类型转换&&值类型的拆箱、装箱
if(o is Employee) { Employee e=(Employee)o; //在if语句剩余的部分中使用e; } Employee e=o as Employee; if(e!=null ...
- [CLR via C#]5.3 值类型的装箱和拆箱
原文:[CLR via C#]5.3 值类型的装箱和拆箱 在CLR中为了将一个值类型转换成一个引用类型,要使用一个名为装箱的机制. 下面总结了对值类型的一个实例进行装箱操作时内部发生的事: 1)在托管 ...
- C#中的基元类型、值类型和引用类型
C# 中的基元类型.值类型和引用类型 1. 基元类型(Primitive Type) 编译器直接支持的类型称为基元类型.基元类型可以直接映射到 FCL 中存在的类型.例如,int a = 10 中的 ...
- CLR via 笔记 5.3 值类型的装箱和拆箱
1.装箱 为了将一个值类型转换成一个引用类型,要使用一个名为装箱(Boxing)的机制. 1.在托管堆中分配好内存.分配的内存量是值类型的各个字段需要的内存量加上托管堆的所有对象都有的两个额外成员(类 ...
随机推荐
- 互联网公司作息表「GitHub 热点速览 v.21.42」
作者:HelloGitHub-小鱼干 检测一家公司是否值得一去,除了高薪之外,还有时薪的算法.即便是同样的时薪,在一家能随时摸鱼的公司,岂不是人生快事.WorkingTime 便是上周很火的互联网作息 ...
- 【c++ Prime 学习笔记】目录索引
第1章 开始 第Ⅰ部分 C++基础 第2章 变量和基本类型 第3章 字符串.向量和数组 第4章 表达式 第5章 语句 第6章 函数 第7章 类 第 Ⅱ 部分 C++标准库 第8章 IO库 第9章 顺序 ...
- 5.29日 Scrum Metting
日期:2021年5月29日 会议主要内容概述:人员调整,xyl同时兼顾前后端:确定表格缩放策略和新图表添加:强调任务分配,总结工作. 一.进度情况## 组员 负责 两日内已完成的工作 后两日计划完成的 ...
- BUAA_2020_软件工程_个人项目作业
作业抬头(1') 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人项目作业 我在这个课程的目标是 了解软件工程的技术,掌握工程化开发的能力 这 ...
- FastAPI 学习之路(五十六)将token存放在redis
在之前的文章中,FastAPI 学习之路(二十九)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2,FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2,Fa ...
- NOIP 模拟 $79\; \rm y$
题解 \(by\;zj\varphi\) NOIP2013 的原题 最简单的思路就是一个 bfs,可以拿到 \(70pts\) 75pts #include<bits/stdc++.h> ...
- 2021.8.8考试总结[NOIP模拟33]
T1 Hunter 考场上一看期望直接状压拿了$45pts$跑了.结果正解只用$4$行? 把问题转化为一号猎人之前死的猎人数的期望加一. 期望的线性性. 对每个猎人$i$,$w_i+w_1$种情况中有 ...
- Celery Task(定时任务)及参数
celery beat 是一个调度器:它以常规的时间间隔开启任务,任务将会在集群中的可用节点上运行. 默认情况下,入口项是从 beat_schedule 设置中获取,但是自定义的存储也可以使用,例如在 ...
- 平分的直线 牛客网 程序员面试金典 C++ Python
平分的直线 牛客网 程序员面试金典 C++ Python 题目描述 在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分.假定正方形的上下两条边与x轴平行. 给定两个vecotrA和B ...
- 最短路计数(SPFA× Dijkstra√)
题目描述 给出一个n个顶点m条边的无向无权图,顶点编号为1−n.问从顶点1开始,到其他每个点的最短路有几条. 输入格式 第一行包含2个正整数n,m,为图的顶点数与边数. 接下来M行,每行2个正整数x, ...