最详细的JavaScript包装类及其方法
2020-07-27 20:16
211 查看
什么是包装类?
一,概念
为了便于操作基本类型值,JS 提供了 三个 特殊的引用类型:Boolean、Number、String(undefined和null没有自己的包装类)。这些类型和其他引用类型相似,但同时 也具备 与各自基本类型相应的特殊行为。 实际上:每当读取一个基本类型值的时候, “后台就会创建一个 对应的基本包装类型的对象”,从能能够调用一些方法来操作这些数据。
二,方法
所有的包装类都有 valueOf() 和 toString() 方法,还有charAt(), indexOf()等方法。
valueOf()
返回对象的字符串,数值或布尔值表示。
let a = 10; let b = '10'; let c = false; let d = { test: '这是测试值' }; let e = ['m', 'n', 'o']; console.log(a.valueOf());//10 console.log(b.valueOf());//10 console.log(c.valueOf());//false console.log(d.valueOf());//{test: "这是测试值"} console.log(e.valueOf());//(3) ["m", "n", "o"]
toString()
返回对象的字符串表示。
let a = 10; let b = '10'; let c = false; let d = { test: '这是测试值' }; let e = ['m', 'n', 'o']; console.log(a.toString());//10 console.log(b.toString());//10 console.log(c.toString());//false console.log(d.toString());//[object Object] console.log(e.toString());//m,n,o
valueOf()与toString()的区别
console.log(d.valueOf());//{test: "这是测试值"} console.log(e.valueOf());//(3) ["m", "n", "o"]
console.log(d.toString());//[object Object] console.log(e.toString());//m,n,o
从上面两段代码可以看出,valueOf返回的是对象本身,而toString()表示对象的时候值为[object Object],表示数组的时候是以逗号连接的字符串,相当于Array.join()。
toString()在对象上是怎么样操作的?
let a = '3'; console.log(+a);//3
字符串转为数字,相当于number的方法
let test1 = { num: '123' }; console.log(+test1);//NaN let test2 = { toString: function () { return '123' }, valueOf: function () { return '321' } } console.log(+test2);//321 let test3 = { valueOf: function () { return '321' }, toString: function () { return '123' } } console.log(+test3);//321 let test4 = { toString: function () { return '123' } } console.log(+test4);//123
从上面的例子可以看出操作对象的时候,如果有valueOf()会先调用valueOf()方法,然后调用Number()方法进行转换,如果只有toString()方法,就调用toString()方法,所以valueOf()的优先级高于toString()。
let test1 = { num: '123' }; alert(+test1);//[object Object] let test2 = { toString: function () { return '123' }, valueOf: function () { return '321' } } alert(+test2);//123 let test3 = { valueOf: function () { return '321' }, toString: function () { return '123' } } alert(+test2);//123 let test4 = { valueOf: function () { return '321' } } alert(+test4);//[object Object]
从上面的例子可以看出,alert弹出对象的时候,只调用它的toString()方法,和valueOf()无关。
三, 组包 和 拆包
原始值不是对象,无法拥有自己的属性,但因为的包装类的存在,原始值就好似可以拥有自己的属性了,但其拥有的属性又有点特殊之处。
组包: 基本数据 类型转成 引用数据 类型
- 显式组包:new 包装类()
- 隐式组包:
let test=1; test.toString(); //'1' 这个过程就有隐式组包,因为只有对象才有方法
拆包: 引用数据 类型 转成 基本数据 类型
- 显式组包:包装类.valueOf()
- 隐式组包:
let test = 1; test.toString(); // '1' 组包 test = new Number(test); typeof test;// number 隐式拆包了
相关文章推荐
- javascript调用页面静态方法及其限制
- 详细介绍 Hibernate 泛型 DAO 及其使用方法
- JavaScript中的方法调用详细介绍
- JavaScript中的方法调用详细介绍
- JavaScript的apply和call方法及其区别
- javascript笔记:数组及其方法
- Javascript访问html页面的控件的方法详细分析
- javascript数组去重的三种常用方法,及其性能比较
- JavaScript window.open()方法详细说明
- JavaScript 中在光标处插入添加文本标签节点 详细方法
- Hadoop学习之路(九):数据倾斜的成因及其解决方法(详细代码演示)
- 详细介绍 Hibernate 泛型 DAO 及其使用方法
- 了解JavaScript 数组对象及其方法
- 详细介绍 Hibernate 泛型 DAO 及其使用方法
- javascript中 对象创建的三种方式及其调用方法
- JavaScript判断浏览器运行环境的详细方法
- JavaScript本地对象常用方法(七)——DOM事件及其方法
- JavaScript 中 Date 对象 getFullYear()方法的详细解释
- javascript数组去重的三种常用方法,及其性能比较
- [置顶] 浅谈javascript之事件、函数、方法、对象 各代表何含义,通俗解释及其之间的关联与区别