JS面试题1

1、let、var、const的区别

1.1、总结:

  1. var是旧的声明方式,作用域较宽松,容易引发变量冲突
  2. letconst提供了块级作用域,更加安全和明确。
  3. let用于需要修改的变量,const用于不应修改的常量

1.2、 细分

  1. var
    • 没有块级作用域的概念
    • 有全局作用域、函数作用域的概念
    • 没有初始化式时,值默认为:undefined
    • 存在变量提升
    • 全局作用域中,用var声明的变量会挂载到window对象下
    • 同一作用域中允许重复声明
  2. let
    • 有块级作用域的概念
    • 不存在变量提升
    • 有暂时性死区——声明变量前,不允许使用该变量
    • 不存在全局作用域的概念
    • 同一块作用域中不允许重复声明
  3. const
    • 与let特性一样,仅有2个差别:
    • 区别1:必须立即初始化,不能在后续赋值
    • 区别2:常量的值不能改变

2、什么是块级作用域

早期JS作用域有:全局/函数作用域,没有块作用域的概念,ES6中新增了块级作用域

  1. 块作用域由{ }包裹, 声明的变量只在该代码块内有效,if/for语句里的{ }也属于块作用域
  2. 没有块级作用域时,在if/for循环中声明的变量会泄露成全局变量,其次就是{ }中的内层变量可能会覆盖外层变量,块级作用域的出现解决了这些问题

3、JS中的数据类型

3.1、数据类型分类

  1. 基本(原始)数据类型7种:
    a. string
    b. number
    c. boolean
    d. undefined
    e. null
    f. symbol——ES6新加,表示唯一的、不可变的数据类型,通常用于对象属性的唯一标识符
    g. BigInt——任意大小的整数,它是ECMAScript 2020+新增的
  2. 引用数据类型1种:
    object——注意:Array、Function等,它们的类型的底层其实都是Object

3.2、基本数据类型和引用数据类型的区别

  1. 访问方式
    a. 原始值:访问到的是值
    b. 引用值:访问到的是引用地址
  2. 比较方式
    a. 原始值:比较的是值
    b. 引用值:比较的是地址
  3. 动态属性
    a. 原始值:无法添加动态属性
    b. 引用值:可以添加动态属性
  4. 变量赋值
    a. 原始值:赋值的是值
    b. 引用值:赋值的是地址

4、包装类型

解释:

  1. 普通类型之所以也能使用属性/方法,是因为这些类型在调用时,js内部自动生成了包装对象
  2. 如:4.1、中的第1条里调用的一样,结束后,再将这个临时的包装对象删除
  3. 注意:
    a. 如果给普通类型添加a.name : “小明”是无法成功的,因为name被添加到了临时的包装对象上,然后这个临时对象又被删除了,所以无法成功,
    b. 除非是直接挂在原型对象上的,那么才能使用这种方式添加属性

4.1、什么是包装类型(对象)

  1. 当基本类型以对象的方式去使用时,Js会转换成对应的包装类型
  2. 相当于:new了一个对象,值和基本类型设置的内容一样
  3. 操作完成后,这个临时的包装对象会被销毁,再访问时就是:undefined

4.2、哪些基本类型有对应的包装类型

  1. 回答:
    a. number数字类型
    b. string字符串类型
    c. boolean布尔值类型
  2. 示例:
// 解释:此时的a/b/c都是实例出的对象,所以也都可以使用对象身上的`方法`和`属性`
        let a = new String("你好")
        let b = new Number(99)
        let c = new Boolean(false)
  1. 意义:
    ○ 因为有了基本包装类型,所以Js中的基本类型值可以被当作对象来访问。

4.3、基本类型与包装对象的关系

  1. 每个包装类型都映射到同名的基本类型
  2. 在读取模式下访问基本类型值时,就会创建:对应的基本包装类型的一个对象,方便了数据操作
  3. 操作基本类型值的语句一经执行完毕,就会立即销毁新创建的包装对象

5、JS中如何进行数据类型转换

  1. 显式(强制)转换:
    a. 转换为字符串:String(value) 或 value.toString()
    b. 转换为数字:Number(value) 或 parseInt(value)/parseFloat(value)
    c. 转换为布尔值:Boolean(value)
  2. 隐式(自动)转换:
    a. 字符串拼接:value + ‘’
    b. 算术运算:value - 0, +value
    c. 逻辑运算:!!value (双重否定)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值