noUnsafeOptionalChaining
诊断类别:lint/correctness/noUnsafeOptionalChaining
¥Diagnostic Category: lint/correctness/noUnsafeOptionalChaining
自从:v1.0.0
¥Since: v1.0.0
来源:
¥Sources:
-
与以下相同:
no-unsafe-optional-chaining
¥Same as:
no-unsafe-optional-chaining
禁止在未允许使用未定义值的上下文中使用可选链接。
¥Disallow the use of optional chaining in contexts where the undefined value is not allowed.
可选链 (?.) 表达式可以短路,返回值为未定义。因此,将已评估的可选链表达式视为函数、对象、数字等可能会导致 TypeError 或意外结果。此外,括号限制了链中短路的范围。
¥The optional chaining (?.) expression can short-circuit with a return value of undefined. Therefore, treating an evaluated optional chaining expression as a function, object, number, etc., can cause TypeError or unexpected results. Also, parentheses limit the scope of short-circuiting in chains.
¥Examples
¥Invalid
code-block.js:1:9 lint/correctness/noUnsafeOptionalChaining ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Unsafe usage of optional chaining.
> 1 │ 1 in obj?.foo;
│ ^^
2 │
ℹ If it short-circuits with ‘undefined’ the evaluation will throw TypeError here:
> 1 │ 1 in obj?.foo;
│ ^^^^^^^^^^^^^
2 │
code-block.cjs:1:10 lint/correctness/noUnsafeOptionalChaining ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Unsafe usage of optional chaining.
> 1 │ with (obj?.foo);
│ ^^
2 │
ℹ If it short-circuits with ‘undefined’ the evaluation will throw TypeError here:
> 1 │ with (obj?.foo);
│ ^^^^^^^^^^^^^^^^
2 │
code-block.js:1:16 lint/correctness/noUnsafeOptionalChaining ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Unsafe usage of optional chaining.
> 1 │ for (bar of obj?.foo);
│ ^^
2 │
ℹ If it short-circuits with ‘undefined’ the evaluation will throw TypeError here:
> 1 │ for (bar of obj?.foo);
│ ^^^^^^^^^^^^^^^^^^^^^^
2 │
code-block.js:1:19 lint/correctness/noUnsafeOptionalChaining ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Unsafe usage of optional chaining.
> 1 │ bar instanceof obj?.foo;
│ ^^
2 │
ℹ If it short-circuits with ‘undefined’ the evaluation will throw TypeError here:
> 1 │ bar instanceof obj?.foo;
│ ^^^^^^^^^^^^^^^^^^^^^^^
2 │
code-block.js:1:20 lint/correctness/noUnsafeOptionalChaining ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Unsafe usage of optional chaining.
> 1 │ const { bar } = obj?.foo;
│ ^^
2 │
ℹ If it short-circuits with ‘undefined’ the evaluation will throw TypeError here:
> 1 │ const { bar } = obj?.foo;
│ ^^^^^^^^^^^^^^^^^^
2 │
code-block.js:1:5 lint/correctness/noUnsafeOptionalChaining ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Unsafe usage of optional chaining.
> 1 │ (obj?.foo)();
│ ^^
2 │
ℹ If it short-circuits with ‘undefined’ the evaluation will throw TypeError here:
> 1 │ (obj?.foo)();
│ ^^
2 │
code-block.js:1:5 lint/correctness/noUnsafeOptionalChaining ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Unsafe usage of optional chaining.
> 1 │ (baz?.bar).foo;
│ ^^
2 │
ℹ If it short-circuits with ‘undefined’ the evaluation will throw TypeError here:
> 1 │ (baz?.bar).foo;
│ ^^^
2 │
¥Valid
¥Related links