javascript - 为什么flow在使用instanceof时会给出uncovered code warning?

标签 javascript string flowtype

Flow 在第二个 if 语句中为 str 给出未覆盖代码警告。

[flow coverage] uncovered code
(parameter) str: never
[Flow]
str: empty

const isStr = (str: string): boolean=> {
  if(typeof str === 'string')
    return true;
  if(str instanceof String)
    return true
  return false
}

但是如果 if 语句被反转,它不会给出任何警告。

const isStr = (str: string): boolean=> {
  if(str instanceof String)
    return true
  if(typeof str === 'string')
    return true;
  return false
}

是不是因为如果str instanceof String为真,typeof str === 'string'总是为真,但是反过来不总是对的?

最佳答案

欢迎使用 JavaScript 的字符串定义。在您的控制台中试试这个:

var str = 'foo';
typeof str;
// result: "string"

str instanceof String;
// result: false

var Str = new String('bar');
typeof Str;
// result: "object"

Str instanceof String;
// result: true

基本上,在 JavaScript 中,常规字符串实际上不是 String 实例(就像它们在 Java 中一样),而是字符串基元。由于在您的函数中您显式地将参数声明为 string(原语),因此第一个条件将始终为真,因此第二个条件是死代码。如果切换它们,str instanceof String 将始终为 false,因此第二个条件仍然有效。

关于javascript - 为什么flow在使用instanceof时会给出uncovered code warning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50625109/

相关文章:

javascript - 比较 Flow 中的枚举值

c - C语言中如何统计某个字符在数组中出现的次数?

string - GPU 上字符串处理的最佳实践?

javascript - 调用 JS 变量内的值作为 JS 函数名

javascript - 控制 JavaScript 中的十进制输出

java 将 null 放入 int 变量中

javascript - 如何在ES6+flow中增加Map项?

javascript - Flowtype 函数可能会抛出错误

javascript - Jquery 不从数字中删除逗号和美元符号

javascript - sendSignInLinkToEmail 发送无效的 URL