分析
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241129/aa4ed6419efaaf1a87d662bd4a2b35af.png)
这里的"val"是一个可选参数,所以"val"可能为"undefined"。
这其实是"ts"的静态类型检查跟"js"中比较操作符的类型转换比较不同导致。
在"js"中"val > 12",在"val"是"undefined"时,会将"undefined"转换为数字类型"NaN",而"NaN > 12"的结果是"false"(因为"NaN"不和任何值相等)。
在"ts"编译时会进行严格的类型检查,包括对可能为"undefined"的值的处理。"ts"的静态类型检查器不允许在可能为"undefined"的变量上执行不安全的比较操作。
举例
"ts"这样设计其实也是有道理的,例如:
function isGreaterThanThreshold(value, threshold) {
return value > threshold;
}
const value = undefined; // 或者没有设置值
const threshold = 10;
const result = isGreaterThanThreshold(value, threshold);
if (result) {
console.log("value > threshold");
} else {
console.log("value {
if (val == 2 || val > 12) {
}
};
这样val就是一个可选的参数了