判断

概述

Javascript常见的类型主要有值的比较和类型的比较。

用法:JavaScript判断一般使用===来进行判断,不推荐==,因为==的对比,存在类型的转换,由于涉及到变换比较复杂,不在这里展开,感兴趣的可以自行了解细节。

数据类型

JavaScript 中有七种基本的数据类型(前六种为基本数据类型,也称为原始类型,而 object为复杂数据类型,也称为引用类型)。

number:用于任何类型的数字:整数或浮点数,在 ±(253-1) 范围内的整数。
string:用于字符串:一个字符串可以包含0个或多个字符,所以没有单独的单字符类型。
boolean:用于 true 和 false。
null:用于未知的值 —— 只有一个 null 值的独立类型。
undefined:用于未定义的值 —— 只有一个 undefined 值的独立类型。
symbol:用于唯一的标识符。
object:用于更复杂的数据结构。

注意事项:原始类型存储的都是值,是没有函数可以调用的。

对象(object)类型

对象类型:除了原始类型以外的数据类型。

对象类型和原始类型不同的是,原始类型存储的是值,对象类型存储的是地址(指针)。

当你创建了一个对象类型并赋值给变量时,计算机会在内存中自动开辟空间来存放值,同时这个空间会拥有一个地址(指针),最终变量存放的是这片空间的地址。

类型判断

typeof

typeof对于原始类型来说,除了 null都可以显示正确的类型。

typeof 1 // 'number’ 
typeof '1' // 'string’ 
typeof undefined // 'undefined’ 
typeof true // 'boolean’ 
typeof Symbol() // 'symbol'

typeof对于对象来说,除了函数都会显示 object,所以说 typeof并不能准确判断变量到底是什么类型。

typeof [] // 'object'
typeof {} // 'object' 
typeof console.log // 'function'

instanceof

判断一个对象的正确类型,这时候可以考虑使用 instanceof,基于原型链来判断的对象的类型。

var Person = function() {} 
var p1 = new Person() 
p1 instanceof Person // true 

var str = 'hello world’ 
str instanceof String // false 
var str = new String('hello world’) 
str instanceof String // true

toString

toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]]。这是一个内部属性,其格式为[object xxx] ,其中 xxx 就是对象的类型。

对于 Object 对象,直接调用 toString() 就能返回 [object object] 。而对于其他对象,则需要通过call/ apply 来调用才能返回正确的类型信息。

Object.prototype.toString.call('');  // [object String]
Object.prototype.toString.call(1);   // [object Number]
Object.prototype.toString.call(true); // [object Boolean]
Object.prototype.toString.call(Symbol()); //[object Symbol]
Object.prototype.toString.call(undefined); // [object Undefined]
Object.prototype.toString.call(null); // [object Null]
Object.prototype.toString.call(new Function()); // [object Function]
Object.prototype.toString.call(new Date()); // [object Date]
Object.prototype.toString.call([]); // [object Array]
Object.prototype.toString.call(new RegExp()); // [object RegExp]
Object.prototype.toString.call(new Error()); // [object Error]