常见前端基础面试题(HTML,CSS,JS)(三)

JS 中如何进行数据类型的转换?

类型转换可以分为两种,隐性转换 和显性转换

显性转换

主要分为三大类:数值类型、字符串类型、布尔类型

三大类的原始类型值的转换规则我就不一一列举了

数值类型(引用类型转换)

复制代码
Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5

第一步,调用对象自身的`valueOf`方法。如果返回原始类型的值,则直接对该值使用`Number`函数,不再进行后续步骤。

第二步,如果`valueOf`方法返回的还是对象,则改为调用对象自身的`toString`方法。如果`toString`方法返回原始类型的值,
则对该值使用`Number`函数,不再进行后续步骤。

第三步,如果`toString`方法返回的是对象,就报错。

补充一点:`valueOf`和`toString`方法,都是可以自定义的
复制代码

字符串类型(引用类型转换)

复制代码
String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"

`String`方法背后的转换规则,与`Number`方法基本相同,只是互换了`valueOf`方法和`toString`方法的执行顺序。
复制代码

隐性转换

类型 转换前 转换后
number 4 4
string "1" 1
string "" 0
boolean true 1
boolean false 0
undefined undefined NaN
null null 0

闭包

闭包是指有权访问另一个函数作用域中的变量的函数 ------------ 《JavaScript高级程序设计》

  • 闭包用途:

    1. 能够访问函数定义时所在的词法作用域(阻止其被回收)
    2. 私有变量化
    3. 模拟块级作用域
    4. 创建模块
  • 闭包缺点:闭包调用函数的变量,并且这个变量在函数执行完之后,不能释放,会导致函数的变量一直保存在内存中,过多的闭包可能会导致内存泄漏。

  • 解决:变量设置成null

原型和原型链

原型

  1. 每个对象都有一个 proto 属性,该属性指向自己的原型对象
  2. 每个构造函数都有一个 prototype 属性,该属性指向实例对象的原型对象
  3. 原型对象里的 constructor 指向构造函数本身

原型链

当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾null

相关推荐
hiahiahia12316 分钟前
实现完整 Tool Dispatcher
开发语言·前端
IT_陈寒35 分钟前
Java线程池这破玩意,差点让我周末加班排查到凌晨
前端·人工智能·后端
Mr_Mao1 小时前
告别选型困难!集 VueUse、ahooks、Mantine 于一身:286 个 Hook 的 ReaUse 来了
前端·javascript·react.js
泡海椒2 小时前
趋势分析报表:jquick-pdf折线图PDF生成实战
java·大数据·运维·服务器·前端·pdf
默_笙2 小时前
🚙 一条腿走路会摔:ES 关键词检索、混合召回与 ReRank 裁判
前端·javascript
YIAN2 小时前
从跨域代理到 WebSocket:梳理前端实时通信的底层逻辑与完整实践
前端·websocket
一曲终散2 小时前
创建 SVG 图标预览页面:从零实现到解决 CORS 问题
前端
静默回滚3 小时前
iPhone照片电脑上打不开:HEIC解码从原理到WASM
前端
dsyyyyy11013 小时前
Vue 3 Watch 监视完全指南
前端·javascript·vue.js
航飞光电市场经理3 小时前
人员定位系统“全栈自研”技术解析:从射频前端到定位引擎的架构拆解
前端·架构