JavaScript 基本包装类型,包装对象
前言
javascript对象是一种复合值,它是属性或已命名值的集合。通过'.'符号来引用属性值。当属性值是一个函数时,称其为方法。通过o.m()来调用对象o中的方法。我们发现,字符串也同样具有属性和方法
var s = 'hello world';
console.log(s.length);//11
字符串既然不是对象,为什么它会有属性呢?这就引出了今天介绍的内容——包装对象
定义
在javascript中,“一切皆对象”,就连三种原始类型的值(数值、字符串、布尔值),在一定条件下,也会自动转为对象,也就是原始类型的“包装对象”
包装对象是特殊的引用类型。每当读取字符串、数字或布尔值的属性或方法时,创建的临时对象称做包装对象
为了便于引用字符串的属性和方法,javascript将字符串值通过调用new String()的方式转换成对象,这个对象继承了字符串的属性和方法,并被用来处理属性和方法的引用。一旦属性或方法引用结束,这个新创建的对象就会销毁。数字或布尔值也类似
实际的过程可以理解为下面:
var s1 = 'some text';
var s2 = s1.substring(2);
//上述过程看起来发生了三个步骤
var s1 = new String('some text'); //(1)创建String类型的一个实例
var s2 = s1.substring(2); //(2)在实例上调用指定的方法
s1 = null; //(3)销毁这个实例
生存期
引用类型和基本包装类型的主要区别是对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁。这意味着不能在运行时为基本类型值添加属性和方法
var s1 = 'some text';
s1.color = 'red';
alert(s1.color);//undefined
var s2 = new Boolean('some text');
s2.color = 'red';
alert(s2.color);//'red'
显式创建
可以通过new操作符显式创建包装对象,但应该在绝对必要的情况下再这样做。因为这种做法,很容易让人分不清是在处理基本类型还是引用类型的值
有两种方式显式创建包装类型的方式:
// Object方式
var s = new Object('abc');
var b = new Object(true);
var n = new Object(123);
// 构造函数方式
var s = new String('abc');
var b = new Boolean(true);
var n = new Number(123);
转型函数
直接调用转型函数与使用new调用基本包装类型的构造函数是不一样的,使用转型函数返回的是基本类型值
var s = 'abc'; // typeof s === string
var s1 = String(s); // typeof s1 === string
var s2 = new String(s); // typeof s2 === object
var s3 = new Object(s); // typeof s3 === object
比较运算
【1】等于运算符'=='将原始值和其包装对象视为相等,因为其中一个操作数是对象,需要调用对象的valueOf()方法,Number对象、Boolean对象和String对象的valueOf()方法都返回其对应的原始值
var s1 = new String('abc');
var s2 = 'abc';
var n1 = new Number(123);
var n2 = 123;
var b1 = new Boolean(true);
var b2 = true;
console.log(s1 == s2, n1 == n2, b1 == b2);//true true true
【2】全等运算符'==='将原始值和其包装对象视为不相等。因为全等运算符要比较类型和值,原始值和其包装对象的类型不同
var s1 = new String('abc');
var s2 = 'abc';
var n1 = new Number(123);
var n2 = 123;
var b1 = new Boolean(true);
var b2 = true;
console.log(s1 === s2, n1 === n2, b1 === b2);//false false false
小结
通过本文,我们学习了什么是包装类型,包装类型就是原始类型的对象表示,这样使得原始类型也可以有自己的属性和方法了。
包装对象和原始值的区别基本上就是“基本类型”和“引用类型”的区别了。譬如:能否定义属性和方法,typeof 值不一样。
使用String()等转型函数和使用new String() 是不一样的。前者返回基本类型,后者返回对象类型。
JavaScript 基本包装类型,包装对象的更多相关文章
- JavaScript--基本包装类型+Math对象
1. 基本包装类型 1)为了便于操作基本类型值,ECMAScript提供了3个特殊的引用类Boolean, Number, String 每当读取一个基本类型值的时候,后台就会创建一个对应 ...
- javaScript对象-基本包装类型的详解
本人按书上的内容大致地把javaScript对象划分成“引用类型”.“基本包装类型”和“内置对象”三块内容. 我们这篇先了解下基本包装类型的详细用法吧! 一.我们先解下相关概念: 1.引用类型的值(对 ...
- javascript之基本包装类型(Boolean,Number,String)基础篇
前几天整理了javascript中Array方面的知识,但是String中的一些方法多多少少和Array里的方法有些类似容易混淆,就顺便连同String所在的包装类一起整理一下,希望可以帮助到初学者, ...
- 《JavaScript 闯关记》之基本包装类型
为了便于操作基本类型值,JavaScript 还提供了3个特殊的引用类型:Boolean.Number 和 String.实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象 ...
- 《JavaScript高级程序设计》读书笔记 ---基本包装类型
为了便于操作基本类型值,ECMAScript 还提供了3 个特殊的引用类型:Boolean.Number 和String.这些类型与本章介绍的其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行 ...
- 第一百零七节,JavaScript基本包装类型,数据类型的方法
JavaScript基本包装类型,数据类型的方法 学习要点: 1.基本包装类型概述 2.Boolean类型 3.Number类型 4.String类型 为了便于操作基本类型值,ECMAScript提供 ...
- javascript 之基本包装类型--04
基本包装类型 基本包装类型是特殊的引用类型.每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而可以调用属性.方法来进行后续操作. ECMAScript还提供了三种基本包装类型 ...
- JavaScript--我发现,原来你是这样的JS(再说引用类型,基本包装类型与个体内置对象)
一.介绍 本篇是续上一篇的,引用类型的后篇,本篇主要是说基本包装类型和个体内置对象.如果你能收获一些知识,那我很高兴,很满足,哈哈哈,希望大家能愉快看完.如果你想学好一门技术,要不忘初心,方得始终. ...
- JavaScript(第十二天)【基本包装类型】
1.基本包装类型概述 2.Boolean类型 3.Number类型 4.String类型 为了便于操作基本类型值,ECMAScript提供了3个特殊的引用类型:Boolean.Number和Strin ...
随机推荐
- #020PAT 没整明白的题L1-009 N个数求和 (20 分)
后面的测试点过不去,两个错误一个超时. 目前未解决 L1-009 N个数求和 (20 分) 本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和 ...
- WPF中在MVVM模式下,后台绑定ListCollectionView事件触发问题
问题:WPF中MVVM模式下 ListView绑定ListCollectionView时,CurrentChanged无法触发 解决方案: 初期方案:利用ListView的SelectionChang ...
- 《JAVA程序设计》_第四周学习总结
一.本周学习内容 1.子类与父类--5.1知识 在类的声明中用关键字extends来定义一个类的子类,格式如下: class 子类名 extends 父类名 { ... } 2.子类的继承性--5.2 ...
- vue.js 跳转同一页面,传不同值,组件监听路由
watch: { '$route' () { this.type = this.$route.params.type this.loadData() } },
- OllyDbg使用笔记
[TOC] OD步过后,返回到之前某位置,重新单步执行 找到你想返回的行, 右键选择New origin here,快捷键Ctrl+Gray *, 然后程序会返回到这一行,再次按F7或者F8等执行即可
- UML 教程
UML 教程 关键词:部署图, 组件图, 包图, 类图, 复合结构图, 对象图, 活动图, 状态机图, 用例图, 通信图, 交互概述图, 时序图, 时间图 简介 部署图 组件图 包图 类图 复合结构图 ...
- Spring Boot2.0使用Spring Security
一.Spring Secutity简介 Spring 是一个非常流行和成功的 Java 应用开发框架.Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性 ...
- 软工+C(1): 题目设计、点评和评分
// 下一篇:分数和checklist 如何设计题目 教学中的一个问题是老师出题太简单了,题目设计一开始上来就不紧凑,我认为一个好的课程应该上来就给你紧凑感,而不是先上来"轻松2-3周&qu ...
- 【学习总结】GirlsInAI ML-diary day-8-list列表
[学习总结]GirlsInAI ML-diary 总 原博github链接-day8 认识list列表 新的数据类型:list. list是一种有序的集合,可以随时添加和删除其中的元素(链表??) 1 ...
- 输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)
对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息. 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream 对象的输入流: Ob ...