javascript中的类型转换

homeros    前端    999+ 次    2017-12-12 17:24:56


首先,Javascript中将类型分成两大类:

  1. 原始类型:共有5种原始类型,包括数字、字符串、布尔值、null和undefined
  2. 对象类型:除了原始类型之外,别的都是对象类型;包括数组和函数也是一种对象

任意类型转换的原则是:

  1. 当js期待一个布尔值时,js会将任意类型转换成布尔值;
  2. 当js期待一个字符串时,js会将任意类型转换成字符串;
  3. 当js期待一个数字时,js会将任意类型转换成数字;
  4. 当js期待一个对象时,js会尝试将任意原始类型转换成对象——什么时候js会期待一个对象呢?一般是指调用属性/方法的时候:例如 any.property,any.method()

任意的类型转换遵循下表:

 

类型值转换为
字符串数字布尔值对象
空undefined"undefined"NaNfalsethrows TypeError
null"null"0falsethrows TypeError
布尔值true"true"1 new Boolean(true)
false"false"0 new Boolean(false)
字符串""(空字符串) 0falsenew String("")
"0"(0字符串) 0truenew String("0")
"1.2"(数字字符串) 1.2truenew String("1.2")
"one"(非空、非数字) NaNtruenew String("one")
数字0"0" falsenew Number(0)
-0"0" falsenew Number(-0)
NaN"NaN" falsenew Number(NaN)
Infinity"Infinity" truenew Number(Infinity)
-Infinity"-Infinity" truenew Number(-Infinity)
1 (非0数字)"1" truenew Number(1)
对象{} (任意对象)遵循转换规则遵循转换规则true 
[] (空数组)""0true 
[9] (1个数字元素)"9"9true 
[9,1,'a'] (其他数组)"9,1,a"NaNtrue 
function(){} (任意函数)遵循转换规则遵循转换规则true 

 

几个注意点:

  1. 数字字符串可以直接转换成数字,而且允许前后有空白字符(包括空格、\t、\n等)
  2. null和undefined转换成对象时,会抛出 TypeError 异常:例如 null.toString() 就会出错
  3. 转换和==是不一样的: 一个值能转换成另一个值,但不代表两个值==:
    例如 undefined可以转换成false,但undefined!=false;再有就是 [] 可转换成 true,但 [] == false

几个小技巧:

  1. 一元操作符 "+" 可以将操作数转换成数字:
    +x 等级于 Number(x),也可以写出 x-0
    那么我们将日期类型转换成毫秒的时候,可以这么写: var ms = +new Date
  2. 一元操作符 "!" 会将操作数转换成布尔值并取反:
    !1 === false
    !!1 === true
  3. 使用全局函数parseInt和parseFloat能更灵活地将字符串转换成数字,具体请自行学习:例如 parseInt("3 mouses") === 3

对象转换成原始类型的规则

 


首先,我们需要知道:所有的对象都继承/拥有两个方法,toString()和valueOf()。对象基类Object的toString()会返回一个字符串 "[object Object]",而默认的valueOf()方法则只会简单的返回对象自身。

 

  1. 对象转换成布尔值:
    非常简单,所有对象都转换成true;即使是new Boolean(false),它一样会转换成false
  2. 对象转换成字符串:
    流程图如下:
  3. 对象转换成数字:
    流程图:

对于 "+" "==" "!=" 和 关系运算符(主要包括大于号小于号)

在表达式中,如果碰到了以上运算符,并且至少有一个操作数是对象的话,会有它们独特的规则,具体可参考犀牛书第四章。


上一篇: Javascript中的异步编程

下一篇: jQuery源码阅读-jQuery是如何定义的

最新评论

暂无评论

热门文章

最新评论

网站数据

网站文章数:481

今日UV/PV/IP:20/24/20

昨日UV/PV/IP:11/14 /10

TOP