JavaScript 原始包装类型汇总

目录
  • 一、原始包装类型
    • 1、Boolean
    • 2、Number
    • 3、String
  • 二、原始包装类型的特点
    • 1、原始值为什么可以调用一些方法
    • 2、引用类型和原始值包装类型的区别
    • 3、原始包装类型构造函数 和 转型函数

前言:

引出问题: 如下一段简单的代码,变量a赋予了字符串类型原始值"str",通过控制台打印输出变量a,只有“str"。a并没有定义slice这个方法,但是后续为什么变量a可以调用slice方法呢?

let a = "str";
console.log(a);  // "str"
console.log(a.slice(1))  // "tr"

针对以上问题,需要追溯到JavaScript中的原始包装类型。

一、原始包装类型

为了方便操作原始值,ECMAScript提供了3种特殊的引用类型:Boolean、Number 和 String

关于Boolean、Number 和 String涉及的方法和属性很多,这里仅介绍三种引用类型的 valueOf() 方法和 toString() 方法。

1、Boolean

创建一个Boolean类型的对象实例时,传入的参数按转换为Boolean类型值的规则确实是true还是false

(1)valueOf() :返回一个原始值 true 或者 false

let a = new Boolean(true);
console.log(a.valueOf());  // true

(2)toString() :返回字符串 ‘true' 或者 'false'

let b = new Boolean(false);
console.log(b.toString());  // "false"

2、Number

(1)valueOf() :返回对象的原始数值

let a = new Number(12);
console.log(a.valueOf());  // 12

(2)toString() :返回相应基数(进制数)的数值字符串

let b = new Number(123);
console.log(b.toString());  // "123"

3、String

valueOf() 、toString() 和 toLocalString() 都继承自 Object,均返回对象的原始字符串值

let a = new String('str');
console.log(a.valueOf());  // str
console.log(a.toString());  // str
console.log(a.toLocaleString());  // str

二、原始包装类型的特点

1、原始值为什么可以调用一些方法

let s = "str";
console.log(s.slice(1))  // "tr"

如上代码,第二行中访问a时,是以读模式访问的,也就是要从内存中读取变量保存的值。

在以读模式访问字符串值得任何时候,后台都会自动执行以下三步:

(1)根据字符串值创建一个 String 类型的实例
(2)调用实例上的特定方法
(3)销毁实例

即相当于执行了以下三行代码:

// 创建String实例
let s = new String("str");
// 调用特定方法
s.slice(1)
// 销毁实例
s = null

这种行为则让原始值拥有了对象的行为。

针对布尔值和数值,也会在后台执行相同的步骤。

2、引用类型和原始值包装类型的区别

引用类型和原始值包装类型的区别主要在于对象的生命周期

  • (1)通过new实例化引用类型后,得到的实例会在离开作用域时被销毁
  • (2)自动创建的原始值包装对象则只会存在于访问它的那行代码执行期间。(所以运行时并不能给原始值添加属性和方法)

3、原始包装类型构造函数 和 转型函数

以Number为例:

  • (1)如果直接调用 Number(),执行的是 Number()转型函数,强制数值类型转换
  • (2)如果通过new 调用 Number(),执行的是 Number() 构造函数,创建一个Number的实例
let a = Number(1);
console.log(typeof a);   // number
let b = new Number(1);
console.log(typeof b);   // object

一个简单的知识点,主要自己之前学习太仓促,这些基础知识点并没有学习牢固,此复盘整理一下。

(0)

