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]
网友评论