前言:JavaScript的数据类型是我们必须要掌握的,几乎所有的JavaScript程序都会涉及某种形式的强制类型转换,处理这些情况时我们需要有充分的把握和自信。稍不留神,就会出现意想不到的结果。现在让我们深入了解一下
js的数据类型分为两种:
基本数据类型
复杂数据类型(引用数据类型)
object
包括数组(array),函数(function)
typeof
console.log(typeof undefined === "undefined"); // true
console.log(typeof true === "boolean"); // true
console.log(typeof 42 === "number"); // true
console.log(typeof "42" === "string"); // true
console.log(typeof { life: 42 } === "object"); // true
//es6新增
console.log(typeof Symbol() === "symbol"); // true
// null正确的返回结果应该是null,但这个bug由来已久
console.log(typeof null === "object"); // true
// 可以这样来检测null
let a = null
console.log(!a && typeof a === "object");
注意:正则、{}、[]、null输出结果为object
2.instanceof
instanceof 可以正确判断对象的类型,其内部运行机制是判断其原型链上是否可以找到该类型的原型
console.log(2 instanceof Number); //false
console.log(true instanceof Boolean); //false
console.log("str" instanceof String); //false
console.log([] instanceof Array); //true
console.log(function () {} instanceof Function); //true
console.log({} instanceof Object); //true
注意:instanceof只能正确判断引用数据类型,而不能判断基本数据类型
3.constructor构造函数
constructor有两个作用,一是判断数据类型,二是对象实例通过constructor对象来访问他的构造函数
console.log((2) .constructor === Number); // true
console.log((true).constructor === Boolean); // true
console.log(('str').constructor === String); // true
console.log(([]).constructor === Array); // true
console.log((function() {}) .constructor === Function); // true
console.log({}.constructor === Object); // true
function Fn(){};
Fn.prototype = new Array();
var f = new Fn();
console.log(f.constructor===Fn);// falseconsole.log(f.constructor===Array); // true
缺点:constructor并不可靠,容易被修改(只有参考价值)
function getType(obj){
let type = typrof obj
if(type !== "object") {
return type
}
return Object.protoType.toString.call(obj).replace(/^\[object(\S+)\]$/,"$1")
}
小结:javaScript有 七 种 内置 类
型:null、undefined、boolean、number、string、object和symbol,可以使用typeof运算符来查看。但是对于复杂数据类型和null不能判断,要使用instanceof来判断复杂数据类型,constructor也可以判断,但是不可靠,可以被修改。