相关推荐

  • JavaScript 类型的包装对象(Typed Wrappers)

    例如: new Boolean(false) 会返回一个对象,该对象有一个 valueOf 方法会返回被包装的值.这其实完全没有必要,并且有时还令人困惑.不要使用 new Boolean. new Number 或 new String. 此外也请避免使用 new Object 和 new Array.可使用 {} 和 [] 来代替. --------------------------------------------------------------------------------

  • javascript基本包装类型介绍

    为了便于操作基本类型值,ECMAScript 提供了 3 个特殊的引用类型:Boolean.Number和 String.这些类型与其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为.实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些数据. 一.基本包装类型概述 var box = 'Mr. Lee';//定义一个字符串 var box2 = box.substring(2);//截掉字符串前两位 alert(box2);//

  • 浅谈javascript中基本包装类型

    为了便于操作基本类型值,ECMAScript还提供了3个特殊的引用类型:Boolean.Number和String.这些类型与本章介绍的其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为.实际上,每当读取一个基本类型值得时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据.如下例子: 复制代码 代码如下: var s1="some text"; var s2=s1.substring(2); 这个例子中的变量s1包含一个字符串,字符串当然是

  • Javascript中的包装类型介绍

    最近不看犀牛书了,那本翻译的特烂而且好拗口,尤其是原型那块说的乱七八糟,后来经同事介绍,买了本js高级程序设计,然后就继续苦逼的看,不吐槽了,继续说说js中有新鲜感的包装类型.  一:String 说到String类型,蛮有意思,平时我们都是这样定义一个string类型,如下图: 但是在js中有一点非常特别,那就是string类型是属于基本类型,不属于引用类型,那就说明string的值是保存在"栈"上面的,而很多语言不是这样,比如C#,我觉得js不作为引用类型也是情有可原,毕竟它玩不了

  • JavaScript高级教程5.6之基本包装类型(详细)

    为了便于操作基本类型值,ECMAScript还提供了3个特殊的引用类型:Boolean,Number,String. 实际上,每当读取一个基本类型值的时候,后台应付创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据. var s1="some text"; var s2=s1.substring(2); console.log(s2);//me text 这个例子中s1包含了一个字符串,字符串是基本类型值.第二行调用了s1的subsstring()方法,并将返回

  • 一篇文章带你了解JavaScript的包装类型

    目录 1.简介 2.String 1.创建语法 2.常用方法 3.更多方法 3.Number 1.语法 2.属性 3.常用方法 4.Boolean 总结 1.简介 [解释]: 在 JavaScript 中的字符串.数值.布尔具有对象的使用特征,如具有属性和方法,之所以具有对象特征的原因是字符串.数值.布尔类型数据是JavaScript 底层使用 Object 构造函数“包装”来的,被称为包装类型. 2.String 1.创建语法 字面量 let str = 'abcd'; 构造函数 let st

  • JavaScript类型系统之基本数据类型与包装类型

    写在前面的话 javascript的数据类型可以分为两种:原始类型和引用类型 原始类型也称为基本类型或简单类型,因为其占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其存储在栈(stack)中(按值访问).其中,javascript基本数据类型包括Undefined.Null.Boolean.Number和String五种 引用类型由于其值的大小会改变,所以不能将其存放在栈中,否则会降低变量查询速度,因此其存储在堆(heap)中,存储在变量处的值是一个指针,指向存储对象的内存处(按址访

  • JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】

    本文实例讲述了JavaScript引用类型之基本包装类型.分享给大家供大家参考,具体如下: 为了操作基本类型值,ECDMAScript提供了3个特殊的引用类型--基本包装类型Boolean.Number和String.每当读取一个基本类型值时,后台会创建一个对应的基本包装类型的对象. var str = "Hello world"; var substr = str.substring(); 等价于 var str = new String("Hello world"

  • JavaScript 原始包装类型汇总

    目录 一.原始包装类型 1.Boolean 2.Number 3.String 二.原始包装类型的特点 1.原始值为什么可以调用一些方法 2.引用类型和原始值包装类型的区别 3.原始包装类型构造函数 和 转型函数 前言: 引出问题: 如下一段简单的代码,变量a赋予了字符串类型原始值"str",通过控制台打印输出变量a,只有“str".a并没有定义slice这个方法,但是后续为什么变量a可以调用slice方法呢? let a = "str"; console

  • JavaScript 引用类型之原始值包装类型String

    目录 String 原始值包装类型 String 原始值包装类型 操作方法 1.字符串编码常规化函数 normalize()方法 2.字符串拼接函数concat() 3.字符串提取子字符串方法:slice(),substr(),substring() 4.字符串位置方法 indexOf(),lastIndexOf() 5.字符串包含方法:startsWith(),endsWith()和includes() 6.去除字符串前后空格的方法 trim(),trimLeft(),trimRight()

  • JavaScript原始值与包装对象的详细介绍

    前言 随着 JavaScript 越来越流行,越来越多地开发者开始接触并使用 JavaScript. 同时我也发现,有不少开发者对于 JavaScript 最基本的原始值和包装对象都没有很清晰的理解. 那么本篇文章,就由渣皮来给大家详细介绍一下它们.

随机推荐