当前位置: 首页 > news >正文

包装类对象

包装类对象

介绍

js里的三个主原始数据类型(数值,字符串及布尔)每一个都有其对应的对象类。

JavaScript中不仅提供了数值型,字符串型及布尔型,它还提供了数值类,字符串类及布尔类。这些类将对应的原始数据类型包装了起来,它不但拥有其原始数据值,而且还定义了属性和操作值的方法。

JavaScript能够很灵活的转换各种数据类型。当你访问一个字符串的属性或方法时,JavaScript内部会自动创建其包装对象。这个字符串包装对象将替换原始字符串值,它拥有已定义的属性和方法。

这样的使用方法是对的:

var s="hello";//这是一个原始数据值
 
var S=new String("hello");//这是一个字符串对象

typeof s //"string"
typeof S //"object"

字符串在需要的时候会自动的转换为字符串对象。当你对S使用+运算符时,一个对应的原始字符串值将被创建,以便执行运算。

记住,这里讨论的所有内容都同样作用于数值型和布尔型。最后一点,所有的数值,字符串及布尔都可以通过Object()函数转换成其对应的对象: var number_wrapper=Object(22)

优点

可以使用很多使用方法

封装类对象结合隐式强制转换,让我们可以使用很多实用的方法。
当对原始值提取属性 和 进行方法调用时, 它表现的就像已经使用了对应的对象类型封装了该值一样。如——

"hello".toUpperCase(); //"HELLO"

缺点

获取和设置原始类型值的属性会隐式地创建封装对象,导致没有符合预期行为

一是,隐式转换+封装类 使得对原始值设置属性,可能会没有任何作用

"hello".someProperty=17;
"hello".someProperty; //undefined

这会导致有时候本想给一个对象设置属性,但没想到其是个原始值,这样设置的属性之后获取不到,会造成隐藏的错误。
并且,因为每次隐式封装都会产生一个新的String对象,更新第一个封装对象并不会造成持久的影响。

当做相等比较时,原始类型的封装对象与其原始值行为不一样

二是,这意味着,你不能使用内置的操作符来比较两个截然不同的String对象的内容

var s1 = new String("hello")
var s2 = new String("hello")
s1 === s2 //false

由于每个String对象都是一个单独的对象,气重视值等于自身。对于非严格相等运算符,结果同样如此

s1 == s2 //false

相关文章:

  • Linux应用server搭建手冊—Weblogic服务域的创建与部署
  • ViewPager的高级使用
  • 17、网络--实验五(docker overlay网络实现)
  • 通过ABAP代码判断当前系统类型,BYD还是S4 OP还是S4 Cloud
  • [Contiki系列论文之2]WSN的自适应通信架构
  • 一些好用的库 paramiko
  • 基础才是重中之重~内存里的堆和栈
  • 【芯片救德国】博世10亿欧元建世界最先进芯片工厂,2021年正式投产
  • spring常用的注解
  • 《人件》阅读笔记三
  • SpringBoot拦截器
  • 静态路由的配置
  • HTML 知识弥补
  • 国内互联网可用时间服务器地址(NTP时间服务器地址)
  • 关于隐私数据获取统一说明
  • 「面试题」如何实现一个圣杯布局?
  • canvas 五子棋游戏
  • css系列之关于字体的事
  • express + mock 让前后台并行开发
  • JS基础之数据类型、对象、原型、原型链、继承
  • JS实现简单的MVC模式开发小游戏
  • magento 货币换算
  • magento2项目上线注意事项
  • Spring-boot 启动时碰到的错误
  • Twitter赢在开放,三年创造奇迹
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 仿天猫超市收藏抛物线动画工具库
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 近期前端发展计划
  • 前端_面试
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #if 1...#endif
  • #includecmath
  • #NOIP 2014# day.1 T2 联合权值
  • (2)STL算法之元素计数
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (四)c52学习之旅-流水LED灯
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)VirtualBox安装增强功能
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET NPOI导出Excel详解
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .skip() 和 .only() 的使用
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @Controller和@RestController的区别?
  • @EventListener注解使用说明
  • @Mapper作用
  • [20190401]关于semtimedop函数调用.txt