JavaScript有三种方法,可以确定一个值到底是什么类型。
typeof运算符
instanceof运算符
Object.prototype.toString方法
1、typeof运算符
谈到判断数据类型,首先应该回忆到JS的两种数据类型:原始类型、引用类型。那么ECMAScript 提供了 typeof 运算符判断一个值是否表示一种原始类型:*如果它是原始类型,还可以判断它表示哪种原始类型。
对变量或值调用 typeof 运算符将返回下列值之一:
typeof undefined
"undefined"
typeof null
"object"
typeof 1
"number"
typeof '1'
"string"
typeof {}
"object"
typeof [1,2,3]
"object"
typeof (function(){})
"function"
2、instanceof运算符
3、Object.prototype.toString方法
null与undefined的区别?
null == undefined
null !== undefined
null的类型是object,这是由于历史原因造成的。1995年JavaScript语言的第一版,所有值都设计成32位,其中最低的3位用来表述数据类型,object对应的值是000。当时,只设计了五种数据类型(对象、整数、浮点数、字符串和布尔值),完全没考虑null,只把它当作object的一种特殊值,32位全部为0。这是typeof null返回object的根本原因。
为了兼容以前的代码,后来就没法修改了。这并不是说null就属于对象,本质上null是一个类似于undefined的特殊值。
那么他们的区别是?
null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。
null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:
表达式:123 + null 结果值:123undefined出现的场景:
变量声明了,但没有赋值 var i; i // undefined
调用函数时,应该提供的参数没有提供,该参数等于undefined function f(x) { return x; } f()
// undefined对象没有赋值的属性 var o = new Object(); o.p // undefined
函数没有返回值时,默认返回undefined function f() {} f() // undefined