Js基础知识梳理系列(01):数据类型
在JavaScript中,有5种简单数据类型(也称基础数据类型):Undefined,Null,Boolean,Number,String。还有一种复杂数据类型:Object。
1-如何检查数据类型?Typeof or instanceof?
typeof:类型,类别
typeof操作符(不是函数方法)用来检测数据的类型,返回一个表名类型的字符串。
var a ; console.log( typeof a );//undefined,变量初始化但是未定义;
console.log( typeof true );//boolean,布尔值;
console.log( typeof ‘uncle-yang’ );//string,字符串
console.log( typeof 123 );//number,数值
var b = new Object(); console.log( typeof b );//object,本身是个对象
var c = null; console.log( typeof c );//object,null被认为是一个空的对象引用 var arr = [1,2,3];console.log( typeof arr );//object,数组的实质是对象 function demo(){};console.log( typeof demo );//function,函数
Instainceof:实例,例子
instanceof 用于判断一个变量是否某个对象的实例
var a=new Array(); console.log(a instanceof Array);//true console.log(a instanceof Object);//true,这是因为Array是object的子类 /*-----*/ //声明函数 function test(){}; //实例化对象 var a = new test(); console.log(a instanceof test)//true
问A:typeof a = ‘object’,那么a可能是一个什么值?
答A:首先a是一个对象,a可能是一个已经声明的对象,也可能是一个值为null的空指针,也可能是一个数组。
问B:typeof的劣势在哪儿?如何检查数组?
答B:typeof在检查基础数据类型的时候,没有什么疑问,但是检查对象的时候无法确定,这个对象到底是否是那种类型。检查一个对象是否为数组,可以用 instanceof 来检测。如
var arr = [1,2,3]; console.log( arr instanceof Array )//true。
另外,在ECMAScript5中新增Array.isArray( arr )方法,用于检查变量是否为数组。支持该方法的浏览器:IE9+,Firefox4+,Safari5+,Opera 0.5+,chrome
var arr = [1,2,3]; console.log( Array.isArray( arr ) )//true
2-undefinde类型
undefinde: 不明确的;未下定义的
Undefinde类型只有一个值,那就是undefined。在变量声明以后,但是未赋值,那么这个变量的值就是undefined。
var a; console.log( typeof a );//undefined,声明为赋值 console.log( typeof c );//undefined,未声明的变量也会返回undefined
3-number类型
number:数值
浮点数值,就是该值中必须包含一个小数点,且小数点最后必须有一位数字。因为保存浮点数值需要的空间是整数的两倍,所以ECMAScript会不失时机的将浮点数值转化为整数值。如:
var a = 1.;//小数点后面没有值,会直接转化成1 var b = 1.00;//小数点后的值为都是0,会直接转化为1
浮点数值的最高精度是17位小数,但是在经行算术计算的精度远远不如整数,如
var a = 0.1, b = 0.2; console.log( a + b )//结果为0.30000000000000004,
造成上例问题的原因是:舍入误差。这是是用基于IEEE754数值的浮点计算的通病,ECMAScript并非独此一家,其他语言也存在这个问题。因此在编程的过程中,不要判断某个特定的浮点数值来做一些事情。
保留小数点后n位:number.toFixed( n );如
console.log( 3.141592657.toFixed( 3 ) )//3.142
NaN类型
NaN:not a number,非数值
任何涉及NaN的操作都会返回NaN,NaN与任何值都不相等,包括本身。在js中,
console.log( 1 / 0 )//Infinity,正无穷 console.log( -1 / 0 )//-Infinity,负无穷 console.log( 0 / 0 )//NaN console.log( 0 / -0 )//NaN console.log( 0 / NaN )//NaN
判断一个变量是否是非数值,用到的方法是isNaN();
console.log( isNaN( NaN ) );//true console.log( isNaN( 123 ) );//false console.log( isNaN( "123" ) );//false,字符串“123”可以转化成数值123 console.log( isNaN( "abc" ) );//true console.log( isNaN( true ) );//false,true可以转换成数值1
数值转换。Number()、parseInt()、parseFloat();
console.log( Number(123) );//132 onsole.log( Number("123") );//数字123 console.log( Number(10.11) );//10.11 console.log( Number(true) );// 1 console.log( Number("abc") );// NaN
Number()的强制类型转换与parseInt()和parseFloat()方法的处理方式相似,只是它转换的是整个值,而不是部分值。
4-string
string:字符串
字符串的特点:ECMAScript中的字符串是不可变的,字符串一旦创建,他们的值就不能改变。如果要改变字符串的值,那么首先要销毁原来的字符串,然后再用另一个包含新字符串填充该变量。
5-类型的强制转换
ECMAScript中可用的3种强制类型转换如下:
Boolean(value)——把给定的值转换成Boolean型;
Number(value)——把给定的值转换成数字(可以是整数parseInt()或浮点数parseFloat());
String(value)——把给定的值转换成字符串。
6-进制转换
在js中,可以利用toString()函数进行数值的进制转换。 num.toString( n );n为2,8,16等任意有效进制格式。如
var num = 3; console.log( num.toString(2) );//11