我们在实际应用中一般不会使用基本数据类型的对象
下面一大堆主要是解释 下面代码例子
// 为什么这个a能调用特定属性和方法?
var a = 123;
console.log(a.toString()); // 123
内置对象简介
JavaScript 中的对象分为3种:自定义对象 、内置对象、 浏览器对象。
前面两种对象:是JS的基础内容,属于 ECMAScript; 第三个浏览器对象:属于JS独有,即 JS 内置的API。
内置对象:就是指这个语言自带的一些对象,供开发者使用,这些对象提供了一些常用或者最基本而必要的功能(属性和方法)。
内置对象最大的优点就是帮助我们快速开发。
JavaScript的内置对象:
内置对象 | 对象说明 |
---|---|
Arguments | 函数参数集合 |
Array | 数组 |
Boolean | 布尔对象 |
Math | 数学对象 |
Date | 日期时间 |
Error | 异常对象 |
Function | 函数构造器 |
Number | 数值对象 |
Object | 基础对象 |
RegExp | 正则表达式对象 |
String | 字符串对象 |
基本数据类型不能绑定属性和方法
属性和方法只能添加给对象,不能添加给基本数据类型。
注意,基本数据类型string
是无法绑定属性和方法的。比如说:
// 基本数据类型
let str1 = 'hello';
// 对象
let str2 = new String('hello');
str1.name = 'tom';
str2.name = 'tom';
console.log(typeof str1); // 打印结果:string
console.log(typeof str2); // 打印结果:object
console.log(str1.name); // undefined
console.log(str2.name); // tom
当然,我们可以打印 str1.length
、str1.indexOf("m")
等等。因为这两个方法的底层做了数据类型转换(临时将 string
字符串转换为 String
对象,然后再调用内置方法),也就是我们在下面讲到的包装类
基本包装类型
我们都知道,js 中的数据类型包括以下几种
- 基本数据类型:String、Number、Boolean、Null、Undefined
- 引用数据类型:Object
JS 为我们提供了三个基本包装类型:
- String():将基本数据类型字符串,转换为 String 对象。
- Number():将基本数据类型的数字,转换为 Number 对象。
- Boolean():将基本数据类型的布尔值,转换为 Boolean 对象
包装类型介绍
- 专门封装原始类型的值,并提供操作值得API的对象。
- 包装类型,根本就不用你用,他都是自动创建,自动销毁
- 在试图用原始类型的值,调用函数时,会自动创建对应类型的包装类型对象,调用完函数后自动释放
通过上面这这三个包装类,我们可以将基本数据类型的数据转换为对象。
let str1 = 'hello';
let str2 = new String('hello');
let num1 = 3;
let num2 = new Number(3);
let bool1 = true;
let bool2 = new Boolean(true);
console.log(typeof str1); // 打印结果:string
console.log(typeof str2); // 注意,打印结果:object
console.log(typeof num1); // 打印结果:number
console.log(typeof num2); // 注意,打印结果:object
需要注意的是:我们在实际应用中一般不会使用基本数据类型的对象。如果使用基本数据类型的对象,在做一些比较时可能会带来一些不可预期的结果。
比如说:
var boo1 = new Boolean(true);
var boo2 = new Boolean(true);
// boo1和boo2是对象 对象比较的是内存地址
console.log(boo1 == boo2); // 打印结果竟然是:false
再比如说:
var boo3 = new Boolean(false);
// boo3是对象 隐式转换为true
if (boo3) {
console.log('hello'); // 这行代码竟然执行了
}
基本包装类型的作用
当我们对一些基本数据类型的值去调用属性和方法时,浏览器会临时使用包装类将基本数据类型转换为引用数据类型,这样的话,基本数据类型就有了属性和方法,然后再调用对象的属性和方法;调用完以后,再将其转换为基本数据类型。
举例:
var str = 'hello';
// 这就是为何基本数据类型能调用length属性
console.log(str.length); // 打印结果:5
比如,上面的代码,执行顺序是这样的:
// 步骤(1):把简单数据类型 string 转换为 引用数据类型 String,保存到临时变量中
var temp = new String('hello');
// 步骤(2):把临时变量的值 赋值给 str
str = temp;
// 步骤(3):销毁临时变量
temp = null;