Loose equality comparison type coercion
This warning category is spelled [equality-type-coercion] by qmllint.
Loose equality comparison type coercion
What happened?
Two values were compared for equality using the loose comparison operators.
Why is that bad?
The loose comparison operators can coerce values to a different type before checking for equality. This can lead to unexpected results.
Example
Here is an example with a list of Rectangles and a TextInput. When the user enters a number, the Rectangle at that index is highlighted. The code has a flaw. If the input is empty, the first rectangle is highlighted in red, because "" == 0.
import QtQuick Item { TextInput { id: input } Repeater { model: 3 Rectangle { // first rectangle is red on empty input color: input.text == index ? "red" : "blue" } } }
In general, use the strict comparison operators === and !==. Even if you are aware of the coercion, it is still recommended to use explicit casts and strict comparisons instead.
import QtQuick Item { TextInput { id: input } Repeater { model: 3 Rectangle { // check inputs, use explicit casts, and strict equality operators color: input.text.length !== 0 && Number(input.text) === index ? "red" : "blue" } } }