【面试题解】JavaScript数据类型相关的六个面试题

10,454 阅读4分钟

本系列面试题旨在学会相关知识点,从而轻松应对面试题的各种形式,本文讲解了 JavaScript 中的一些常见面试题。

感觉有帮助的小伙伴请点赞👍鼓励一下 ~

  • JavaScript 属于什么类型的语言?
  • JavaScript 有多少种数据类型?
  • 什么是值类型和引用类型?分别有哪些?
  • 什么是虚值和真值?分别有哪些?
  • &&|| 运算符能做什么?

JavaScript属于什么类型的语言?

  • 使用之前就需要确认其变量类型的称为 静态语言
  • 在运行过程中需要检查数据类型的语言称为 动态语言
  • 支持隐式类型转换的语言称为 弱类型语言,反之为 强类型语言
  • JavaScript 属于 动态语言弱类型语言

JavaScript有多少种数据类型?

八种,分别为 :

  • Number
  • String
  • Boolean
  • undefined
  • null
  • Object
  • Bigint
  • Symbol

我们经常使用的的类型如:arrayfunction 都属于复杂数据类型 Object

什么是值类型和引用类型?

存储位置

值类型的变量会保存在 栈内存 中,如果在一个函数中声明一个值类型的变量,那么这个变量当函数执行结束之后会 自动销毁

引用类型的变量名会保存在 栈内存 中,但是变量值会存储在 堆内存 中,引用类型的变量不会自动销毁,当没有引用变量引用它时,系统的 垃圾回收机制 会回收它。

赋值方式

值类型的变量直接赋值就是深赋值,修改 b 的值不会影响 a

function foo() {
    let a = 1
    let b = a
    a = 2
    console.log(a); //=>  2
    console.log(b); //=>  1
  }
foo()

引用类型的变量直接赋值实际上是传递引用,只是浅赋值,修改值会影响所有引用该地址的变量。

function foo() {
  let c = {
    name: 'warlber'
  }
  let d = c
  d.name = '一尾流莺'
  console.log(c.name); //=>  一尾流莺
  console.log(d.name); //=>  一尾流莺
}
foo()

添加属性和方法

值类型无法添加属性和方法。

function foo() {
  let a = 1
  a.name = 'warbler'
  console.log(a.name); //=>  undefined
}
foo()

引用类型可以添加属性和方法。

function foo() {
  let a = {}
  a.name = '一尾流莺'
  console.log(a.name); //=>  一尾流莺
}
foo()

值类型和引用类型分别有哪些?

基本的值类型有:  undefinedBooleanNumberStringSymbol

引用类型有:  Object

特殊的引用类型:null,指针指向空地址。

特殊的引用类型:function,不用于储存数据,所以没有复制,拷贝函数一说。

什么是虚值和真值?分别有哪些?

简单的来说 虚值 就是 在转换为布尔值时 变为 false 的值,变为 true 的值则为 真值

如何检查值是否虚值?使用 Boolean 函数或者 !! 运算符。

虚值(Falsy)

  • 长度为 0 的字符串
  • 数字 0
  • false
  • undefined
  • null
  • NaN

真值(Truthy)

  • 空数组
  • 空对象
  • 其他

&& 和 || 运算符能做什么?

&& 也可以叫 逻辑与, 它采用短路来防止不必要的工作。

  • 在其操作数中找到第一个虚值表达式并返回它,如果没有找到任何虚值表达式,则返回最后一个真值表达式。
  • 所有操作数的条件都为 true 时,结果才为 true
  • 如果有一个为 false,结果就为 false
  • 当第一个条件为 false 时,就不再判断后面的条件。
console.log(false && 1 && []); // false
console.log(" " && true && 5); // 5

使用if语句

if(value){
 console.log(value)
}

使用&&操作符

value && console.log(value)

|| 也叫或逻辑或,这也使用了短路来防止不必要的工作。

  • 在其操作数中找到第一个真值表达式并返回它;
  • 只要有一个条件为 true 时,结果就为 true
  • 当两个条件都为 false 时,结果才为 false
  • 当一个条件为 true 时,后面的条件不再判断;
  • 在支持 ES6 默认函数参数之前,它用于初始化函数中的默认参数值。
console.log(null || 1 || undefined); // 1
function logName(name) {
  var n = name || "Mark";
  console.log(n);
}
logName(); // "Mark"
logName('hzw'); // "hzw"

逻辑与的优先级是高于逻辑或的

比如 console.log(3||2&&5||0),会先算 2 && 5 的值为 5,然后再 3||5----3,最后再 3||0----3,所以最终结果为 3

表达式a && 表达式b  

计算表达式 a(也可以是函数)的运算结果,如果为 True, 执行表达式 b(或函数),并返回 b 的结果; 如果为 False,返回 a 的结果。

表达式a || 表达式b   

计算表达式 a(也可以是函数)的运算结果,如果为 Fasle, 执行表达式 b(或函数),并返回 b 的结果;如果为 True,返回 a 的结果。