gpt4 book ai didi

javascript - JS - linter 可以捕获类型错误吗?

转载 作者:行者123 更新时间:2023-12-02 14:43:20 24 4
gpt4 key购买 nike

让许多 Java 爱好者对 JS 感到焦虑的似乎是它的“酷爸爸”性质;它不在乎你是否吸大麻或与 friend 一起闲逛到凌晨 2 点。如果没有这个结构,就不可能在“编译时”检查类型安全......是吗?

当然,javascript 有类型,但它不是强类型的。话虽这么说,阅读以下摘录的人会注意到这将引发运行时异常:

function f(anArray) {
"use strict";
anArray.push("hi");
}
f(5); //runtime exception for sure

作为程序员,我们可以看到这一点,因为即使没有显式声明类型(例如 int c;),我们也可以收集各种其他特征来推断其类型(它是一个数字)不带引号)。似乎有一种算法(例如决策树)可以轻松推断给定对象的类型。

本质是,在动态类型语言中,类型是存在的,但它们的使用和转换是隐式的。那么我的问题是:

linters 是否可以使用隐式约定来确定方法的预期类型,并在“lint 时间”警告潜在的运行时错误?

提前谢谢您。

最佳答案

诸如 linter 或类型检查器之类的代码检查器在分析代码以发现类型不兼容性方面只能“到此为止”。

例如考虑以下代码:

function f(a) {
return a%2 ? [a] : false;
}
x = [];
for (var i=1; i < 10; i+=2) {
x = f(i).concat(x);
}
document.write(x);

这不会是一个问题;但如果i从2而不是1开始,情况就会是这样。一般来说,传递给f的值可能是复杂算法的结果,代码检查器会必须实际运行代码才能知道结果。这当然不是这样一个工具的想法,因此在实践中只能找到类型不兼容的微不足道的情况。

关于javascript - JS - linter 可以捕获类型错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36828971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com