题解 | #检测复杂数据类型#

检测复杂数据类型

https://www.nowcoder.com/practice/adb772f07443470483d7ca0a8f939e38

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <style>
       /* 填写样式 */
    </style>
</head>

<body>
    <!-- 填写标签 -->
    <script type="text/javascript">
        // 填写JavaScript
        function _instanceof(left,right) {
            return left instanceof right 
   
}
    </script>
</body>

</html>

instanceof 是 JavaScript 中的一个二元运算符,用于检查一个对象是否是某个构造函数的实例。它主要用于确定对象的类型和继承关系。

基本语法

javascript深色版本1object instanceof constructor
  • object 是你要检查的对象。
  • constructor 是你想要验证的对象的构造函数。

工作原理

instanceof 运算符的工作原理如下:

  1. 原型链检查instanceof 检查对象的原型链 (__proto__) 是否包含构造函数的原型 (prototype)。
  2. 原型指向:每个构造函数都有一个 prototype 属性,该属性指向一个对象,该对象描述了由该构造函数创建的所有实例所共享的属性和方法。
  3. 原型链遍历instanceof 会沿着对象的原型链向上查找,直到找到与构造函数原型相匹配的原型,或者到达原型链的顶端(即 null)。

示例

假设我们有两个构造函数 PersonStudent,其中 Student 继承自 Person

javascript深色版本1function Person(name) {
2  this.name = name;
3}
4
5function Student(name, grade) {
6  Person.call(this, name);
7  this.grade = grade;
8}
9
10// 设置继承关系
11Student.prototype = Object.create(Person.prototype);
12Student.prototype.constructor = Student;
13
14const john = new Person('John');
15const alice = new Student('Alice', 12);
16
17console.log(john instanceof Person); // true
18console.log(alice instanceof Student); // true
19console.log(alice instanceof Person); // true
20console.log(john instanceof Student); // false

特殊情况

  1. 原型属性未设置:如果构造函数没有显式设置 prototype 属性,那么它的 prototype 默认为 Object.prototype
  2. 原型属性丢失:如果构造函数的 prototype 被设置为 null,那么 instanceof 将始终返回 false
  3. 跨域对象:如果对象是在一个不同的执行上下文中创建的(例如来自另一个窗口或框架),那么 instanceof 可能会返回错误的结果,因为原型链不在同一个环境中。

使用场景

  • 类型检查:用于确定一个对象是否是特定构造函数的实例。
  • 继承检查:用于确认一个对象是否继承自另一个构造函数。

注意事项

  • instanceof 不适用于原始类型(如 numberstring 和 boolean)。对于原始类型的包装器对象,instanceof 仍然有效。
  • instanceof 可以用来检测数组和函数,因为它们也是对象。

示例代码

javascript深色版本1const num = 42;
2console.log(num instanceof Number); // false,因为 42 是原始类型的 number
3
4const numObj = new Number(42);
5console.log(numObj instanceof Number); // true
全部评论

相关推荐

昨天 13:08
蚌埠坦克学院 C++
服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务