前端面试点-js数据类型

54 阅读2分钟

在这么卷的当下必须干起来,不仅要知道还要精通

Number、Boolean、Sting、undefined、null、Symbol、BigInt

js中的类型相关的面试考题

值类型和引用类型的区别是什么?

值=》是存在栈中,赋值是复制一份

引用类型=》引用变量存储在栈中的是指向堆中的数组或者对象的地址,修改引用类型总会影响到其他指向这个地址的引用变量。

js中的数据类型检测方法都有哪些?

基础数据类型typeof

  • typeof =》可以检测出基本数据类型,但是检测不出来引入类型

例如 数字、布尔值、字符串、undefined、

引用类型instanceOf

  • instanceOf 只能检测引用类型
  • 只安全的检测 Object.prototype.toString.call()返回对象的原始类型

数组Array.isArray()

isNaN 判断NaN

最安全检测Object.prototype.toString.call()

console.log(Object.prototype.toString.call("abc")); // 输出 "[object String]"  
console.log(Object.prototype.toString.call(123)); // 输出 "[object Number]"  
console.log(Object.prototype.toString.call([])); // 输出 "[object Array]"  
console.log(Object.prototype.toString.call({})); // 输出 "[object Object]"

null和undefined的区别是什么?

null=》是一个原型数据类型,表示定位一个变量给值是null

undefined是一个对象类型,表示定义了一个变量但是未赋值 这2个是不相等的

typeof null的结果是什么?为什么?object 这个是历史遗留问题,null是一个原始值

类型转换的问题

何时使用===,何时使用==

一般除了null之外都尽量使用===

而为什么null使用==呢?

例如,当比较 null 和空字符串 '' 时,使用 == 运算符可以正确地判断它们是否相等,因为它们都是表示“没有值”或“不存在”的特殊值。但是,如果使用 === 运算符进行比较,结果将是 false,因为 null 和空字符串是不同的类型。

此外,在 JavaScript 中,null 是一个特殊的值,表示一个空对象或没有对象。它与其他类型的 null 对象不同,例如字符串 'null' 或数字 0。因此,当需要判断一个变量是否为 null 时,使用 == null 是最准确的方法,因为它只比较变量的值是否为 null,而不会考虑它的类型。

手写题

就是instanceof

function myInstanceof(left ,right){
  let leftPro=Object.getPrototypeOf(left)
  let rightPro=right.prototype
  while(true){
    if(!leftPro) return false
    if(leftPro===rightPro) return true
    leftPro=Object.getPrototypeOf(leftPro)
  }
}

封装一个检测类型函数

function prototypeCallFn(s){
    let len=Object.prototype.toString.call(s).length
    console.log(a.length)
  return Object.prototype.toString.call(s).slice(8,len-1).toLowerCase()
}