有关类型的面试题基础(1)
前言
准备面试时,深入理解并熟练掌握各种类型系统的特性与应用,对于提升面试表现、展现个人技术实力具有重要意义。下面,我们就将深入探讨一系列与类型相关的面试题基础小点,帮助你更好地准备并脱颖而出。
类
一,原始类型
在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);
再看一题
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.typeof 运算符
typeof
是一个一元运算符,用于返回操作数的类型字符串。它能有效地识别JS中的原始类型(如 number
、string
、boolean
、undefined
和 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