javaScript基础知识之数据类型

97 阅读2分钟

数据类型

  1. 基本类型
    • number
    • string
    • boolean
    • null
    • undefined
    • Stymbol 唯一值 (ES6新增)
  2. 引用类型
    • Object
    • function
 对象的属性的属性名不能是引用类型,如果是引用类型类型,默认会转换成字符串
例1 属性名为boolean类型
const obj={};
const val = true;
obj[val] = 'test';
console.log(obj)  // {true :  test}2  属性名为对象类型
let a = {
    x: 100
};
let b = {
    y: 200
};
let obj1 = {};
obj1[a] = 'test1';
//=>obj["[object Object]"]="test1";
obj[b] = "test2";
//=>obj["[object Object]"]="test2";
console.log(obj[a] === obj[b]);  //=>true

检测数据类型

  1. typeof 用法:typeof [value] 返回当前值[value]的数据类型,且返回值为字符串string 优势:适用于基本类型 缺点:无法区分基本类型中的null和引用类型中的数组、对象、正则等,返回的都是"object"

  2. instanceof 用法:[value] instanceof [类] 通过检测这个值是否属于这个类, 从而验证是否为这个类型 优势:对于数组、正则、对象可以细分一下 缺点: 基本数据类型无法基于它来进行检测 检测的原理:只要在当前实例的__proto__出现这个类,检测结果就是true 如:Array.prototype = Object.prototype

  3. constructor 和instanceof类似,也是非专业检测数据类型的,但是可以这样处理一下 语法:[val].constructor === 类 相对于instanceof来讲基本数据类型也可以处理,而且因为获取实例的constructor实际上获取 的是之间所属的类,所以在检测准确性上比instanceof还好一些 缺点:constructor是可以随意被改动的

  4. Object.prototype.toString.call([val]) 在其它数据类型的内置类原型上有toString,但是都是用来转换为字符串的,只有Object基类 原型上的toString是用来检测数据类型的 obj.toString() obj这个实例调用Object.prototype.toString执行,方法执行里面的this 是当前操作的实例obj,此方法就是检测实例this的数据类型的,返回结果:"[Object 所属类]" Object.prototype.toString.call([val]) 基于call强制改变方法中this是[val],就相 当于在检测val的数据类型 <=> ({}).toString.call([val]) 最强大的检测方案