一、前言:
JavaScript中变量似乎很简单,因为它声明变量只需要一个“var”就可以,不像其他编程语言严格区分了数据类型(int/double/char/boolean...)。这样做也是有好处的,变量可以被赋予任何类型的值,同样也可以给这个变量重新赋予不同类型的值。并不是“一定终身”。
可是,JavaScript并没有避开数据类型,只是在声明时统一使用无类型(untyped)的“var”关键字而已,它的数据类型是根据所赋值的类型来确定的。
var x = 1; //number类型
var x = 0.1; //number类型,JS不区分整数值和浮点数值
var x = "hello world"; //由双引号内文本构成字符串
var x = 'javascript'; //单引号内文本同样可以构成字符串
var x = true; //true和false作为布尔值
var x = null;
var x = undefined; //null和undefined很相似,是特殊的类型
二、正文:
下面对不同的数据类型进行说明
数据类型分类 | 说明 | 详细分类 |
原始类型 |
比如:var a = 1, b = 1; a == b; //true |
数字(number) |
字符串(string) | ||
布尔值(boolean) | ||
null | ||
undefined | ||
对象类型 |
比如:var a = [], b = []; a == b; //false,只有在引用相同时,两个只才会相等 |
特殊对象--数组(array) |
特殊对象--函数(function) | ||
object类型 |
1.“==”和“===”,即相等和全等
类型 | 例子 | |
相等(“==”) | false == 0 | 使用相等(“==”)符号时,会自动转换符号两边的数据类型再进行比较,容易出错。 |
全等(“===”) | false === 0 | 使用全等符号时,不会自动转换数据类型,所有该符号也对数据类型进行了比较。 |
false == 0 //true false === 0 //false
2.null和undefined的区别
undefined表示系统级的、出乎意料的或类似错误的值的空缺;表示缺少值,此处应该有值,但没有定义。例如:var a; a就会显示undefined
null表示程序级的、正常的或在意料之中的值的空缺; 一般多使用null。
undefined
null
0
-0
NaN
"" //空字符串
以上这些值在布尔值转换中,会转换成false。但是这并不足以让你认为他们与false是相等的:
undefined == true //false
undefined == false //false
undefined == null //true
undefined === null //false
null == false //false
null == true //false
"" == false //true
"" == true //false
0 == false //true
0 == true //false
-0 == false //true
-0 == true //false
NaN == false //false
NaN == true //false
NaN == NaN //false NaN与任何值都不相等,包括它自身
3.Infinity和NaN
类型 | 相同点 | 例子 | 说明 |
Infinity | 都是Number类型 | 2/0 | 表示无限大,超过JS的number所能够表示的最大值。 |
NaN | 0/0 | 表示not a number,无法计算的结果。 |
//NaN是一个特殊的number,与其他所有值都不相等,包括它自身
NaN === NaN //false
//唯一识别NaN的方法
isNaN(NaN) //true
4.JS的typeof的用法,可以把数据类型当作字符串返回
1 | 2 | 3 | 4 | 5 | 6 | |
typeof的运算参数: | 数字 | 字符串 | 布尔值 | 对象、数组和null | 函数 | 运算数未定义 |
例子: | typeof(123) | typeof("123") | typeof(true) | typeof([]) | typeof(function(){}) | typeof(arr) |
返回值: | "number" | "string" | "boolean" | "object" | "function" | "undefined" |
//typeof的括号可以不用,直接在后面跟需要测试的内容
var a;
typeof a; //"undefined"
var cc = {a:123};
typeof cc; //"object"
typeof null; //"object"
说明:
- 用途:可以使用typeof来判断一个变量是否存在,如:if(typeof a != "undefined")
而不可使用:if(a),因为如果a不存在会报错(未声明),使用typeof则可以避免这个问题。 - 局限:对于array、null和对象,typeof一律返回object。对此可以通过instanceof来区分。
5.JS的instanceof,判断一个变量是否是某个对象的实例
var a = new Array();
a instanceof Array //true
a instanceof Object //true
// 判断 foo 是否是 Foo 类的实例 , 并且是否是其父类型的实例
function Aoo(){}
function Foo(){}
Foo.prototype = new Aoo();//JavaScript 原型继承
var foo = new Foo();
console.log(foo instanceof Foo)//true
console.log(foo instanceof Aoo)//true
- instanceof 运算符判断一个对象是否是另一个对象的实例。返回true或false
- instanceof 运算符用来检测 constructor.prototype 是否存在于参数 obj 的原型链上(或者说:检测obj的原型链上是否存在constructor.prototype )