当前位置: 首页 > article >正文

JavaScript 前端面试 3(等于、全等、instanceof、typeof 、原型、原型链)

五、==和===的区别,分别在什么时候使用?

==等于操作符,===全等操作符

1:等于操作符

如果操作数相等 == 返回true

JavaScript存在隐式转换,==会先进行类型转换,再确定操作数是否相等,如果有一个是bool值,就把它转换成数值在进行比较,字符串也是一样,如果一个操作数是对象,另一个操作数不是对象,使用valueof()获得其原始值再比较。

注:null和undefined相等,如果有一个操作数是NaN返回false

如果两个操作数都是对象但是比较的不是同一个对象,但是它们指向同一个对象,则结果仍然返回true

2.全等操作符

===要求再不转换的前提下相等才返回true,类型、值都要相同

undefined和null自身严格相等

六:typeof 和 instanceof的区别

1:typeof

typeof返回一个字符串,表示未经计算的操作数类型

使用方法:tpyeof(operand)//也可以不用括号

tpyeof(null)是object但是这是一个bug ,null不是对象也不是引用数据类型,如果要在if条件中判断null直接用===null就可以,引用类型的数据除了function会被识别其他都是object。如果想要判断一个变量是否存在不能使用if(a)如果没有声明会报错,可以使用:

2:instanceof

用于检测构造函数prototype属性是否出现在某个实例对象的原型链上

object  :实例对象
constructor:构造函数
构造函数new实例对象 instanceof判断对象是否是之前构造函数生成的对象

原理就是顺着原型链一直找,知道找到原型对象否则返回false

七:什么是原型、原型链?

1:原型

JavaScript常被描述为基于原型的语言

每一个对象都拥有一个原型对象

试图访问一个对象的属性的时候 不仅仅会访问该对象还会搜索该对象的原型

属性和方法都在构造器的protype属性上

举个例子:
函数可以有属性。每个函数都要一个特殊的属性protype(原型)

原型对象有一个自有属性constructor,这个属性指向该函数

2:原型链(prototype chain)

原型对象也可以有原型,这样一层层以此类推就形成了原型链

它解释了为什么一个对象会拥有定义在其他对象的属性和方法

对象实例在它的构造器之间建立了一个链接(_proto_属性,是从构造函数的prototype属性派生的)

原型链分析

  1. 构造函数 Person 存在原型对象 Person.prototype

    • 每个构造函数都有一个 prototype 属性,指向其原型对象。

  2. 构造函数生成实例对象 personperson__proto__ 指向构造函数 Person 原型对象

    • 当我们通过 new Person() 创建一个实例对象 person 时,person__proto__ 会指向 Person.prototype

  3. Person.prototype.__proto__ 指向内置对象,因为 Person.prototype 是个对象,默认是由 Object 函数作为类创建的,而 Object.prototype 为内置对象

    • Person.prototype 是一个对象,其 __proto__ 指向 Object.prototype,因为所有对象默认继承自 Object.prototype

  4. Person.__proto__ 指向内置匿名函数 anonymous,因为 Person 是个函数对象,默认由 Function 作为类创建

    • Person 是一个函数对象,其 __proto__ 指向 Function.prototype,即内置的匿名函数 anonymous

  5. Function.prototypeFunction.__proto__ 同时指向内置匿名函数 anonymous,这样原型链的终点就是 null

    • Function.prototypeFunction.__proto__ 都指向同一个内置匿名函数 anonymous,而 anonymous__proto__null,表示原型链的终点。

总结

  • 构造函数 Person 的原型对象 Person.prototype__proto__ 指向 Object.prototype

  • 实例对象 person__proto__ 指向 Person.prototype

  • 函数对象 Person__proto__ 指向 Function.prototype

  • Function.prototypeFunction.__proto__ 都指向内置匿名函数 anonymous,其 __proto__null,表示原型链的终点。

  1. 一切对象都是继承自 Object 对象,Object 对象直接继承根源对象 null

  2. 一切的函数对象(包括 Object 对象),都是继承自 Function 对象

  3. Object 对象直接继承自 Function 对象

  4. Function 对象的 __proto__ 会指向自己的原型对象,最终还是继承自 Object 对象


http://www.kler.cn/a/553757.html

相关文章:

  • 当一个后端下载了一个VUE开源项目,怎么开始着手玩一下
  • Spring中的日志
  • Linux的基础指令和环境部署,项目部署实战(下)
  • 【DeepSeek】Mac m1电脑部署DeepSeek
  • 校园网架构设计与部署实战
  • Linux学习笔记之进程切换
  • 微服务SpringCloudAlibaba组件Spring Cloud Gateway网关教程【详解gatway网关以及各种过滤器配置使用,附有示例+代码】
  • 一个简单的ubuntu/开发板初始化脚本
  • HTML/CSS中并集选择器
  • open-webui安装
  • 基于Java+MySQL实现的院的实验课选课及实验室管理系统
  • 鸿蒙NEXT开发-应用状态
  • IDEA CodeGPT 使用教程
  • docker知识
  • ESP32 在IDF_V5.3.1版本下实现AP无线热点模式!(带WIFI事件处理)
  • 深度学习之图像分类(一)
  • 超详细|25保研时间线及规划
  • npm安装依赖(npm install)时遇到认证错误的解决方案
  • Docker 在微服务架构中的应用(一)
  • ok113i平台——多媒体播放器适配