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

 

 

 

posted @ 2016-02-18 16:27  笨·大叔  阅读(501)  评论(0编辑  收藏  举报