JS-包装类(基本包装类型)

原始值指的是没有属性或方法的值;
原始值是一成不变的(它们是硬编码的,因此不能改变)。
原始数据类型指的是拥有原始值的数据;

!!原始值与引用值两大区别:(理解原始值&引用值请移步:理解原始值与引用值)
存储地址不一样;
原始值不能有属性和方法。

js定义了5种原始数据类型:
string, number, boolean, null, undefined;后两个不能有属性(会报错)。

而string, number, boolean都可以有两种,一个是正常的三者,一个是三者对象(用new创建);
即js为我们提供了三个包装类:
String():将原始数据类型字符串,转换为String对象。
Number():将原始数据类型的数字,转换为Number对象。
Boolean():将原始数据类型的布尔值,转换为Boolean对象。

var num = 524;//number
var num2 = new Number(3);//object
var str = "bai";//string
var str2 = new String("hello");//object
var bool = true;//boolean
var bool2 = new Boolean(true);//object
console.log("num的类型是:" + typeof num);
console.log("num2的类型是:" + typeof num2);
console.log("str的类型是:" + typeof str);
console.log("str2的类型是:" + typeof str2);
console.log("bool的类型是:" + typeof bool);
console.log("bool2的类型是:" + typeof bool2);

在这里插入图片描述
接下来看:

var num = 4;
num.len = 3;
console.log(num.len);//打印undefined,而不是3。为什么?

这里不会打印3,而是打印undefined!
!原始值是坚决不可能有属性和方法的,但是为什么能调用呢,是因为它经历了一个过程叫包装类:

  1. 创建出一个和原始数据类型(string或number或boolean)相同的对象;
  2. 这个对象就可以调用包装对象下指定的方法;
  3. 然后这个临时创建的对象就会被销毁。

上题解析:

var num = 4;//num就是原始值
num.len = 3;//在这个原始值调用属性的时候(无论是赋值还是查找),首先它自己不能有属性,不能有怎么办?这时就会隐式的发生一个过程(即包装类):
//num不能加len,它就会隐式的新建一个数字对象即new Number(),
//然后这个对象会调用指定方法即new Number(4).len=3;让这个新对象的len等于3,
//最后调用方法完事了之后系统选择销毁(并不会替你保存下来)。
//其实刚才新new的数字对象没保存到任何地方直接给删了。
//1.new Number(4).len=3; ---> 立即就销毁了
console.log(num.len);//不会报错,打印undefined
//然后执行这一句在访问num.len的时候,它会再一次新建一个数字对象即new Number(),
//但是这个new.Number和上一次的new.Number并不是一个对象,是两个完全不一样的对象。
//所以执行new Number(4).len时上一个已经销毁了,这次访问的对象没有len属性。
//一个对象没有一个属性,访问结果就是undefined。
//2.new Number(4).len
  • 还有一个规律 - -
    如果:对象&&true,结果是true
    如果:true&&对象,结果是对象
    在这里插入图片描述

区别:

var num = 10;//是原始数据
var num2 = Number("10");//没有new是类型转换
var num3 = new Number("10");//是包装类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值