面试题解析之对象类型的判断

对象类型是引用类型的一种,表示一个存储了键值对的集合。在对对象类型进行判断之前,我来为大家回忆一下有哪些数据类型。

数据类型有哪些

在 JavaScript中,数据类型可以分为原始类型和引用类型。

原始类型:

  1. 字符串(String) :表示一串字符。
  2. 数字(Number) :表示数值。
  3. 布尔值(Boolean) :表示真或假。
  4. 空值(Null) :表示一个空值对象。
  5. 未定义(Undefined) :表示一个未定义的值。
  6. Symbol:表示唯一的标识符。

原始类型是不可改变的简单数据类型,它的值在赋值和传递时,是按值传递的,即复制了原始值本身。

ini 复制代码
var a = 18;
var b = a;
a = 10;
console.log(b); // 输出: 18

引用类型:是可以改变的复杂数据类型

  1. 对象(Object) :表示键值对的集合。
  2. 数组(Array) :表示有序的值的集合。
  3. 函数(Function) :表示可执行的代码块。

引用类型的值在赋值和传递时,是按引用传递的,即复制了引用(指向内存中的对象)。

ini 复制代码
var obj1 = { name: '张三' };
var obj2 = obj1;
obj1.name = '李四';
console.log(obj2.name); // 输出: 李四

需要注意的是,虽然原始类型的值是不可改变的,但是我们可以通过重新赋值来改变变量的值。而引用类型的值是可变的,所以改变对象的属性会影响到所有引用该对象的变量。

对象类型的判断

typeof

javascript 复制代码
console.log(typeof 42); // 输出: "number"
console.log(typeof "Hello"); // 输出: "string"
console.log(typeof true); // 输出: "boolean"
console.log(typeof undefined); // 输出: "undefined"
console.log(typeof null); // 输出: "object" (这是 typeof 操作符的一个特殊情况)
console.log(typeof {}); // 输出: "object"
console.log(typeof []); // 输出: "object" (数组也是一种对象)
console.log(typeof function(){}); // 输出: "function"

typeof 运算符虽然可以帮助我们判断一个值是否为对象类型,但无法准确区分对象、数组和 null。为了更精确地判断一个值是否为对象类型,我们可以使用其他方法。


instanceof

javascript 复制代码
var obj = {};
var arr = [];
var nullValue = null;

console.log(obj instanceof Object); // 输出: true
console.log(arr instanceof Array); // 输出: true
console.log(nullValue instanceof Object); // 输出: false

instanceof 操作符用于检测构造函数的 prototype 属性是否出现在对象的原型链中的任何位置。如果是,则返回 true;否则返回 false

需要注意的是,instanceof 操作符只能用来判断对象是否是某个构造函数创建的实例,而不能用来判断基本数据类型(如字符串、数字、布尔值等)的类型。


Object.prototype.toString.call(xx)

javascript 复制代码
var obj = {};
var arr = [];
var str = "Hello";
var num = 42;

console.log(Object.prototype.toString.call(obj)); // 输出: "[object Object]"
console.log(Object.prototype.toString.call(arr)); // 输出: "[object Array]"
console.log(Object.prototype.toString.call(str)); // 输出: "[object String]"
console.log(Object.prototype.toString.call(num)); // 输出: "[object Number]"

Object.prototype.toString 是 JavaScript 所有对象都具有的方法,它返回一个表示当前对象类型的字符串,格式为 "[object 类型]"。通过使用 call 方法,我们可以改变 this 的指向,从而让 toString 方法作用于传入的参数 xx

总结

  • 可以使用 typeof 操作符来判断基本数据类型和大部分对象类型,而使用 instanceof 操作符来判断对象是否是特定构造函数创建的实例。
  • 可以通过Object.prototype.toString.call(xx)获得类似 [objectType] 的字符串。
  • instanceof可以正确的判断对象的类型,因为它用于检测构造函数的 prototype 属性是否出现在对象的原型链中。
相关推荐
Angel_girl31920 分钟前
vue项目使用svg图标
前端·vue.js
難釋懷24 分钟前
vue 项目中常用的 2 个 Ajax 库
前端·vue.js·ajax
Qian Xiaoo26 分钟前
Ajax入门
前端·ajax·okhttp
爱生活的苏苏1 小时前
vue生成二维码图片+文字说明
前端·vue.js
拉不动的猪1 小时前
安卓和ios小程序开发中的兼容性问题举例
前端·javascript·面试
炫彩@之星1 小时前
Chrome书签的导出与导入:步骤图
前端·chrome
贩卖纯净水.1 小时前
浏览器兼容-polyfill-本地服务-优化
开发语言·前端·javascript
前端百草阁1 小时前
从npm库 Vue 组件到独立SDK:打包与 CDN 引入的最佳实践
前端·vue.js·npm
夏日米米茶1 小时前
Windows系统下npm报错node-gyp configure got “gyp ERR“解决方法
前端·windows·npm
且白2 小时前
vsCode使用本地低版本node启动配置文件
前端·vue.js·vscode·编辑器