JavaScript 是一门弱类型的语言,这意味着一个变量可以被赋予不同类型的值。但在某一特定的时刻,这个变量还是具有确定的类型的。在进行数据处理时,正确判断变量的类型,常常是非常重要的。
JavaScript中使用typeof操作符,会有以下几种类型返回值“number”, "boolean", "string", "undefined", "object", "function"。根据这些类型的性质不同,我们将其分成三个大类,基本类型,对象类型和函数类型
基本类型包括:
- 数字类型 number,字面量包括八进制,十进制,十六进制,小数,指数等多种方式
- 布尔类型 boolean, 字面量包括true和false
- 字符创类型 string, 字面量以"" 或 ''中的文字
- 未定义类型 undefined,字面量是undefined,或未赋值过的变量
基本类型不是对象(类型)
基本类型没有原型链,也不能成为其它对象的原型
基本类型不能通过new关键字声明,而是通过字面量赋值声明
基本类型可以进行大小比较 (>, <, ==, ===)
基本类型没有自己的方法
对象类型 object
对象类型具备自己的原型链,原型链的根都为Object.prototype
对象类型可以通过 new 关键字声明
对象类型的比较类似C++中的地址比较,只可以比较两个变量是否指向同一个对象
对象类型包含方法,由于对象类型都直接或间接的继承自Object.prototype,所以至少有这个原型所定义的方法
null 是对象类型,只不过它是一个的空对象
函数类型 function
包括函数和方法,表示一段可执行的代码,通过Function关键字声明。可以赋值给一个变量,并通过这变量进行函数调用。
外覆类
尝试以下代码
var a = 3.14159265; a.toFixed(2);
前面说了基本类型没有自己的方法,这是怎么回事?
原来JavaScript一旦发现在一个基本类型的变量上使用对象的一些操作,会自动的将基本类型替换为外覆对象(undefined类型除外)。
所以下面的getType总会返回
Object.prototype.getType = function(){ return typeof this; } var o = "I am a string"; o.getType(); //返回"object"
外覆对象包括
- Number
- Boolean
- String
同时外覆对象可以通过对象类型的new关键字声明。由于外覆对象是对象类型,所以任意两个都是不等的
var b1 = new Boolean(true); var b2 = new Boolean(true); b1 == b2; //返回false
编码中一定要意识到这点,否则极容易出错