发布于 2024 年 2 月 26 日,星期一
该标题聚焦于前端面试中JavaScript相关的问题,旨在帮助读者准备面试。其本质是通过解析和讨论JavaScript的核心概念、常见问题及解决方案,提升面试者的技术深度和应试能力。内容可能涵盖JavaScript的基础语法、高级特性、常见陷阱及最佳实践,帮助读者理解语言的内在逻辑和实际应用。通过这种方式,读者不仅能应对面试中的技术挑战,还能在实际开发中更加熟练地运用JavaScript。
系列首发于公众号『非同质前端札记』https://mp.weixin.qq.com/s?__biz=MzkyOTI2MzE0MQ==&mid=2247485576&idx=1&sn=5ddfe93f427f05f5d126dead859d0dc8&chksm=c20d73c2f57afad4bbea380dfa1bcc15367a4cc06bf5dd0603100e8bd7bb317009fa65442cdb&token=1071012447&lang=zh_CN#rd ,若不想错过更多精彩内容,请“星标”一下,敬请关注公众号最新消息。
Undefined, Null, Boolean, Number, String, Object, Symbol, BigInt
Symbol, BigInt
是 ES6 中新增的数据类型:
Symbol
: 代表唯一的数据类型,主要为了解决全局变量冲突的问题BigInt
: 数字类型,此格式可表示任意精度格式的整数,可超时 Number
类型标的整数范围。原始数据类型
和 引用数据类型
Undefined、Null、Boolean、Number、String
Object、Array、Function
存储位置不同
typeof(), instanceof(), constructor(), Object.prototype.toString.call()
Array, Function, Null
都可以正确判断数据类型constructor
对象来访问它的构造函数。注意:如果是创建一个新对象来改变它的原型,constructor
就不能用来判断其数据类型了。let n1 = 0.1,
n2 = 0.2;
console.log(n1 + n2); // 0.30000000000000004
(n1 + n2).toFixed(2); // 注意,toFixed为四舍五入
0.30000000000000004
。Number.EPSILON
属性,而它的值就是 2-52,只要判断0.1+0.2-0.3
是否小于Number.EPSILON
,如果小于,就可以判断为 0.1+0.2 ===0.3function numberOperation(arg1, arg2) {
return Math.abs(arg1 - arg2) < Number.EPSILON;
}
console.log(numberOperation(0.1 + 0.2, 0.3)); // true
TypeError: FunctionName is not a constructor
, 表示当前函数不是一个构造函数,不能通过 new 关键字来创建实例。arguments
是一个对象,他的属性是从 0 开始依次递增的数字,还有 callee: 通过它可以调用函数自身
和 length
等属性,与数组类似,但是没有数组常见的一些方法,例如 forEach, reduce
, 所以叫他们类数组。Array.prototype.forEach.call(arguments, (a) => console.log(a));
Array.prototype.forEach.apply(arrayLike, [
(item, index) => {
console.log(item);
},
]);
Array.prototype.forEach.bind(arrayLike)((item, index) => {
console.log(item);
});
2.使用 Array.from() 方法将类数组转为数组
const arrArgs = Array.from(arguments);
arrArgs.forEach((item) => console.log(item));
3.使用 Array API
Array.apply(null, arrayLike);
Array.prototype.concat.apply([], arrayLike);
Array.prototype.slice.call(arrayLike);
Array.prototype.map.call(arrayLike, (x) => x);
Array.prototype.filter.call(arrayLike, (x) => 1);
Q:(question)
R:(result)
A:(attention matters)
D:(detail info)
S:(summary)
Ana:(analysis)
T:(tips)