所以,我有以下问题:
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
相同。
据我所知,1M
是 NaN
类型。
不过,在这种情况下我需要 number
。和 (parseInt(str.charAt(0)) != NaN) == false
在 true
的情况下。
感谢您的每一个回答。
PS* 1M
返回 parseInt(str)
答案 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)
中,很明显 true
为 1 !== NaN
。
注意:使用 ===
而不是 ==
答案 4 :(得分:1)
因为:NaN
不等于 NaN
let str = "M1"
console.log(parseInt(str.charAt(0)) != NaN))
parseInt(str.charAt(0))
是一个 NaN
值,它不等于另一个 NaN
值。
看看这个NaN - JavaScript | MDN