js 类型转换学习

类型转换分为显示转换和隐式转换

参考http://www.cnblogs.com/mizzle/archive/2011/08/12/2135885.html

先事件显示的

通过手动进行类型转换,Javascript提供了以下转型函数:

转换为数值类型:Number(mix)、parseInt(string,radix)、parseFloat(string)
        转换为字符串类型:toString(radix)、String(mix)
        转换为布尔类型:Boolean(mix)

1、Number(mix)函数,可以将任意类型的参数mix转换为数值类型。其规则为:

 

1. 用于检测是否为非数值的函数:isNaN(mix)

isNaN()函数,经测试发现,该函数会尝试将参数值用Number()进行转换,如果结果为“非数值”则返回true,否则返回false。

不是number 是 parseInt 或parseFloat

范例

isNaN(1,1)

  console.log('parseInt 比 Number 多了个 如果第一个字符是数字,则继续解析直至字符串解析完毕或者遇到一个非数字符号为止')

实践了下

  console.log('')
    console.log('Number(mix)函数,可以将任意类型的参数mix转换为数值类型。其规则为:')
    console.log('如果是布尔值,true和false分别被转换为1和0')
    console.log('Number(true)')
    console.log(Number(true))
    console.log('Number(false)')
    console.log(Number(false))
    console.log('如果是数字值,返回本身')
    console.log(Number(1))
    console.log(Number(2))
    console.log(Number(0x8d))
    console.log('如果是null,返回0')
    console.log(Number(null))
    console.log('如果是undefined,返回NaN')
    console.log(Number(undefined))
    console.log('如果是字符串,则:1如果字符串中只包含数字,则将其转换为十进制(忽略前导0)')
    console.log(Number('01234'))
    console.log('如果是字符串,则:2如果字符串中包含有效的浮点格式,将其转换为浮点数值(忽略前导0)')
    console.log(Number('.1234'))
    console.log('如果是字符串,则:3如果是空字符串,将其转换为0')
    console.log(Number(''))
    console.log('如果是字符串,则:4如果字符串中包含非以上格式,则将其转换为NaN')
    console.log(Number('b.1234'))
    console.log('===========================')
    console.log('如果是对象,则调用对象的valueOf()方法,然后依据前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,再次依照前面的规则转换返回的字符串值')
    console.log('===========================')
    console.log('测一下valueOf')
    console.log('Array')
    console.log([1,2,3,4,5,6].valueOf())
    console.log(typeof [1,2,3,4,5,6].valueOf())
    console.log((new Array(1,2,3,4,5)).valueOf())
    console.log([1,2,3,4,5,6].toString())
    console.log('Boolean')
    console.log(Boolean(true).valueOf())
    console.log(typeof Boolean(true).valueOf())
    console.log('Date')
    console.log((new Date()).getDate().valueOf())
    console.log('getTime')
    console.log((new Date()).getTime().valueOf())
    console.log('Function')
    function mytest(){var ss=1}
    console.log(mytest.valueOf())
    console.log("typeof:"+typeof mytest.valueOf())
    console.log('Number')
    console.log(Number(5).valueOf())
    console.log('parseInt(string, radix)函数,将字符串转换为整数类型的数值。它也有一定的规则')
    console.log('忽略字符串前面的空格,直至找到第一个非空字符')
    console.log(parseInt('                    1'))
    console.log('如果第一个字符不是数字符号或者负号,返回NaN')
    console.log(parseInt('                    -'))
    console.log(parseInt('                    -1'))
    console.log(parseInt('                    d'))
    console.log('如果第一个字符是数字,则继续解析直至字符串解析完毕或者遇到一个非数字符号为止')
    console.log(parseInt('                    123ddddd'))
    console.log('如果上步解析的结果以0开头,则将其当作八进制来解析;如果以0x开头,则将其当作十六进制来解析')
    console.log(parseInt('                    077'))
    console.log(parseInt('                    077',8))
    console.log(parseInt('                    09'))
    console.log(parseInt('                    0xa'))
    console.log('parseInt 和 Number 会忽略所有前导0 除了16禁止0xa  另外js应该没有8进制文本表示')
    console.log(parseInt('                    xa'))
    console.log(parseInt('                    0xa'))
    console.log(parseInt('                    066'))
    console.log(Number('                    066'))
    console.log('parseInt 比 Number 多了个 如果第一个字符是数字,则继续解析直至字符串解析完毕或者遇到一个非数字符号为止')
    function a(){var ss=1}
    console.log(a.toString())
    console.log(typeof a.toString())
    console.log('==')
    console.log([1,2].valueOf().toString())
    console.log(Number([1,2]))
    console.log(parseInt([1,2]))
    console.log(Number('9a'))
    console.log(parseInt('9a'))
    console.log('==================================')
    console.log('逻辑操作符(!、&&、||)')
    console.log('逻辑与(&&)操作符,如果一个操作值不是布尔值时,遵循以下规则进行转换')
    console.log('如果第一个操作数经Boolean()转换后为true,则返回第二个操作值,否则返回第一个值(不是Boolean()转换后的值)')
    console.log('0&&1'+0&&1)
    console.log('1&&0'+1&&0)
    console.log('如果有一个操作值为null,返回null')
    console.log('null&&1:'+(null&&1))
    console.log('如果有一个操作值为NaN,返回NaN')
    console.log('NaN&&1:'+(NaN&&1))
    console.log('如果有一个操作值为undefined,返回undefined')
    console.log('undefined&&1:'+(undefined&&1))
    console.log('加好的优先级 要比&& 高')
    console.log('逻辑或(||)操作符,如果一个操作值不是布尔值,遵循以下规则')
    console.log('如果第一个操作值经Boolean()转换后为false,则返回第二个操作值,否则返回第一个操作值(不是Boolean()转换后的值)')

    console.log('0||1:'+(0||1))
    console.log('1||0:'+(1||0))
    console.log('对于undefined、null和NaN的处理规则与逻辑与(&&)相反')
    console.log('null||1:'+(null||1))
    console.log('如果有一个操作值为NaN,返回第二个')
    console.log('NaN||1:'+(NaN||1))
    console.log('如果有一个操作值为undefined,返回第二个')
    console.log('undefined||1:'+(undefined||1))
原文地址:https://www.cnblogs.com/qqloving/p/3612101.html