常见前端基础面试题(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

相关推荐
OEC小胖胖3 分钟前
js中正则表达式中【exec】用法深度解读
开发语言·前端·javascript·正则表达式·web
有一个好名字15 分钟前
vue3路由
前端·vue.js
马卫斌 前端工程师31 分钟前
npm 源切换以及添加 使用工具 nrm 使用方法
前端·npm·node.js
小彭努力中36 分钟前
49. 建模软件绘制3D场景(Blender)
前端·3d·blender·webgl
任风雨1 小时前
JWT的基础与使用
前端·网络·安全
汪子熙2 小时前
CSS Style position: absolute 的含义
前端·css
算法与编程之美2 小时前
通过两个类计算一个长方形的周长和面积
java·开发语言·javascript·jvm·servlet
晴天蜗牛不一般2 小时前
隆重的给大家介绍一下 <BaseEcharts/>
前端·npm·echarts
ceek@2 小时前
HTML增加复制模块(使用户快速复制内容到剪贴板)
前端·javascript·html
小于负无穷2 小时前
前端面试题(十)
前端