对象/基本类型/字面量之间的区别
1.JavaScript对象,基本类型和字面量之间的区别
=====================================
**知识点**
1.基本类型
2.包装器
3.包装对象
----------------------------------------------------
1.基本类型
--------
- *基本类型*: 有5个:
+ 数值型(Number): 构造器函数(`Number()`)
+ 字符型(String): 构造器函数(`String()`)
+ 布尔型(Boolean): 构造器函数(`Boolean`)
+ Undefined: 无构造器
+ Null: 无构造器
----------------------------------------------------
2.包装器
-------
- *包装器*: 基本类型构造器的别名
----------------------------------------------------
3.包装对象
--------
- *包装对象*: new 实例化包装器生成的对象
> 背景知识:
> 变量在内存中有二种存储方式: 值存储, 引用存储(地址)
### 字符串类型
- 字面量: `var str = 'admin'` 或 `var str = String('admin')` // 值
- 构造函数: `var str = new String('admin')` // 引用
> 其它类型与之类似
----------------------------------------------------
### 示例代码: code/demo01.html
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>对象,基本类型和字面量之间的区别</title>
</head>
<body>
<script>
//字面量
var str1 = 'This is a string';
var num1 = 123.456;
var bool1 = true;
// 包装器
var str2 = String('This is a string');
var num2 = Number(123.456);
var bool2 = Boolean(true);
// 基本类型是基于值(即字面量)进行严格比较
console.log(str1 === str2 ? '相等' : '不相等');
console.log(num1 === num2 ? '相等' : '不相等');
console.log(bool1 === bool2 ? '相等' : '不相等');
// 包装对象
var str3 = new String('This is a string');
var num3 = new Number(123.456);
var bool3 = new Boolean(true);
// 为基本类型创建包装对象, 对象与基本值类型不同,所以不全等
console.log(str1 === str3 ? '相等' : '不相等');
console.log(num1 === num3 ? '相等' : '不相等');
console.log(bool1 === bool3 ? '相等' : '不相等');
// 查看类型
console.log(typeof str3);
console.log(typeof num3);
console.log(typeof bool3);
//如何才能相等呢? 只能与包装对象的基本值"valueOf()"比较才有意义
console.log(str1 === str3.valueOf() ? '相等' : '不相等');
console.log(num1 === num3.valueOf() ? '相等' : '不相等');
console.log(bool1 === bool3.valueOf() ? '相等' : '不相等');
// 为基本类型创建包装对象是没有意义,如果想在字面量上调用包装对象上的属性和方法
// 系统会临时自动将基本类型转为包装对象,并在此上面调用属性和方法,执行完毕自动释放
// 现代IDE编辑器,如果你直接实例化一个包装器创建基本类型值时,会输出警告,使用包装器替换
// 如
var n = new Number(100);
// 自动提示警告,并替换成
var n = Number(100);
</script>
</body>
</html>
```