parseInt() 发生了一些奇怪的事情

时间:2021-07-17 04:26:08

标签: javascript

所以,我有以下问题:

SELECT
  t.asset_id ID,
  MAX(t.asset_name) Name,
  GROUP_CONCAT(COALESCE(t.label,"" ) ORDER BY t.asset_id,t.label_id) label,
  GROUP_CONCAT(COALESCE(d.data,"") ORDER BY t.asset_id,t.label_id) data
FROM
(
  SELECT
    a.ID asset_id,
    a.Name asset_name,
    l.ID label_id,
    l.data label
  FROM
     AssetsTable a CROSS JOIN
     CustomFieldsLabelTable l
) t
LEFT JOIN CustomFieldsDataTable d
ON t.asset_id=d.asset_id AND t.label_id=d.input_id
GROUP BY t.asset_id

出于某种原因,它显示 let str = "M1" console.log(parseInt(str.charAt(0)) != NaN)) 。与 true 相同。
据我所知,1MNaN 类型。
不过,在这种情况下我需要 number。和 (parseInt(str.charAt(0)) != NaN) == falsetrue 的情况下。
感谢您的每一个回答。

PS* 1M 返回 parseInt(str)

5 个答案:

答案 0 :(得分:1)

NaN === NaN 是假的,所以你不能只将它们与 ===!==

进行比较

您可以改用 isNaN(parseInt(str.charAt(0))

答案 1 :(得分:1)

而不是试图证明否定并证明某事不是 NaN(记住 NaN istelf 意味着不是数字)并期待一个错误...太多双重否定

尝试简单的isNaN(str[0])

let str1 = "M1";
let str2 = "1M";

let result1 = isNaN(str1[0]);
let result2 = isNaN(str2[0]);

console.log(result1); // gives true - ie: str1[0] is not a number
console.log(result2); // gives false -ie: str2[0] a number

答案 2 :(得分:1)

您不能将 NaN== 运算符进行比较。在 if 中轻松检查:

let str = "M1"

if(!parseInt(str.charAt(0)))
    console.log("NaN")

答案 3 :(得分:1)

它按预期工作。 NaN 是全局属性,不是数字类型。

此处 parseInt('M1'.charAt(0)) != NaN 将被测试为 NaN !== NaN。由于 NaN 是一个全局对象,因此这两个 NaN 不是指向同一个对象而是两个不同的对象。所以它返回 true

在第二种情况 (parseInt('1M'.charAt(0)) !== NaN) 中,很明显 true1 !== NaN

注意:使用 === 而不是 ==

答案 4 :(得分:1)

因为:NaN 不等于 NaN

let str = "M1"
console.log(parseInt(str.charAt(0)) != NaN))

parseInt(str.charAt(0)) 是一个 NaN 值,它不等于另一个 NaN 值。
看看这个NaN - JavaScript | MDN