欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

你不知道的JavaScript之强制类型转换(上)

程序员文章站 2022-07-14 14:26:16
...

(一)什么是类型转换

将值从一种类型转换为另一种类型称为类型转换,这是显式的情况,而隐式的情况称为强制类型转换。也可以这样区分:类型转换发送在静态类型语言的编译阶段,而强制类型转换则发生在动态类型语言的运行时。

(二)抽象值操作

1 ToString

对基本类型值时,会创建一个封装对象,再调用toString()。

null转为"null",undefined转为"undefined",true转为"true",数字转带""。

对象:除非重写toString(),否则返回内部属性[[Class]]的值,如"[object object]"

数组:将所有单元字符串以后再用","连接。如var a=[1,2]; a.toString();//"1,2"

JSON字符串化:JSON.stringfy()   对象遇到undefined,function,symbol会忽略;数组中返回null

JSON.stringfy(function(){}); //undefined
JSON.stringfy([1,undefined,function(){},2]); //"[1,null,null,2]"

2 ToNumber

true转为1,false转为0,undefined转为NaN,null转为0。

字符串:处理失败返回NaN

对象(包含数组):先转为相应的基本类型值,返回的是非数组,则按上面规则转为数字。即先valueOf()再toString()

不同类型对象的valueOf()方法的返回值
对象	返回值
Array	返回数组对象本身。
Boolean	布尔值。
Date	存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。
Function	函数本身。
Number	数字值。
Object	对象本身。这是默认情况。
String	字符串值。
 	Math 和 Error 对象没有 valueOf 方法。

注意:通过Object.create(null)创建的对象[[Prototype]]属性为null,没有valueOf()再toString(),因此无法强制类型转换。

3 ToBoolean

假值:undefined,null,false,+0,-0,NaN,""  除此之外 其余均为真值。

(三)显式强制类型转换

1 字符串和数字之间的转换是通过String(...)和Number(...)来实现,但前面没有new关键字,并不创建封装对象。

2 一元运算符+:获取当前时间戳

var d = +new Date(); // 强制类型转换方法
var d = new Date().getTime(); // 显示方法
var d = Date().now(); // ES5静态方法

3 ~运算符:~x大致等同于-(x+1)  所以用来判断0或者false这种临界情况比较更简洁

4 解析和转换

解析允许字符串中含有非数字字符,按从左到右顺序,遇到非数字字符就停下。而转换不允许出现非数字字符,否则失败返回NaN

var a = "42";
var b = "42px"
Number(a); // 42
parseInt(a); // 42

Number(b); // NaN
parseInt(b); // 42

5显式转换布尔值时推荐使用Boolean(a)或!!a