JavaScript数据类型

js的数据类型主要分为两大类:原始(基本)数据类型,引用(复杂)数据类型

  原始数据类型:number,string,boolean,null,undefined

    1. number

    Number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后面至少有一位数字)两种值,值得注意的是NaN(not a number)也是number类型的,NaN 与其他数值进行比较的结果总是不相等的,包括它自身在内。

    检测一个数是否是number类型,可以用 isNaN(),也可以直接用typeof()检测。

    isNaN()返回的是一个Boolean值,也就是true和false,如果检测的内容是数字,返回的值为false,否则返回true

var num = 123;
var num1 = "mercy";
console.log(isNaN(num));        //false
console.log(isNaN(num1));       //true

    typeof()直接返回的是数据的类型

var num = 123;
var num1 = "mercy";
console.log(typeof(num));        //number
console.log(typeof(num1));       //string

    2. string

    字符串类型,是唯一没有固定大小的原始类型。可以用字符串存储 0 或更多的字符,字符串中每个字符都有特定的位置,首字符从位置 0 开始,第二个字符在位置 1,依此类推。这意

味着字符串中的最后一个字符的位置一定是字符串的长度减1。字符串一般使用双引号("")包裹起来。

    检测的话,只能用typeof()来检测

var str = "hello world";
console.log(typeof(str));        //string

    3. boolean

    boolean的返回值只有两种,就true或false。因此,boolean的检测十分简单,也是用typeof()检测,就不多说了。

    4. null

    null类型被看做空对象指针,前文说到null类型也是空的对象引用。

    typeof()检测的返回值为object。

    5. undefined

    只有一个值,即undefined值。使用var声明了变量,但未给变量初始化值,那么这个变量的值就是undefined。

    typeof()检测的返回值为undefined。

  引用数据类型:object

     js中对象是一组属性与方法的集合。这里就要说到引用类型了,引用类型是一种数据结构,用于将数据和功能组织在一起。引用类型有时候也被称为对象定义,因为它们描述的是一类

    对象所具有的属性和方法。

    typeof()检测的返回值为object。

从上面就可以看出,有两种数据类型的检测,返回的都是object,其实还要一种数据类型array,用typeof()检测,它的返回类型也是object,那么问题来了,如何区分这三种数据类型呢?

判断类型的方法很多,这里我就只说一种:toString()方法。

  toString()方法,这个是利用对象的原型来判断。在js中,有万物皆对象的说法,因此我们就可以利用Object.prototype.toString.call(检测的数据)来检测。

var num = 100;
var str = "hello world";
var arr = [1,2,3,4,5];
var obj = {
    name : "张三",
    age : 30,
    sex : "男"
}
var nul = null;
var bool = true;
console.log(Object.prototype.toString.call(num));     //[object Number]
console.log(Object.prototype.toString.call(str));     //[object String]
console.log(Object.prototype.toString.call(arr));     //[object Array]
console.log(Object.prototype.toString.call(obj));     //[object Object]
console.log(Object.prototype.toString.call(nul));     //[object Null]
console.log(Object.prototype.toString.call(bool));    //[object Boolean]

 

posted @ 2018-12-20 13:59  mercy_up  阅读(103)  评论(0编辑  收藏  举报