likes
comments
collection
share

有关类型的面试题基础(1)

作者站长头像
站长
· 阅读数 24

前言

准备面试时,深入理解并熟练掌握各种类型系统的特性与应用,对于提升面试表现、展现个人技术实力具有重要意义。下面,我们就将深入探讨一系列与类型相关的面试题基础小点,帮助你更好地准备并脱颖而出。

一,原始类型

在JS中,原始类型(或称为基本数据类型)共有7种,它们分别是:string(字符串)、number(数字)、boolean(布尔)、null(空值)、undefined(未定义)、bigint(大整数,如1234321n)以及symbol(符号)。这些类型是不可变的,并且它们的值在赋值后无法更改。

考点:浮点数

浮点数是number类型的一种表现形式,JS在处理浮点数时存在精度丢失的问题。

因为JS会将浮点数转化为二进制数来进行计算和存储。但是,并非所有的十进制小数都可以精确地转换为有限位的二进制小数,这就导致了精度丢失的问题。

例如,0.1在二进制中是一个无限循环小数,但在计算机中我们只能存储其近似值,这就会导致在进行浮点数运算时产生误差。

那么在js中我们该如何计算0.1+0.2呢?

我们可以利用toFixed()去精确计算,传入你希望精确的小数点数

let result = (0.1 + 0.2).toFixed(4); 
// 注意:toFixed() 返回的是一个字符串,不是数字

console.log(result);//0.3000

二,复杂(引用)类型

考点:作用域,js执行机制

function test(person) {
    person.age = 26
    person = {
        name: 'Tom',
        age: 30
    }
    return person
}
const p1 = {
    name: 'John',
    age: 25
}
const p2 = test(p1)
console.log(p1);

有关类型的面试题基础(1)

再看一题

function foo(x, y) {
    x = {
        n: 1
    }
    y.n = 2
}
const obj = {
    n: 1,
    bar: {
        n: 1
    }
}
foo(obj, obj.bar);
console.log(obj);

有关类型的面试题基础(1)

三,类型判断

1.typeof 运算符

typeof 是一个一元运算符,用于返回操作数的类型字符串。它能有效地识别JS中的原始类型(如 numberstringbooleanundefined 和 symbol)。然而,当用于 null 时,��返回 "object",这与其他对象类型的处理方式不同。这是因为JS在内部使用特定的二进制位来标识对象类型,而 null 被特殊处理为 "object"。此外,typeof 无法直接识别复杂对象(如数组或函数)的确切类型,因为它们都被视为 "object"

考点:为什么判断不了null

在JS中,typeof运算符在判断类型时由于内部二进制表示的相似性,将null错误地识别为"object"类型,而实际上null是一个特殊的原始值。为了更准确地检测类型,开发者通常使用Object.prototype.toString.call()方法。

2.instanceof 运算符

instanceof 用于检测对象的原型链中是否包含特定构造函数的 prototype 属性。它主要用于判断引用类型(如数组、对象、函数等)。当处理跨窗口或跨框架的对象时,instanceof 可能会遇到问题,因为不同的环境可能有不同的全局对象,从而导致原型链不一致。

考点:手搓instanceof实现原理

function instance(l, r) {
    l = l.__proto__

    while (l) {
        if (l === r.prototype) {
            return true;
        }
        l = l.__proto__;
    }
    return false
}

console.log(instance([], Array));//ture

3.Object.prototype.toString.call() 方法

null,undefind没有原型,这里主要的考点正在以下3篇文章已有详细陈述

考点:原型

考点:this指向

转载自:https://juejin.cn/post/7388825326988230694
评论
请登录