javascript可以做灵活的类型转换,因此其”==”相等运行算也随相等的含义灵活多变,例如下面的结果均为ture.
null == undefined
“0” == 0 //比较之前字符串转换为数字
0==false //比较之前布尔值转换为数字
“0” == false //比较之前字符串和布尔值都转换为数字
注意:一个值转换为另一个值,并不意味着两个值相等。比如,如果在期望使用布尔值的地方使用了undefined,它将转换为false,但这并不表明undefined==false。仅是在运行符和语句期望使用多样化的数据类型,并可以互相转换。If语句将undefined转换为false,但“==”从不试图将操作数转换为布尔!
js提供了自动类型转换,但有时仍需要要显示转换,或者为了使代码变得清晰易读(个人觉得这个比较重要)
使用String(),Number(),Boolean(),Object()
Number(“3”) //=>3
String(“false”) //=>”false”或使用false.toString()
Boolean([]) //=>true
Object(3) //=>new Number(3)
试图将null和 undefined转为对象会报TypeError,使用Object()函数不会报异常,它仅简单的返回一个新的空对象。
运算符隐式类型转换
x+”” //等价于String(x)
+x //等价于Number(x)
!!x //等价于Boolean(x)
JS提供了数字到字符串和字符串到数字的转换
Number类定义了toString方法可以接收表示转换基数的参数。如果不指定就是十进制。如:
var n=17;
binary_string= n.toString(2);
octal_string= n.toString(8);
hex_string= n.toString(16);
当做财务处理和科学计算时可以使用:
toFixed() //小数点后的指定位数来将数字转换为字符串,从不使用科学记数法
toExponential() //指数记数法将数字转换为指数形式的字符串,其中小数点前只有一位
toPercision() //根据指定的有效数字位数将数字转换成字符串
注意:所有三种方法都会适当地进行四舍五入或填充0
例如:var n=123456.789;
n.toFixed(0) //”123457”
n.toFixed(2) //”123456.79”
n.toFixed(5) //”123456.78900”;
n.toExponential(1)//1.2e+5
n.toExponential(3)//1.235e+5
n.toPercision(4) //1.235e+5
n.toPercision(7) //123456.8
n.toPercision(10)//123456.7890
如果通过Number()转换函数传入一个字符串,它会试图将其转换为一个整数或浮点数直接量,这个方法只能基于10进制转换。
parseInt()和parseFloat()更加灵活一些
可有在字串中使用前缀”0x”或”0X”
parseInt(“0xff”) //=>255
parseInt(“.1”) //=>NaN 不能以.开始
parseFloat(“$72.47”) //=>NaN不能以$开始
parseInt()可以接收两个参数,第二个参数合法取范围2~36如:
parseInt(“11”,2) //=>3
parseInt(“ff”,16) //=>255