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

(一)什么是类型转换

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

(二)抽象值操作

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值