簡體   English   中英

為什么 typeof === 'number' 與 !isNaN(number) 不同

[英]Why is typeof === 'number' not the same as !isNaN(number)

我有以下代碼來解決這個問題: https://leetcode.com/problems/letter-case-permutation 對於字符串"a1b2" ,最終結果應該是["a1b2","a1B2","A1b2","A1B2"]

function letterCasePermutation(str) {
    const res = [];
    helper(str, res, 0, "");
    return res;
}

function helper(str, res, i, slate) {
    const char = str[i];
    const parsed = parseInt(char, 10);
    //base case
    if(i >= str.length) {
        res.push(slate);
        return;
    }

    // if(!isNaN(parsed)){
    if(typeof parsed === 'number') {
        slate = slate += char;
        helper(str, res, i+1, slate)
    }
    // check for letter
    else if(char.toLowerCase() !== char.toUpperCase()) {
        slate = slate += char.toUpperCase();
        helper(str, res, i+1, slate);

        slate = slate += char.toLowerCase();
        helper(str, res, i+1, slate);
    }
}

letterCasePermutation("a1b2"); //[ 'a1b2' ]

上面的代碼不起作用,因為當我這樣做時:

console.log(typeof parsed === 'number') // false

結果總是假的,即使它是一個數字(1 和 2)。 但是,當我更改此行時:

if(typeof parsed === 'number') {

至:

if(!isNaN(parsed)){

它完美地工作。 這是為什么?

原因是因為NaN是一個數字 這是 javascript 的那些奇怪的陷阱之一,它時不時地咬我們所有人的屁股。 處理這個問題的正確方法是像上面那樣使用.isNaN(...)

閱讀更多: https://claritydev.net/blog/what-is-the-type-of-nan/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM