JavaScript原始包装类型
2021/12/20 22:19:43
本文主要是介绍JavaScript原始包装类型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
之前就一直在疑惑,为什么在JavaScript中Number、String和Boolean类型明明是原始值,但是它们居然可以调用方法,比如s.splice()、substring等等,直到前一段时间阅读了《JavaScript高级程序设计》第四章的包装类型才恍然大悟。
参考资料
《JavaScript高级程序设计》第四版
包装类型
我们看如下代码
let s = "123"; let s1 = s.substring(0,2); console.log(s1);// 12
结果为12
是不言而喻的,但是在JavaScript中String是一个原始值,,那么对于变量s
为什么会有方法呢?这是因为后台为我们创建了一个包装类型,且只在只读的情况下才会创建。可以把调用方法那一步看做一下三步:
let s = "123"; // 这三行 let ts = new String("123"); let s1 = ts.substring(0,2); ts = null; // console.log(s1);
从上述代码,我们不难看出,当调用完方法(或者属性)之后,那么此时这个实例就会被销毁。这也是与普通实例的区别,普通的实例会在离开作用域时才会被销毁。对于Boolean 和 Number类型也是如此。
在离开调用方法那一行也就意味着,实例被销毁,也就是无法添加属性了。
let s = '123'; s.color = "red"; console.log(s.color);
也许你会认为它的结果是red
,但事实是undefined
,这个有两行使用的包装类型:s.color = "red";
和
s.color
,所以在给s
添加属性完成后,那么那个包装类就已经被销毁了,在所以在输出的是undefined
。
还有一点需要注意的是,Object 构造函数作为一个工厂方法,能够根据传入值的类型返回相应原始值包装类型的实例。
let t = new Object("123"); console.log(typeof t);// object console.log(t instanceof String);// true let y = t; t[0] = '2';// 无法改变 console.log(t,y);
因为String类型的无法通过小标的方式改变值,而且若每次赋值都是在内存中重新分配了空间,所以不用担心拷贝的问题。
小心Boolean类型包装类在逻辑运算结果
废话不多说,直接上代码
let f1 = false; if(f1){ console.log("我会输出吗?"); } let f2 = new Boolean(false); if(f2){ console.log("我会输出吗?"); } console.log(f1 && true); console.log(f2 && true);
大家可以是试着看看结果是啥。第一个log没有输出,第二个log有输出,第三个log输出true,第四个log输出false。这是因为在逻辑运算中,所有的对象都会转换为true。
这篇关于JavaScript原始包装类型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01后台管理开发学习:新手入门指南
- 2024-11-01后台管理系统开发学习:新手入门教程
- 2024-11-01后台开发学习:从入门到实践的简单教程
- 2024-11-01后台综合解决方案学习:从入门到初级实战教程
- 2024-11-01接口模块封装学习入门教程
- 2024-11-01请求动作封装学习:新手入门教程
- 2024-11-01登录鉴权入门:新手必读指南
- 2024-11-01动态面包屑入门:轻松掌握导航设计技巧
- 2024-11-01动态权限入门:新手必读指南
- 2024-11-01动态主题处理入门:新手必读指南