1种引用类型(复杂类型):
Object Object本质上是由一组无序的键值对组成的.使用 typeof 操作符可以检测基本数据类型,对一个值使用 typeof 操作符可能会返回下列某个字符串:
‘undefined’ —— 这个值未定义‘boolean’ —— 这个值是布尔值‘Stinrg’ —— 这个是是字符串‘number’ —— 这个值是数值‘Object’ —— 这个值是对象‘function’ —— 这个值是函数一些使用 typeof 操作符的例子:
var a; var obj = { name:"why", age:18 } console.log(typeof 'abcdef'); console.log(typeof obj); console.log(typeof 12); console.log(typeof a);打印的结果:
有3个函数可以把非数值转化为数值: Number, parseInt() , parseFloat(),第一个函数可以用于任何数据类型,二另外两个函数则专门用于把字符串转化为数.这三个函数对于同样的输入会有不同的返回结果.
使用Number 的例子:
console.log(Number('hello world')); console.log(Number('')); console.log(Number('0000110')); console.log(Number(true));在处理整数转换时更为常用。在转换是查看是否符合数值模式。 她 遵循的转化规则如下:
如果在转换字符串的话,会忽略前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或负号后不是数字字符,就会返回NaN。如果是空字符串,就会返回NaN。如果第一个字符是数字字符,parseInt()会继续解析下去,直到解析完或遇到了一个非数字字符。因为小数点不是有效的数字字符,类似"22.5" 会被转换为22 。 -parseInt能解析不同进制的数字字符。因为javascript引擎不同,ECMAScript3和ECMAScript在解析八进制字符串时存在分歧,建议都加上进制参数。 console.log(parseInt('123asc')); //123 console.log(parseInt('')); //NaN console.log(parseInt('0xA')); //10(十进制数) console.log(parseInt(22.5)); //22 console.log(parseInt('070')); //56(八进制) console.log(parseInt('70')); //70(十进制数) console.log(parseInt('0xf')); //15在ECMAScript 3 JavaScript中,'070’被当成八进制字面量,因此转化后的十进制为56,而在ECMAScript 5 JavaScript中,parseInt()已经不具备解析八进制的能力,因此前面的0被认为是无效的,从而将这个值当成70,结果就得到十进制的70.
为了消除在使用parseInt()函数时可能导致的困惑,可以为这个函数提供第二个参数,转化时使用基数(即多少进制),如果知道要解析的值是十六进制格式的字符串,那么指定基数16作为第二个参数,可以保证得到正确的结果,例:
console.log(parseInt('0xAF',16)); //175实际上,如果指定了16作为第二个参数,字符串可以不带前面的0x,如下所示:
console.log(parseInt('AF',16)); //175 console.log(parseInt('AF')); //NaN在上面的例子中,第一个转化成功了,第二个却失败了.差别在于第一个转换传入了技术,第二个没有传入技术,明确告诉了parseInt() 要解析一个十六进制格式的字符串,二第二个转换发现第一个字符不是数字字符,因此就自动终止了.
指定基数会影响数值的输出结果:
console.log(parseInt('10',2)); //2 console.log(parseInt('10',8)); //8 console.log(parseInt('10',10)); //10 console.log(parseInt('10',16)); //16要把一个值转为字符串有两种方法.第一种是使用几乎每个值都有的toString() 方法,这个方法唯一要做的就是返回相应值的字符串的表现.还有一个是 String() 方法.
看下面的例子:
var age = 18; var strAge = age.toString(); var show = true; var strShow = show.toString(); console.log(strAge,strShow); //字符串18和字符串true数值,布尔值,对象和字符串(每个字符串也有一个toString 方法,返回该字符串的副本)都有toString()方法.但是 null 和 undefined 没有这个方法.
多数情况下,调用toString() 方法不需要传递参数,但是,在调用数值的toString()方法的时候,可以传递一个参数,输出数值的基数.默认情况下,toString() 方法以十进制格式返回数值的字符串表示,而通过传递基数,toString() 方法可以输出十进制,八进制,十六进制,二进制乃至其他任何有效进制的数据,示例如下:
var num = 10; console.log(num.toString()); //'10' console.log(num.toString(2)); //'1010' console.log(num.toString(8)); //'12' console.log(num.toString(10)); //'10' console.log(num.toString(16)); //'a'通过上面的实例,我们可以看出,通过指定基数,toString() 方法会改变输出的值,而数值10根据基数的不同,可以在输出的被转化为不同的数值格式.注意,在默认情况下输出的值与指定基数10 的结果是相同的.
在不知道要转换的值是 null 或是 undefined 的情况下.还可以使用转型函数String(),这个函数能够将任意类型的值转化为字符串,String() 方法的转换遵循以下规则:
如果值有toString() 方法,则会调用 toString() 方法;如果值是null, 则会返回 "null";如果值是undefined 则会返回"undefined"; 示例如下: var a = 10; var b = true; var c = null; var d ; console.log(String(a)); //'10' console.log(String(b)); //'true' console.log(String(c)); //'null' console.log(String(d)); //'undefined'没有toBoolean()这个方法,但有全局方法Boolean()。
数据类型转为ture的值转为false的值BooleantruefalseString任何非空字符串“”(空字符串)Number任何非零数值(包括无穷大)0和NaNObject任何对象nullundefined不适用undefined总结:只有undefined,null, 0 ,空字符串,NaN 会转化为 false ,其余均为 true.
