Javascript必知必会(四)js类型转换
string和numberboolean
javascript类型会根据赋值的进行转成相应的类型。
varstr=""; alert(typeof(str));//string str=; alert(typeof(str));//number varsum=str+;//+编程两个数字相加 alert(sum);//
这一种比较明显,一眼就可以计算出其值。但是请看下面这种转换
varsum=""+""; alert(typeof(sum));//string alert(sum);// varsum=""+; alert(typeof(sum));//string alert(sum);// varsum=+""; alert(typeof(sum));//string alert(sum); vararea=""*""; alert(typeof(area));//number alert(area);// varsub=""-""; alert(typeof(sub));//number alert(sub);// vardiv=""/""; alert(typeof(div));//number alert(div);//.
number类型如果和string类型"+",将会直接number转成string
上述中“+”比较特殊,如果是-、*、/呢;那么最终会转成什么类型呢。
vararea=""*"a"; alert(typeof(area));//number alert(area);//NaN varsub="a"-""; alert(typeof(sub));//number alert(sub);//NaN sub="a"-; alert(typeof(sub));//number alert(sub);//NaN vardiv=""/"a"; alert(typeof(div));//number alert(div);//NaN div="a"/; alert(typeof(div));//number alert(div);//NaN
如上-、*、/是number中算术具有的。string和number是不能进行运算的,所以其值都是NaN。类型number。
vara=true; alert(typeof(a));//boolean varb="true"; varab=a+b; alert(typeof(ab));//string alert(ab);//truetrue alert(a==b);//false
boolean和string,boolean类型自动转成了字符串“true”,但是为什么a不等于b呢
大家看下这个例子:
varc=""; alert(typeof(c));//string vard=; alert(typeof(d));//number alert(c==d);//true
这里给出了转换的原则:(供参考)
1.如果有一个操作数是布尔值,则在比较相等之前将其转换为数值————false转换为0,true转换为1;
2.如果一个操作数是字符串,另一个操作符是数值,则在比较相等之前先讲字符串转换为数值;
3.如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较。
那么在比较字符串和布尔类型是就会:
发生这样的转换:Booleantrue先转成number1,在转成字符串“1”,在进行比较。结果肯定是false了。
null和stringnumberBooleanundefined
vara=null; alert(typeof(a));//object varb="hello"; varab=a+b; alert(typeof(ab));//string alert(ab);//nullhello varc=; varac=a*c; alert(typeof(ac));//number alert(ac);// if(a)//false { }else { alert("false"); } varu; alert(a==u);//true
从给出的例子可以看出:
null在string中自动转成字符串"null",在number中表示数字0,在逻辑判断中相当于false,在值表示时和undefined一样。注意是==而不是===。
虽然javascript在进行比较时,==转换了其比较类型,但是其变量类型并没有因为==而发生改变。