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))
test