js数据类型

js中的数据类型有两种,一种是基本(简单)数据类型 ,
还有一种是复杂(复合,引用)数据类型;

简单数据类型

  • string 字符串
  • number 数值(整数|小数|NaN)
  • boolean 布尔类型的值 true + false
  • null 空(对象)
  • undefined 没有定义
  • symbol (标志吧)es6新增

复杂(复合)数据类型

  • Oject 对象类型(js中所有的复杂数据类型都是基于objct)
  • Array 数组类型
  • Date 日期类型
  • Function 函数类型
  • RegExp 正则表达式
  • String 字符串对象(基本包装类型)
  • Number 数值对象
  • Boolean 布尔值对象

如何判断数据类型 typeof

  • typeof 字符串(string) 数值 (number) true|false(boolean) undefined (undefined)
  • typeof null object(null是obejct是个意外,js采用2进制存储变量,第一版的js判断是否是object是根据前三位,null全都是0,自然被判断成对象)
  • typeof 复杂数据类型 都是object (除了函数function之外)
  • typeof本身是操作符不是函数
  • typeof返回值string类型
  • typeof undefined 和 typeof一个未定义的变量都是结果都是undefined是出于一种保护机制,防止阻塞代码
  *  undefined和is not defined,前者是声明不赋值,后者是不申明
    var a;
    console.log(typeof b); //undefined
    console.log(typeof a); //undefined
  • 判断对象,除了function,其他都是object那么如何区分呢,可以用instanceof

instanceof

    console.log([] instanceof Array);  //true
    console.log(new String('2') instanceof String); //true
    console.log(new Number(2) instanceof Number);  //true
    console.log(new Boolean(true) instanceof Boolean);  //true
    console.log(function fn() {} instanceof Function);  //true
  • 记得一个小题目,之前面试官问我如何判断空数组[]和空对象{}
    //通过toString
    console.log([].toString()); //数组的toString等于join(',')会用逗号连接里面每个元素
    console.log(({}).toString());  //对象的toString则是显示对象类型[object Object]
    //通过借用Object上面的toString
    console.log(Object.prototype.toString.call([])); //[object Array]
    console.log(Object.prototype.toString.call({})); //[object Object]
    //查看length
    console.log([].length); //0
    console.log({}.length); //undefined
  • 通过上面的题目,我们可以发现还有一种办法判断对象类型
    console.log(Object.prototype.toString.call([]));  //[object Array]
    console.log(Object.prototype.toString.call({}));  //[object Object]
    console.log(Object.prototype.toString.call(function () {}));  //[object Function]
    console.log(Object.prototype.toString.call(new String('a')));  //[object String]
    console.log(Object.prototype.toString.call(new Number(1)));  //[object Number]
    console.log(Object.prototype.toString.call(new Boolean(true)));  //[object Boolean]

你可能感兴趣的:(js数据类型)