JS基础之数据类型及类型检测

JS基础之数据类型及类型检测

前言:JavaScript的数据类型是我们必须要掌握的,几乎所有的JavaScript程序都会涉及某种形式的强制类型转换,处理这些情况时我们需要有充分的把握和自信。稍不留神,就会出现意想不到的结果。现在让我们深入了解一下

文章目录

  • JS基础之数据类型及类型检测
    • 内置类型
    • 类型检测
    • 通用js类型检测实现:

内置类型

js的数据类型分为两种:

  1. ​ 基本数据类型

    1. 空值(null)
    2. 未定义(undefined)
    3. 字符串(string)
    4. 数字(number)
    5. 布尔值(boolean)
    6. 符号(symbol,es6新增)
    7. Bigint
  2. ​ 复杂数据类型(引用数据类型)

    1. object

      包括数组(array),函数(function)

类型检测

  1. 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并不可靠,容易被修改(只有参考价值)

通用js类型检测实现:

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也可以判断,但是不可靠,可以被修改。

你可能感兴趣的:(基础,javascript,前端)