js 包装类


我们都知道js分为原始值和引用值、

原始值可以有属性吗?答案当然是没有,但是为什么原始值却可以调用一些方法呢。

var num = 123;

num.toString() ;  // "123";

明明没有却可以调用toString的方法,就是因为包装类的原因,函数在执行的前一刻发现你写的代码其实是存在问题的,但是因为js是解释型语言,系统会为你进行包装类的操作。

new String(num) -- > "123";

会为你创建一个构想对象String,在看下一个例子。

var num = 123;

num.abc = "abc";

console.log(num.abc);

我们测试会发现,并不会报错会打印undefined,这是因为什么,num是原始值,根本不可能会有abc属性的,自己去添加怎么会不报错呢?而且不报错为什么还没有添加上呢?原因同样是因为包装类。

代码在执行到num.abc = "abc"时,系统发现了你的错误,会进行包装类

new Number(num).abc = "abc" ;

我们发现系统这样进行的包装类会为我们的num增加abc的属性方法,但是为什么又访问不到呢?

因为系统执行完这句语句,进行包装类之后就会delete销毁,当你执行到console.log(num.abc)时,系统一看num原始值,没有abc的属性啊,这么写这不是傻子吗,我帮帮傻子吧,又会帮你进行包装类的过程。

new Number(num).abc    去打印,但是我们需要注意的是,这次进行的包装类操作和上次的是一样的吗?‘

答案当然是否定的,系统执行语句进行包装类,执行完包装类之后就会销毁,在执行语句又会在创建包装类,那么你的这个新的包装类中并没有abc的属性,但是因为进行了包装类已经将num变成一个构造对象了,打印对象中的属性,即使我并没有这个属性,系统一样不会报错,只会提示我undefined。

以上就是包装类的过程,粗浅理解,万望包涵。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值