js中数据类型转换
显示数据类型的转换
- typeof:能返回六中操作类型的数据:Number, String, Boolean, Objecet, undefined, function
var a = 1; //conloe.log(typeof(a)) 值为Number var a = []; //conloe.log(typeof(a)) 值为Object var a = {}; //conloe.log(typeof(a)) 值为Object var a = null; //conloe.log(typeof(a)) 值为Object var a = true; //conloe.log(typeof(a)) 值为Boolean var d; //conloe.log(typeof(b)) 值为Undefined var a = function(){}; //conloe.log(typeof(a)) 值为function
- js中默认存在一定的类型装换, 默认情况下js会对字符串进行一些隐式转换
console.log("1" + 1) //11 console.log("1" + "1") //11 console.log("1" * 1) //1 console.log("1" -1) //0 console.log("2" + 1) //21 console.log("2"- 1) //1
- Number('number')//把里面的东西转换为数字
var demo = '123' demo = Number(demo) //把demo装换为数字 console.log(typeof(demo)) //number var demoB = true console.log(Number(demoB)) //1 boolean值转为数字类型以后1为真, 0为假 console.log(Number("sfjafja")) //NaN 不能转为为数字的值转换为数字后, 值为NaN var demoN = null console.log(Number(demoN)) //值为0 var demoun = undefined console.log(Number(demoun)) //NaN
- parseInt():
parseInt(val, radix) 把里面的数字转换为整型, 第一个参数可以使字符串, Boolean, 甚至对象,函数,
第二个参数为进制数,默认把该数值当成该进制的数,然后以该进制为基地转换为10进制的数
重新理一下: 就是把传进来的val当成 radix进制, 然后把他转换为10进制,默认不传值的话是10进制
var i = '123' console.log(parseInt(i), typeof(parseInt(i))) //123 number var i = "123.9" console.log(parseInt(i), typeof(parseInt(i))) //123 number var demoi = false console.log(parseInt(demoi), typeof(parseInt(demoi))) //NaN number var demor = 3 console.log(parseInt(demor, 2)) // NaN , 默认把3当成2进制的数,由于2进制中不存在3, 所以输出为NaN var demorx = 'b' console.log(parseInt(demorx, 16)) //11 ,把b当成16进制数,然后把它转换为10进制数 var demos = '100px' console.log(parseInt(demos)) //100 parseInt会从开头的数字开始看,看完不是数字为值 var demols = "afaf100fafa" console.log(parseInt(demols)) // NaN
- parseFloat(): parseFloat('number') //用法和parseInt差不多,但是会把所有的数值都转换为浮点数
console.log(parseFloat("100")) //100 整数的时候parseFloat是不会添加.0 de console.log(parseFloat("100.1")) //100.1 console.log(parseFloat('100.0.01')) //100 默认只会取一个小数点 console.log(parseFloat('100.12raga')) //100.12
- String('val') //把val转换为string
var demostr = String(function (){ console.log('I an String') }) console.log(demostr) //function (){ console.log('I an String')}
- toString('mix') //转换为字符串
var demot = 1213 var demots = toString(demot) var demounde = toString(undefined) console.log(typeof (demounde)) //string console.log(typeof(demots)) //string
- .toString(radix)
想把谁转换为字符串就后面.tostring undefined 和 null 不能用 toString
可以把数字转换成该目标进制的字符串, 以十进制为基地转化成目标进制
注意区别于parseInt(val, radix) 他是把val当成radix进制,然后转换为10进制
console.log(typeof(demot.toString())) var demo = 123 console.log(demo.toString(8), typeof demo.toString(8)) //173 string
隐式数据类型的转换
隐式数据类型的转换是在一定条件下,触发了JavaScript内部的转换机制,内部调用的是显示的数据类型转换
隐式数据类型的触发条件主要情况: isNaN(), +/-/*//, ++, --, >,>=,=<,> < ,%, !, &&, ||, ==, !=
- isNaN(val) // 判断val是不是一个非数,先调用Number函数,然后再执行判断
console.log(isNaN('123')) //false console.log(isNaN('abc')) //true console.log(isNaN(null)) //false Number(null) 是0 所以其值为false console.log(isNaN(undefined)) //true
- +/-, ++/-- */ %
涉及到这些运算符的时候也会发现数据类型的隐式转换
var abc = + "abc" console.log(typeof (abc), abc) //number NaN var abc = "abc" + 1 console.log(typeof (abc), abc) //string abc1 当加号两侧有一个是字符串的时候就调用String()方法把它转换成String console.log(typeof ("1" * 1), 1 * "1") // numeber 1 console.log(typeof (1 / "1"), 1 / 1) //number 1 console.log(typeof (2 % "10"), 2 % "10") //numberi 2
- > < = >= <= == !=
有数字参与比较会转换为数字类型,无数字类型比较会转换为ascall码比较, Boolean类型会转化为数字,数字优先原则
console.log(1>= "2") //会转换成number型在进行比较 console.log("1">"2") //会直接比ascall码值 console.log(3 > true) //true console.log(1 == true) //true console.log(false == 1) //false
- 几个特殊的值
null 和undefined在比较的时候不会发生隐式转换
== != 会发生隐式转换, === !== 不会发生隐式转换
console.log(Number(null)) //0 console.log(null == 0) console.log(Number(null) == 0) //true console.log(1 == "1") //true console.log(1 ==="1") //false console.log(1 === true) //false console.log(1 != "1") //false console.log(1 !== "1") //true