MST

星途 面试题库

面试题:JavaScript手动类型转换的复杂场景应用

给定一个数组 `var arr = ['1', '2', true, null, undefined, {name: 'John'}, function(){}];`,要求编写一个函数,将数组中的每个元素手动转换为数字类型(如果可以转换的话),并返回新的数组。需要处理各种可能的类型转换情况,并解释你在转换过程中遇到的问题及解决方案。
14.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
function convertToNumber(arr) {
    return arr.map((element) => {
        if (typeof element ==='string') {
            return parseFloat(element);
        } else if (typeof element === 'boolean') {
            return element? 1 : 0;
        } else if (element === null) {
            return null;
        } else if (element === undefined) {
            return undefined;
        } else if (typeof element === 'object') {
            return NaN;
        } else if (typeof element === 'function') {
            return NaN;
        }
        return NaN;
    });
}

var arr = ['1', '2', true, null, undefined, {name: 'John'}, function(){}];
console.log(convertToNumber(arr));

转换过程中遇到的问题及解决方案

  1. 字符串转换

    • 问题:字符串可能包含非数字字符。
    • 解决方案:使用 parseFloat 函数,它会尝试从字符串的开头解析数字,遇到非数字字符时停止。例如,parseFloat('123abc') 会返回 123
  2. 布尔值转换

    • 问题:布尔值本身不是数字类型,需要特定的转换规则。
    • 解决方案:将 true 转换为 1false 转换为 0
  3. nullundefined

    • 问题:它们无法直接转换为数字,并且在JavaScript中没有有意义的数字等价物。
    • 解决方案:保持 nullundefined 不变,不尝试转换。
  4. 对象和函数

    • 问题:对象和函数没有直接的数字表示。
    • 解决方案:返回 NaN 表示无法转换。NaN 代表“不是一个数字”(Not a Number),用于表示无效的数字值。