一. 原始值包装类型
在 JS 中,原始值(基础数据)类型是并没有属性和方法的,可是为了便于实际操作引用类型,ES 带来了三种特殊引用类型 ----- 原始值包装类型。
Boolean 、Number 、String
。即他们仨要在他们原先的基础上外包装,给它授予一些属性和方法!!!
每每用到原始值的办法或特性时,后台管理都是会创建一个对应的原始值包装类型的对象,方法如下:
- 建立相匹配原始值包装类型的对象
- 启用相关方法 or 特性(length)
- 立刻消毁目标
let a = "abc";
console.log(a.length); // 实行到转行时,JS 会将 "abc"在平台上转换成 String("abc"),
随后浏览其自己身上的 length 特性,随后执行完转行后,会立刻把 String("abc") 目标消毁!!!!
装车 && 开箱:
装车
JS 还可以通过 Object() 函数公式显式地将基本上数据转换为包装类型!!!
开箱
也可以用 valueOf() 方式把外包装数据转换为基本数据类型。在引用类型目标上启用此方法,会回到它原始值种类,要是没有,就回到该目标自身!!!!
!!!留意:
原始值包装类型的实例对象的申明周期时间
存在于浏览它哪行编码期内 ,因此不能给原始值包装类型的对象添加属性!!
二. 隐式类型转换标准
JS 里的隐式类型转换一般发生在
- * /
及其== > < !
运算符中间。但这些运算符只有实际操作原始值种类,当然如果谈恋爱了,便会先启用 valueOf() 方式,假如返回是原始值种类,就马上回到,要不是,就继续启用 toString() 方式!!!
不同类型的操作符有着不同的转换方法:
<1>
加 【主 string】
-
种类一样直接用
- string string - number number
-
string number 都转换成 string 种类!!
- string number ===> string string
-
其他种类:boolean、null、undefined 转换成 string
-
假如谈恋爱了,就启用目标自己身上的 toString() 方式把它转化为字符串数组,然后按照字符串数组开展 计算!!!
<2>- * /
减乘除 【主 number】
- 两侧数值都能被转换成 number 种类,然后再进行计算!!
- 目标首先会 valueOf() ,随后 toString(), 最终Number()
留意: NaN 都是 number 种类,一切涉及到 NaN 的计算,传参均为 NaN!!
<3>>= <=
较为 【主 number】
-
string > string 无需开展变换,立即按序一个一个字符较为 ASCII 码的值就可以!!!
-
boolean 立即转换成 number
- true ----> 1 - false ----> 0
-
string > number ===> number > number
-
假如谈恋爱了,就 valueOf() ,不好再 toString() !!
- 然后依据前边规则进行对比!!
<4>== != === !==
相同运算符
(1) != 和 == 将进行数据转换 【主 number】
-
boolean 立即转换成 number
- true ----> 1 - false ----> 0
-
string == number ---> number == number
-
假如谈恋爱了,先 valueOf() ,不好再 toString()
- 然后依据前边规则进行对比!!
-
遇上 NaN ,就回到 false!!
(2) !== 和 === 不容易开展数据转换
- 种类不一样就马上回到 false
板栗:
var a = {};
a > 2 // false
// 内容涉及的隐式转换全过程如下所示:
先向 > 运算符两侧数值启用ToPrimitive()方式,都转换成原始值种类。
- 针对 {} ,先启用 {}.valuef() ,因为{}不会有与其相对应的原始值种类(即无法开箱),
于是就会回到该目标自身,即{}
- 然后启用 {}.toString() 方式,因为 {} 是 Object 的案例,因此这里的 toString() 方式,
便是Object原形里的toString()方式(未经重新写过的),于是就会回到字符串数组"[object Object]"
而 "[object Object]" > 2
- > 运算符 主 number ,所以将"[object Object]"转换成 number 为非 NaN
- NaN > 2 // false
针对 toString() 方式:
console.log({1:1}.toString())
console.log([1,2].toString())
console.log(new Date().toString())
看是否有重新写过此方法了!!!
本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!