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