1. 基本数据类型
-
Number(数字 包括 NaN(非数字) Infinity(无限大))
-
String(字符串 以双引号" "开头并结尾、单引号’ '开头结尾)
-
Null (空对象指针、空值)
-
Boolean 布尔值 (true 和 false)
-
undefined (找不到、未定义)
2. 引用数据类型
-
Object(object对象)
-
Array(数组对象)
-
function(函数对象)
-
Math(数学对象)
-
Date(时间对象)
基本数据类型和引用数据类型的区别
-
引用数据类型的值是可变的
-
基本数据类型不可以被改变 基本数据类型的改变就是重新赋值
-
引用数据类型的值存储在栈和堆中
-
基本数据类型的值存储在栈中
-
基本数据类型不可以添加属性和方法
-
引用数据类型可以添加属性和方法
-
基本数据类型的比较是值的比较
-
引用数据类型的比较是地址的比较
Extend1(undefined 和 null):
undefined
- 声明了一个变量,但未对其初始化时,这个变量的值就是undefined。
- 访问一个变量中不存在的属性或者方法时返回undefined
- 函数中操作形参但没有传递这个实参的时候 形参的值是undefined
- 函数没有返回值的时候 返回undefined
null
- null是原型链的终端
- 如果定义的变量在将来用于保存对象,那么最好将该变量初始化为null,而不是其他值。(换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值,这样有助于进一步区分null和undefined。)
- 当一个数据不再需要使用时,我们最好通过将其值设置为null来释放其引用,这个做法叫做解除引用。不过解除一个值的引用并不意味着自动回收改值所占用的内存。解除引用的真正作用是让值脱离执行环境,以便垃圾收集器在下次运行时将其回收。解除引用还有助于消除有可能出现的循环引用的情况。这一做法适用于大多数全局变量和全局对象的属性,局部变量会在它们离开执行环境时(函数执行完时)自动被解除引用。(DOM0级事件的移除)
Extend2(检测数据类型的方法):
-
typeof (返回一个字符串,表示未经计算的操作数的类型。)
console.log(typeof 42); // number console.log(typeof undefined); // undefined console.log(typeof null) // object
缺点:对于数组和对象或null 都会返回object
-
constructor
var num1 = 7; console.log(num1.constructor === Number); // true
var num1 = new Number(7); console.log(num1.constructor === Number);
缺点: 对于数组和对象或null 都会返回object
-
instanceof(用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置)
-
object.prototype.toString.call(某个变量)
var arr = Math.sin; console.log(Object.prototype.toString.call(arr));// Object Function var str = "string"; console.log(Object.prototype.toString.call(str));// Object String var num = new Number(4); console.log(Object.prototype.toString.call(num));// Object Number var get = null; console.log(Object.prototype.toString.call(get));// Object Null var abc = undifined; console.log(Object.prototype.toString.call(abc));// Object Undifined