码迷,mamicode.com
首页 > Web开发 > 详细

由几道JS笔试题引发的知识点探究二——强制类型转换

时间:2015-06-08 08:21:01      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

  强制类型转换的概念相信大家一定不陌生,例如整数和浮点数进行算术运算,整数会在后台转型为浮点数。JS作为一门弱类型的动态脚本语言,任何两种数据类型之间都可以进行性转换而不会报错,这就带来了一整套错综复杂的类型转换规则。例如我们的题目 alert(‘5‘+5),大家都知道答案是‘55‘,但为什么这里不将string转换成number而要将number转换成string呢?在其他情况下也都要将string转型成number吗?下面我们就来做一次完整的总结。

  一、何时转型为boolean?

  1. 逻辑非操作符

  2. 条件操作符(?)

  3. if while for switch

  这三种情况下,如果操作数不是boolean类型的,都会在后台调用Boolean()方法,该方法对以下值返回true:

  对象(包括数组、函数,无论是不是空,都返回true)、非空字符串、非零数值(包括Infinity,但不包括NaN)

  相对应的,如下情况返回false

  空字符串、0、NaN、null、undefined

  二、何时转型为number?

  1. ++/--

  2. +/-(作为一元操作符)

  3. 位操作符(NaN和Infinite被当作0对待)

  4. *  / 和 - 

  5. 关系操作符(> < >= <=)

  6. 相等操作符(== !=)

  这六种情况下,如果操作数不(全)是number类型的话,会在后台调用Number()方法(注意不是parseInt()方法),该方法有如下规则:

  1. boolean值true和false分别转换为1和0

  2. null转换为0

  3. undefined转换为NaN

  4. 空字符串转换为0

  5. 对可识别的格式转换为相应数字(例如‘1.1‘,‘012‘,‘0x1f‘),否则转换为NaN(例如‘1.2.3‘,‘12ab‘)

  6. 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值

  三、何时转型为string?

  1. +(二元操作符)

  当加法操作符的两个操作数中有一个是string类型的时候,就会调用另一个操作数(非string类型)的toString()方法(因为null和undefined没有toString()方法,因此会调用String()方法),然后连接两个字符串得到一个新字符串,下面直接用几个典型例子来说明:

-5.5+‘5‘  // ‘-5.55‘
NaN + ‘5‘ // ‘NaN5‘
-Infinity+‘5‘ // ‘-Inifnity5‘
null + ‘5‘ // ‘null5‘
undefined + ‘5‘ // ‘undefined5‘
true + ‘5‘ // ‘true5‘
false + ‘5‘ // ‘false5‘
[1,2,3,4] + ‘5‘ // ‘1,2,3,45‘
{} + ‘5‘ // ‘5‘
{a:1} + ‘5‘ // ‘5‘
{a:1, b:2} + ‘5‘ // 报错
var o = {}
o + ‘5‘ // ‘[object Object]5‘

  上述例子大都很好理解,但最后几个关于对象的还存在疑问,主要有两点问题:

  1. 对象的toString()方法究竟做了什么?

  2. 直接将{}作为操作数和将o={} 作为操作数有何不同?

  这两个问题目前本人还不十分清楚,以后有时间会研究研究(如果有大神知道答案,请不吝赐教)。

  

由几道JS笔试题引发的知识点探究二——强制类型转换

标签:

原文地址:http://www.cnblogs.com/zhangjianhu/p/4559965.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!